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
。
添加回答
舉報