4 回答

TA贡献1876条经验 获得超7个赞
为确保您有“至少steps_per_epoch * epochs批次”,steps_per_epoch请将
steps_per_epoch = len(X_train)//batch_size
validation_steps = len(X_test)//batch_size # if you have validation data
model.fit()您可以看到训练中断时进度条可以占用的最大批次数:
5230/10000 [==============>...............] - ETA: 2:05:22 - loss: 0.0570
在这里,最大值为 5230 - 1
重要的是,请记住,默认情况下,batch_size是 32 英寸model.fit()。
如果你使用 a tf.data.Dataset,你也可以添加repeat()方法,但要小心:它会无限循环(除非你指定一个数字)。

TA贡献1831条经验 获得超9个赞
在尝试训练它们时,我也有许多模型崩溃并出现相同的警告。如果使用 tf.keras.preprocessing.image_dataset_from_directory() 创建训练数据集并拆分 80/20。我创建了一个变量来尝试并且不会用完图像。将 ResNet50 与我自己的图像一起使用.....
TRAIN_STEPS_PER_EPOCH = np.ceil((image_count*0.8/BATCH_SIZE)-1)
# to ensure that there are enough images for training bahch
VAL_STEPS_PER_EPOCH = np.ceil((image_count*0.2/BATCH_SIZE)-1)
但它仍然存在。BATCH_SIZE 设置为 32,所以我取 80% 的图像数量并除以 32,然后取 1 以产生盈余……或者我是这么认为的。
history = model.fit(
train_ds,
steps_per_epoch=TRAIN_STEPS_PER_EPOCH,
epochs=EPOCHS,
verbose = 1,
validation_data=val_ds,
validation_steps=VAL_STEPS_PER_EPOCH,
callbacks=tensorboard_callback)
处理一个成功的 Epoch 3 小时后的错误是:
纪元 1/25 374/374 [==============================] - 8133s 22s/步 - 损失:7.0126 - 准确度: 0.0028 - val_loss: 6.8585 - val_accuracy: 0.0000e+00 Epoch 2/25 1/374 [........ .] - ETA: 0s - loss: 6.0445 - accuracy: 0.0000e+00WARNING:tensorflow:Your input run out data; 中断训练。确保您的数据集或生成器至少可以生成steps_per_epoch * epochs批次(在本例中为 9350.0 个批次)。在构建数据集时,您可能需要使用 repeat() 函数。
这可能会有所帮助....
> > print(train_ds) <BatchDataset shapes: ((None, 224, 224, 3), (None,)), types: (tf.float32, tf.int32)>
>
> print(val_ds) BatchDataset shapes: ((None, 224, 224, 3), (None,)),types: (tf.float32, tf.int32)>
>
> print(TRAIN_STEPS_PER_EPOCH)
> 374.0
>
> print(VAL_STEPS_PER_EPOCH)
> 93.0

TA贡献1872条经验 获得超4个赞
对我有用的解决方案是drop_remainder=True
在生成数据集时进行设置。这会自动处理剩余的任何额外数据。
例如:
dataset = tf.data.Dataset.from_tensor_slices((images, targets)) \ .batch(12, drop_remainder=True)

TA贡献1827条经验 获得超8个赞
image_dataset_from_directory
如果您使用、删除 steps_per_epoch
和validation_steps
参数创建数据集model.fit
。
batch_size
原因是在传入时已经启动image_dataset_from_directory
了步骤,您可以尝试使用 获取步骤编号len
。
添加回答
举报