我使用了相同的数据集来训练和验证我的模型,但得到的训练和验证准确率/损失却不同。既然我使用的是相同的数据,准确率/损失不应该相同吗?
这是代码:
def create_model(dataset): model = tf.keras.models.Sequential([tf.keras.layers.BatchNormalization(), tf.keras.layers.Conv2D(32, (3, 3), activation='relu', ), tf.keras.layers.MaxPool2D(2, 2), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPool2D(2, 2), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPool2D(2, 2), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPool2D(2, 2), tf.keras.layers.Dropout(0.5), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(2, activation='softmax')]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) model.fit(dataset, validation_data=dataset) return model
我得到的结果是:
100/100 [==============================] - 178s 2s/step - loss: 0.6487 - sparse_categorical_accuracy: 0.6212 - val_loss: 0.5866 - val_sparse_categorical_accuracy: 0.7001
请注意,我只进行了一个epoch。
回答:
这是因为Dropout
层在验证时不生效。此外,训练准确率是所有批次准确率的平均值,而验证准确率则是整个数据集的准确率。