【发布时间】:2020-08-24 13:33:33
【问题描述】:
对于某些背景,我的数据集大约是 75000 多张图像,200x200 灰度,有 26 个类别(字母表中的字母)。我的模型是:
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(200, 200, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(26, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=[tf.keras.metrics.CategoricalAccuracy()])
model.fit(X_train, y_train, epochs=1, batch_size=64, verbose=1, validation_data=(X_test, y_test))
model.fit的输出为:
Train on 54600 samples, validate on 23400 samples
Epoch 1/1
54600/54600 [==============================] - 54s 984us/step - loss: nan - categorical_accuracy: 0.9964 - val_loss: nan - val_categorical_accuracy: 0.9996
99.9+ 验证准确度。当我运行测试时,它得到的所有预测都不正确。所以,我认为它是过拟合的。为什么会发生这种情况,尽管添加了 dropout 层?我还有什么其他选择可以解决这个问题?谢谢!
【问题讨论】:
-
损失中的nan值表明存在梯度扩展。但在某些情况下,当输入数据损坏时会看到 nan 值。我遇到过同样的问题。原因是最终密集层中的类数和单元数不匹配。
-
感谢您的回复,您对我能做什么有什么建议吗?我敢肯定,班级的数量和单位的数量没有不匹配。我正在 Alphabet 上训练,26 个课程 - 这与 26 的 Dense 输出也匹配 @sreagm
-
如果输入管道没有问题,我认为最好尝试不同的架构。还值得尝试包含一个批量标准化层吗?
标签: python tensorflow deep-learning conv-neural-network dropout