猿问

tensorflow:您的输入没有数据

我正在研究 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")


摇曳的蔷薇
浏览 162回答 4
4回答

幕布斯6054654

为确保您有“至少steps_per_epoch * epochs批次”,steps_per_epoch请将steps_per_epoch = len(X_train)//batch_sizevalidation_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()方法,但要小心:它会无限循环(除非你指定一个数字)。

天涯尽头无女友

在尝试训练它们时,我也有许多模型崩溃并出现相同的警告。如果使用 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 bahchVAL_STEPS_PER_EPOCH = np.ceil((image_count*0.2/BATCH_SIZE)-1)但它仍然存在。BATCH_SIZE 设置为 32,所以我取 80% 的图像数量并除以 32,然后取 1 以产生盈余……或者我是这么认为的。history = model.fit(&nbsp; &nbsp; &nbsp; &nbsp; train_ds,&nbsp; &nbsp; &nbsp; &nbsp; steps_per_epoch=TRAIN_STEPS_PER_EPOCH,&nbsp; &nbsp; &nbsp; &nbsp; epochs=EPOCHS,&nbsp; &nbsp; &nbsp; &nbsp; verbose = 1,&nbsp; &nbsp; &nbsp; &nbsp; validation_data=val_ds,&nbsp; &nbsp; &nbsp; &nbsp; validation_steps=VAL_STEPS_PER_EPOCH,&nbsp; &nbsp; &nbsp; &nbsp; 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)>>&nbsp;> print(val_ds) BatchDataset shapes: ((None, 224, 224, 3), (None,)),types: (tf.float32, tf.int32)>>&nbsp;> print(TRAIN_STEPS_PER_EPOCH)> 374.0>&nbsp;> print(VAL_STEPS_PER_EPOCH)> 93.0

守着一只汪

对我有用的解决方案是drop_remainder=True在生成数据集时进行设置。这会自动处理剩余的任何额外数据。例如:dataset&nbsp;=&nbsp;tf.data.Dataset.from_tensor_slices((images,&nbsp;targets))&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.batch(12,&nbsp;drop_remainder=True)

斯蒂芬大帝

image_dataset_from_directory如果您使用、删除&nbsp;steps_per_epoch 和validation_steps参数创建数据集model.fit。batch_size原因是在传入时已经启动image_dataset_from_directory了步骤,您可以尝试使用 获取步骤编号len。
随时随地看视频慕课网APP

相关分类

Python
我要回答