迭代器不存储任何内容,它动态生成数据。当您使用数据集或数据集迭代器时,您必须提供steps_per_epoch
。迭代器的长度在迭代之前是未知的。你可以明确地通过len(datafiles)
进入.fit
功能。因此,您需要提供steps_per_epoch,如下所示。
model.fit_generator(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs,
validation_data=val_data_gen,
validation_steps=total_val // batch_size
)
提到了更多细节here https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit
steps_per_epoch:整数或无。总步数(批次
样本),然后声明一个时期结束并开始下一个时期
时代。使用 TensorFlow 数据等输入张量进行训练时
张量,默认 None 等于您的样本数
数据集除以批量大小,如果无法确定则为 1。
如果 x 是 tf.data 数据集,并且 'steps_per_epoch' 为 None,则纪元
将运行直到输入数据集耗尽。这个说法不
支持数组输入。
我注意到您正在使用二元分类。使用时还要记住一件事ImageDataGenerator
是提供class_mode
如下所示。否则,将会出现错误(在 keras 中)或 50% 的准确率(在 tf.keras 中)。
train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),class_mode='binary') #