我正在使用tensorflow2.0和tensorflow_datasets进行训练。但是我不明白:为什么训练的准确性和损失与valdataion的准确性和损失不同?
这是我的代码:
import tensorflow as tf
import tensorflow_datasets as tfds
data_name = 'uc_merced'
dataset = tfds.load(data_name)
# the train_data and the test_data are same dataset
train_data,test_data = dataset['train'],dataset['train']
def parse(img_dict):
img = tf.image.resize_with_pad(img_dict['image'],256,256)
#img = img / 255.
label = img_dict['label']
return img,label
train_data = train_data.map(parse)
train_data = train_data.batch(96)
test_data = test_data.map(parse)
test_data = test_data.batch(96)
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = tf.keras.applications.Resnet50(weights=None,classes=21,input_shape=(256,3))
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(train_data,epochs=50,verbose=2,validation_data=test_data)
这非常简单,您可以在计算机上运行它。您可以看到我的火车数据和验证数据是相同的train_data,dataset['train']
。
但是火车的准确性(损失)与验证准确性(损失)不同。为什么会这样呢?这是tensorflow2.0的错误吗?
Epoch 1/50
22/22 - 51s - loss: 3.3766 - accuracy: 0.2581 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00
Epoch 2/50
22/22 - 30s - loss: 1.8221 - accuracy: 0.4590 - val_loss: 123071.9851 - val_accuracy: 0.0476
Epoch 3/50
22/22 - 30s - loss: 1.4701 - accuracy: 0.5405 - val_loss: 12767.8928 - val_accuracy: 0.0519
Epoch 4/50
22/22 - 30s - loss: 1.2113 - accuracy: 0.6071 - val_loss: 3.9311 - val_accuracy: 0.1186
Epoch 5/50
22/22 - 31s - loss: 1.0846 - accuracy: 0.6567 - val_loss: 23.7775 - val_accuracy: 0.1386
Epoch 6/50
22/22 - 31s - loss: 0.9358 - accuracy: 0.7043 - val_loss: 15.3453 - val_accuracy: 0.1543
Epoch 7/50
22/22 - 32s - loss: 0.8566 - accuracy: 0.7243 - val_loss: 8.0415 - val_accuracy: 0.2548