训练模型时Val_accuracy不变

时间:2020-05-16 23:43:15

标签: python tensorflow keras model cnn

我正在研究皮肤癌识别模型。 我正在尝试使用keras和tensorflow训练我的模型,但是我注意到val_accuracy并没有改变,它的精度和损耗以及val_loss都在变化,它停留在54%。 我对ResNet50层使用了预先训练的权重,然后添加了其他层并冻结了第一层以训练其余部分。 这是我的模型:

console.log(
  Math.round(90071992547409.93 * 100) === 9007199254740993,
);

这是培训的日志:

model = keras.Sequential()
model.add(ResNet50(include_top=False,input_tensor=None, input_shape=(224,224,3)
,pooling='avg',classes=2,weights=resnet_weights_path))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(1, activation='sigmoid'))
model.layers[0].trainable = False
model.summary()
model.compile(optimizer=SGD(lr=0.001),loss='binary_crossentropy',metrics=['accuracy'])
red_lr= ReduceLROnPlateau(monitor='val_accuracy',patience=3,verbose=1,factor=0.7)
batch_size=64
epochs=150
History = model.fit_generator(datagen.flow(x_train,y_train,batch_size=batch_size),validation_data=(x_val,y_val),
                          epochs= epochs, steps_per_epoch=x_train.shape[0]//batch_size,verbose=1,callbacks=[red_lr]
                         )

以此类推 因此,如果您能看到我的模型出了什么问题,请帮忙! 谢谢!

2 个答案:

答案 0 :(得分:1)

发生这种情况的原因是您没有:

  1. 解冻某些图层以使其易于训练,从而使您能够进一步适应新问题。
  2. 自从应用转移学习以来,降低学习率,以免“破坏”以前学过的所有东西。

将这两个结合在一起可以解决您的问题。同时,您可能要删除BatchNormalization,如下面的注释中所建议。

答案 1 :(得分:0)

  1. 您的Val损失正在变化,但不足以导致将预测转换为的硬类发生变化
  2. 这是过度拟合的典型情况。您的数据集的大小是多少?您在resnet上使用了非常重的层。另外,请确保resnet处于冻结状态,并且其权重(既可训练又可更新,例如批处理规范层的移动方式和标准)都没有变化。