我目前正在UNet上研究中风的分类问题,任务是基于病变面积的大小(large - 1,small - 0).注意,标签实际上是由我制作的(我会努力改进的)所以他们不是那么准确。当我训练像20个纪元时,我的准确率在0. 5左右波动,损失在0. 6左右,基本上就是说我的模型做随机选择。那么我该怎么做才能让我的模型再次学习呢?
下面是我使用的Unet:
`import keras_unet
def define_unet(n_filters=neuron,
n_layers=4,
dropout_rate=0.25):
model_unet = keras_unet.models.custom_unet(input_shape=(img_size, img_size, 3),
activation='relu',
use_batch_norm=True,
upsample_mode='deconv',
dropout=dropout_rate,
dropout_type='spatial',
filters=n_filters,
num_layers=n_layers,
output_activation='linear'
)
GAP = keras.layers.GlobalAveragePooling2D()(model_unet.output)
outputs = keras.layers.Dense(1,activation = 'sigmoid')(GAP)
model_unet = keras.Model(inputs = model_unet.input, outputs = outputs)
#bce is just the binary crossentropy
model_unet.compile(optimizer=adam, loss=bce_loss,metrics=['accuracy'])
model_unet.summary()
return model_unet`
这里是超参数:
`learning_rate = 0.0001
epochs = 20
dropout_rate = 0.2
batch_size = 16
kernel_size = 3
neuron = 8
adam = keras.optimizers.Adam(learning_rate=learning_rate)`
我的数据集包含1000张图像,这些图像以80:20的比例进行训练和验证,我使用的batch_size = 16。下面是accc和loss的图:
第一次
我试过实现一些学习率,但没有成功:(
提前感谢您的帮助!!!任何建议将不胜感激。
1条答案
按热度按时间bzzcjhmw1#
为了提高精度,首先需要使用正确的度量,当用0到1标记为浮点数时,精度矩阵可以正确工作,因为它是二进制交叉熵,它可以反映负数结果,因为它与标记值的平方差不同。
它不是波动的损失和准确性,但你需要使用正确的方法,二元交叉熵作为单一是一个非常快的驱动器,但返回的转折点是确定性的。
示例:您可以应用所有输出的平均值或仅应用临界点。
示例:您可以尝试使用向量来改进结果。
输出结果:
精度与epoaches: