Model.predict()返回的结果与Model.fit()不同



尽管我考虑了相同的数据(val_ds(,但模型在拟合阶段的准确率为36.5%,在预测阶段的准确度仅为14.5%。

我做错了什么?

model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255, input_shape=(200, 200, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', 
kernel_regularizer=regularizers.l2(l=0.01)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu', 
kernel_regularizer=regularizers.l2(l=0.01)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu', 
kernel_regularizer=regularizers.l2(l=0.01)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(8, activation='softmax')
])
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['sparse_categorical_accuracy'])
early_stop = EarlyStopping(monitor='val_loss', min_delta=0, patience=3, verbose=1, mode='auto')
epochs=40
history = model.fit(
train_ds,
validation_data=val_ds,
callbacks=[early_stop],
epochs=epochs
)

val_ds->lt;类'tensorflow.python.data.ops.dataset_ops.SkipDataset'>

train_ds->lt;类'tensorflow.python.data.ops.dataset_ops.BatchDataset'>

cnn1_pred = model.predict(val_ds)
cnn1_pred = cnn1_pred.argmax(axis=-1)
val_label = np.concatenate([y for x, y in val_ds], axis=0)
count = 0
for n in range(3384):
if val_label[n] == cnn1_pred[n]:
count += 1
perf = round(count/3384, 4)

编辑:我注意到如果我运行

val_label = np.concatenate([y for x, y in val_ds], axis=0)
print(val_label)

我总是得到不同的结果。这不应该发生我想

是否检查了model.eevaluate(val_ds(?尝试一下,您为获得精度perf而实现的计算可能出现问题。

最新更新