【发布时间】:2019-11-12 20:54:09
【问题描述】:
我正在使用 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,5,6],[7,8,9], [10,11,12]],
[[7,8,9],[10,11,12],[13,14,15]],
...
]
Y = [
[4],
[7],
[10],
...
]
(是的,我意识到我可以很容易地只包含一个功能并制作X=[[[1,2,3]], [[4,5,6]], [[7,8,9]], ...],但我将包含许多在管道工作时无法完美同步的功能。此外,即使当我只包括第一个功能,我仍然看到我描述的问题。)
然后,我建立我的模型:
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)
它正确地报告了训练和验证样本的数量,然后弹出进度条......但这就是成功停止的地方。对于每个 epoch,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 问题。请查看该帖子以获取有关进度的更新,当问题解决后,我会尽量记住更新此帖子。
【问题讨论】:
-
您能在 v1.15 代码中导入 tensorflow 后立即致电
tf.compat.v1.enable_v2_behavior()吗?那么在训练中会发生什么?这似乎是一个错误,而不是你的错误......也许在 TF 的 GitHub 上打开一个问题也可能得到回报 -
我打电话给
tf.compat.v1.enable_v2_behavior(),这绝对是一个 tensorflow 错误。在提交错误报告之前,我一直在寻找这样的功能来检查,所以非常感谢!如果您提交答案,我会接受,以便您获得赏金:) -
很高兴听到它有帮助!我详细说明了答案,尤其是在 Keras vs tf.keras 部分。也许您也可以尝试一下;)作为旁注,如果您确实在 Github 上提出了问题,那么在问题中也有一个指向它的链接会很棒,您可以添加它吗? :) 祝你好运!
-
完成!我会尽量记住在可用时发布更新
标签: tensorflow tensorflow2.0 tf.keras