【发布时间】: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。谢谢。还有一件事。我的身份证看起来像韩国人吗??