【问题标题】:Val_accuracy doesn't change when I'm training my model当我训练我的模型时,val_accuracy 不会改变
【发布时间】:2020-05-16 23:43:15
【问题描述】:

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

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]
                         )

这是训练的日志:

Epoch 1/150
25/25 [==============================] - 200s 8s/step - loss: 0.1236 - accuracy: 0.9498 - val_loss: 2.0365 - val_accuracy: 0.5470
Epoch 2/150
25/25 [==============================] - 195s 8s/step - loss: 0.1251 - accuracy: 0.9530 - val_loss: 2.0819 - val_accuracy: 0.5470
Epoch 3/150
25/25 [==============================] - 199s 8s/step - loss: 0.1314 - accuracy: 0.9500 - val_loss: 2.1083 - val_accuracy: 0.5470

等等 所以如果你能看到我的模型有什么问题,请帮忙! 谢谢!

【问题讨论】:

  • 尝试使用 1) weights='imagenet',(2) 使用 validation_steps,(3) 检查移除回调的准确性,增加耐心 (4) 使用数据增强

标签: python tensorflow keras model conv-neural-network


【解决方案1】:

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

  1. 解冻某些层以使其可训练,从而进一步适应您的新问题。
  2. 在应用迁移学习后降低学习率,以免“破坏”之前学习的所有内容。

将这两者结合在一起将解决您的问题。同时,您可能希望删除 BatchNormalization,正如下面评论中所建议的那样。

【讨论】:

    【解决方案2】:
    1. 您的 val 损失正在发生变化,但不足以导致预测转换为的硬类发生变化
    2. 这是典型的过拟合情况。你的数据集的大小是多少?您在 resnet 上使用了非常重的层。此外,请确保 resnet 已冻结,并且其权重(可训练和可更新,如批量规范层的移动装置和标准)不变。

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2021-09-14
      • 2021-02-21
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多