【问题标题】:Keras model loss starts at 0, but only sometimesKeras 模型损失从 0 开始,但只是有时
【发布时间】:2018-08-29 20:10:14
【问题描述】:

我正在尝试了解哪些输入参数可能适合我的数据,因此我正在训练多个模型并尝试比较结果。出于某种原因,即使准确度非常低,某些模型开始时也会损失 0。 我的代码看起来像: first=keras.models.Sequential() first.add(keras.layers.LSTM(100, activation = 'tanh', input_shape = (X.shape[1], 1), return_sequences = True)) first.add(keras.layers.Dense(Y.shape[2], activation = 'softmax')) first.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics=['categorical_accuracy']) models["first"]=first

我有一系列类似的代码块,每个代码块都改变了一些参数。 甚至在我尝试拟合之前,其中一些损失已经为 0(或 2.79e-7),但没有任何真正的一致性。有时第一个模型会有这个问题,有时是第三个。发生这种情况时,我什至尝试重新生成数据和模型,但是当我这样做时,损失== 0 问题的可能性似乎增加了。 输入数据的形式是 [[[5],[7],[3]...]...],在我通过 keras.utils.to_categorical 运行它们之前,标签是相同的,现在它是 1 hot .我相当确定输入和标签是正确的,因为任何给定的模型在大多数情况下都能正常工作。

此时任何建议都会很有用。

编辑:这似乎只发生在 GPU 上运行时。当我强制 TensorFolw 仅在 CPU 上运行时,没有任何问题。知道是什么导致 GPU 出现问题吗?

【问题讨论】:

    标签: python tensorflow keras lstm


    【解决方案1】:

    尝试设置您的随机种子以获得可重复性:

    random.seed(10)
    

    此外,如果模型是无状态的,则每个序列都会重置单元状态。但如果不是,例如如果您使用 stateful = True,您将需要在每次训练运行后重置状态。

    【讨论】:

    • 我应该如何设置种子。我已经使用 numpy.random.seed(10) 和 tensorflow.set_random_seed(10) 设置了数据生成的种子,但是如何为 keras 设置种子?也知道为什么当准确性低时模型会以 ~0 的损失开始?
    • numpy.randon.seed(10) 应该足够了。另外两个想法,您是否在缩放输入数据?在某些情况下,未缩放的输入数据可能导致零或 NaN 除法。见:machinelearningmastery.com/…。其次,您是否每次都以相同的方式拆分训练/测试数据?我会在同一个火车/测试拆分上对其进行测试,看看它有多一致。可能有助于缩小范围。
    • 我尝试将输入数据缩放到 0 到 1 之间,同样的问题。训练数据和测试数据是从同一个函数分别生成的,但我只是尝试将其拆分,没有任何变化。问题在我调用 fit 之前就已经发生了,因为评估(带有训练或测试数据)已经损失了 0
    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2018-02-01
    • 2020-11-08
    • 2017-10-02
    • 2019-09-18
    相关资源
    最近更新 更多