为了账号安全,请及时绑定邮箱和手机立即绑定

tensorflow:您的输入没有数据

tensorflow:您的输入没有数据

摇曳的蔷薇 2022-07-05 19:31:08
我正在研究 seq2seq keras/tensorflow 2.0 模型。每次用户输入内容时,我的模型都会完美地打印响应。然而,在每个响应的最后一行我得到这个:你:警告:tensorflow:你的输入用完了数据;中断训练。确保您的数据集或生成器至少可以生成steps_per_epoch * epochs批次(在本例中为 2 个批次)。在构建数据集时,您可能需要使用 repeat() 函数。“你:”是我的最后一个输出,在用户应该输入新内容之前。模型工作得很好,但我想没有错误是好的,但我不太明白这个错误。它说“中断训练”,但是我没有训练任何东西,这个程序加载了一个已经训练过的模型。我想这就是为什么错误没有停止程序的原因?如果有帮助,我的模型如下所示:intent_model = keras.Sequential([    keras.layers.Dense(8, input_shape=[len(train_x[0])]),  # input layer    keras.layers.Dense(8),  # hidden layer    keras.layers.Dense(len(train_y[0]), activation="softmax"),  # output layer])intent_model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])intent_model.fit(train_x, train_y, epochs=epochs)test_loss, test_acc = intent_model.evaluate(train_x, train_y)print("Tested Acc:", test_acc)intent_model.save("models/intent_model.h5")
查看完整描述

4 回答

?
幕布斯6054654

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()方法,但要小心:它会无限循环(除非你指定一个数字)。


查看完整回答
反对 回复 2022-07-05
?
天涯尽头无女友

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


查看完整回答
反对 回复 2022-07-05
?
守着一只汪

TA贡献1872条经验 获得超4个赞

对我有用的解决方案是drop_remainder=True在生成数据集时进行设置。这会自动处理剩余的任何额外数据。

例如:

dataset = tf.data.Dataset.from_tensor_slices((images, targets)) \
        .batch(12, drop_remainder=True)


查看完整回答
反对 回复 2022-07-05
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

image_dataset_from_directory如果您使用、删除 steps_per_epoch validation_steps参数创建数据集model.fit

batch_size原因是在传入时已经启动image_dataset_from_directory了步骤,您可以尝试使用 获取步骤编号len


查看完整回答
反对 回复 2022-07-05
  • 4 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号