【问题标题】:Why my model's training and validation accuracy remains constant after one epoch? [Keras]为什么我的模型的训练和验证准确度在一个 epoch 之后保持不变? [凯拉斯]
【发布时间】:2019-05-10 10:03:12
【问题描述】:

我有 4684 个维度为 (4684, 150, 150, 3) 的图像数据和维度为 (4684, 8) 的标签数据。在第一个 epoch,训练准确度为 0.5695,验证准确度为 0.7535。在第一个 epoch 之后,我的模型没有学习,它的训练和验证准确性保持不变。那么,可能是什么问题?你们能帮帮我吗?

这是我的模型。

model = Sequential()
model.add(Conv2D(kernel_size=(3,3),filters=8,input_shape=(150, 150, 3),activation="relu",padding="valid"))
model.add(Conv2D(kernel_size=(3,3),filters=8,activation="relu",padding="same"))
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
model.add(Flatten())
model.add(Dropout(0.6))
model.add(Dense(100,activation="relu"))
model.add(Dense(8,activation='softmax'))
model.summary()

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adam(lr=0.001),
              metrics=['accuracy'])

X = model.fit(data,labels,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          shuffle=True,
          validation_split=0.2)

plt.plot(X.history['loss'])
plt.plot(X.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

【问题讨论】:

    标签: keras deep-learning conv-neural-network


    【解决方案1】:

    请问,标签是否转换为分类?

    还有二,请将优化器 Adam 更改为 SGD,其中 lr = .1

    第三个,请删除 Conv2D 层中的相同或添加更多 Conv2D + MaxPooling2D 层到模型

    【讨论】:

    • 是的,标签被转换为分类。标签 = keras.utils.to_categorical(labels, 8)
    • 刚刚试过你说的。但仍然获得相同的训练和验证准确性。
    • 哦,你只用了 8 个过滤器。将它们更改为 128 和 64!我希望这次能正常工作:)
    • 谢谢阿敏。有效。我添加了一些更多的 conv2D 层和过滤器。它不是用 SGD 学习的,但是当我再次使用 Adam 时,它现在正在学习。
    • 很好。祝我的朋友好运:)
    猜你喜欢
    • 2020-11-02
    • 2018-12-20
    • 1970-01-01
    • 2021-07-19
    • 2021-05-04
    • 2020-05-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多