【问题标题】:CNN validation dataset doesn't work while model.fitCNN 验证数据集在 model.fit 时不起作用
【发布时间】:2021-11-22 20:30:37
【问题描述】:

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

但是,我拆分了训练/验证/测试数据,然后运行模型。 这些是我的代码。

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))

训练图像:(504, 255, 255, 3) / 训练标签:(504,)
val 图片:(127, 255, 255, 3) / val 标签:(127,)
测试图像:(158, 255, 255, 3) / 测试标签:(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=50的使用有关。
  • 我搜索了什么是validation_steps,但仍然没有任何线索。你能详细解释一下吗?
  • 来自docs:“仅当validation_data 提供并且tf.data 数据集时才相关。”,使用validation_steps 你需要tf.Data不是元组。
  • 如果我对文档的理解正确,您需要从验证集中创建一个 tf.Data.Dataset 对象并添加重复函数,然后继续,或将其保留为元组,但删除 validation_steps参数,或者直接使用validation_split,如果验证集的选择没有什么特别之处。
  • 我删除了 validation_steps,它可以按我的意愿工作。也许我尝试创建 tf.Data.Dataset。谢谢。还有一件事。我的身份证看起来像韩国人吗??

标签: conv-neural-network


【解决方案1】:

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

validation_steps:仅当提供了validation_data并且是tf.data数据集时才相关...

你可以解决这个问题

  1. 将您的验证数据更改为tf.data.Dataset (docs) 类型并添加repeat 以在数据结束的情况下继续验证。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多