model.fit 时 CNN 验证数据集不起作用

CNN validation dataset doesn't work while model.fit

我正在尝试使用 CNN 训练自己的图像。

但是,我拆分了 train/validation/test 数据和 运行 模型。 这些是我的代码。

print("train images : {} / train labels : {}".format(train_image.shape, train_label.shape))
print("val images : {} / val labels : {}".format(val_image.shape, val_label.shape))
print("test images : {} / test labels : {}".format(test_image.shape, test_label.shape))

train images : (504, 255, 255, 3) / train labels : (504,)
val images : (127, 255, 255, 3) / val labels : (127,)
test images : (158, 255, 255, 3) / test labels : (158,)

import tensorflow as tf
model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(255, 255, 3)),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation='relu'),
  tf.keras.layers.Dense(1, activation='sigmoid')
])

model.summary()

from tensorflow.keras.optimizers import RMSprop

model.compile(optimizer=RMSprop(lr=0.001),
            loss='binary_crossentropy',
            metrics = ['accuracy'])

history = model.fit(train_image, train_label,
                    epochs=100,
                    validation_data = (val_image, val_label),
                    validation_steps=50,
                    verbose=2)

如您所见,验证集仅在第一次起作用。 我该如何解决这个问题?

问题是使用 validation_steps 而数据集不是 tf.data.Dataset 类型,如 docs:

中所述

validation_steps: Only relevant if validation_data is provided and is a tf.data dataset ...

您可以通过以下任一方式解决此问题

  1. 将您的验证数据更改为类型 tf.data.Dataset (docs) 并添加 repeat 以继续验证,而不会结束数据。

  2. 删除 validation_steps 属性,这将在每个时期进行 运行 验证。