当调用tf.keras.model.fit时,Tensorflow 2.0不会遍历整个数据集

我正在使用tensorflow 2.0在tf.keras中训练一个模型。 我遇到一个问题,我的模型似乎可以成功训练,但是它没有遍历整个数据集。我将代码重组为tensorflow 1.15,在tensorflow 1.x中没有这个问题。我正在关注this tutorial,以了解多个输入系列。以下是更多详细信息:

我有一个时间序列数据集。它很小,因此我可以将其加载到内存中,因此不需要数据集API。我正在查看时间序列以产生两个数组X和Y,例如

X=[
   [[1,2,3],[4,5,6],[7,8,9]],[[4,9],[10,11,12]],[[7,12],[13,14,15]],...
  ] 
Y = [
     [4],[7],[10],...
    ]

(是的,我意识到我可以很容易地只包含其中一个功能并制作X=[[[1,3]],6]],...],但是我将包含许多功能,这些功能在管道正常工作时并不能完美地同步。此外,即使仅包含第一个功能,我仍然看到我描述的问题。)

然后,我建立我的模型:

model = Sequential()
model.add(LSTM(50,activation='relu',input_shape=(n_steps,n_features)))
model.add(Dense(1))
model.compile(optimizer='adam',loss='mse')

然后我训练它:

model.fit([X],[Y],num_epochs=300,validation_split=0.2)

它会正确报告训练和验证样本的数量,然后会弹出进度栏...但这就是成功的地方。对于每个时期,val_loss和val_mean_squared_error始终为0,并且似乎永远不会训练我的数据集中窗口的一小部分(〜1/1000)以上。这是打印输出:

Epoch X/300   192/162636 [..............................] - eta: 45:42 - loss: 0.4783 - mean_squared_error: 0.4783 - val_loss: 0.0000e+00 - val_mean_squared_error: 0.0000e+00

当我在tf 1.15中执行相同的代码时,它会按我的预期执行-历时大约需要45分钟(在tf 2.0中,它们需要

没有报告任何错误,警告或信息,它只是停止了对我的数据集的早期迭代。 有人对tensorflow 2.0中tf.keras.Model.fit的变化有任何见解吗?还是我走的道路上有任何错误?任何见识都将不胜感激。谢谢!

编辑11/25:

我已针对此错误here提交了GitHub问题。请查看该帖子以获取进度更新,并且在问题解决后,我会尽力记住要更新此帖子。

Hilda_Chen 回答:当调用tf.keras.model.fit时,Tensorflow 2.0不会遍历整个数据集

您描述的行为可疑,听起来很像TF方面的错误。 您可以尝试的一种可能的方法是在导入tensorflow之后立即调用tf.compat.v1.enable_v2_behavior(),以在TF 1.15中启用TF2的行为。这会进行很多内部更改(老实说,我自己不知道它到底是做什么的,文档只说“它将切换TensorFlow 1.x和2.x之间不同的所有全局行为。才能达到2.x的预期效果。”),这可以帮助您弄清错误的根源是在Tensorflow的实现中还是在您的代码中。

我要做的另一种可能的检查是确保您在各处使用tf.keras(即Tensorflow对Keras API的实现),而不是“独立的” Keras(您可以通过安装pip install keras)。第一个经过精心设计以与TF兼容,第二个也许还不能完全容忍TF1和TF2之间的重大变化,尽管这纯粹是猜测。

,

实际上,这是一个错误。当您更新Keras和TensorFlow时,会发生此问题。为了快速解决问题,首先,在google collab上,您应该使用以下方法卸载TensorFlow:

trait FooPrime : Foo {
    fn foo(&self) -> &'static str {
        Foo::foo(self)
    }
}

然后它说内核需要重新启动,执行此操作。 然后,您也应该卸载Keras:

    pip uninstall tensorflow

现在您必须安装tensorflow v 2.1.0:

    pip uninstall keras

,然后安装keras v 2.3.1:

    pip install tensorflow==2.1.0

例如,在旧版本中,当您在Keras上训练MNIST数据集(包含60,000个训练图像)时,在进度条的左侧显示x / 60,000,并且在每个步骤中,其继续为数字批量大小:

    pip install keras==2.3.1

但是,在较新的版本中,进度条左侧的数字实际上是图像总数除以批处理大小:

Epoch 3/4
60000/60000 [==============================] - 98s 2ms/step - loss: 0.0084 - accuracy: 0.9973 - val_loss: 0.0066 - val_accuracy: 0.9977

您必须注意,此问题不仅与培训中显示的样本数量有关,而且在某些体系结构上,新版本的整体性能会大大降低。上面的示例用于分类器,但是使用相同的代码,我得到的结果完全不同(在此示例中为第3阶段),您可以看到一切都不同。我不知道为什么这个错误是在较新的版本中,但我希望专家将来可以解决此问题。

本文链接:https://www.f2er.com/3114362.html

大家都在问