【问题标题】:Python - Keras Model doesnt convergePython - Keras 模型不收敛
【发布时间】:2018-11-27 04:53:53
【问题描述】:

我有一个包含32 输入节点、20 隐藏节点和65 输出节点的网络。我的网络输入实际上是长度为32 的哈希码,输出是单词。 输入是哈希码每个字符的ascii值。网络的输出是我制作的二进制表示。比如a等于00000b等于00001等等。它只包括字母表和空格,为什么每个字符只有5 位。我的训练输入中只有13 个字符的最大限制,所以我的输出节点是13 * 5 = 65。我期待像 10101010101010101010101010101010101010101010101010101010101001011 这样的二进制输出。给定长度为32 的哈希码作为输入,位序列最多可以预测 16 个字符的单词。以下是我当前的代码:

scaler = MinMaxScaler(feature_range=(0,1))
scaled_train_samples = scaler.fit_transform((train_samples).reshape(-1, 32))
train_labels = train_labels.reshape(-1, 65)


model = Sequential([
    Dense(32, input_shape=(32,), activation = 'sigmoid'),
    BatchNormalization(),
    Dense(25, activation='tanh'),
    BatchNormalization(),
    Dense(65, input_shape=(65,), activation='sigmoid')
])

overfitCallback = EarlyStopping(monitor='loss', min_delta=0, patience = 1000)

model.summary()
model.compile(SGD(lr=.01, decay=1e-6,  momentum=0.9),     loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_samples, train_labels, batch_size=1000, epochs=1000000, callbacks=[overfitCallback], shuffle = True, verbose=2)

我打算过拟合模型,这样它就可以记住字典中单词的所有哈希码。一开始,我的训练样本只有5,000 的东西。我只是想看看它是否会从一个小数据集中学习。如何让网络更快收敛?我认为它运行了一个多小时,它的损失函数仍然是 0.5004 左右,准确度是 0.7301。它起起落落,但是当我每 10 分钟左右检查一次时,我只能看到一点点改善。我将如何微调它?

更新:

训练已经停止,但没有收敛。它的损失是.4614,准确度是.7422

【问题讨论】:

  • 我建议尝试使用默认值的 Adam 优化器。它会自动调整学习率,因此它往往是最简单的最小化方法。如果 Adam 不起作用,那么您的网络可能无法学会表示数据。
  • @bivouac0 -> 我已经尝试过 Adam,但它没有收敛。我对数据进行编码时可能有问题。或隐藏节点的数量?请指导我如何调整它。
  • “收敛”和“给出我想要的损失”是有区别的,对吧?

标签: python tensorflow machine-learning keras neural-network


【解决方案1】:

我建议先更改一些超参数。

尝试'relu'LeakyReLU() 作为非输出层的激活函数。基本上relu 是基线模型的标准激活函数。

目前的标准优化器(大多数情况下)是 Adam,请尝试使用它。在需要时调整其学习率。使用 sgd 可以获得更好的结果,但它通常需要大量的 epoch 和大量的超参数调整。 Adam 基本上是最快(通常)达到“低”损失的优化器。

为了防止过度拟合,您可能还需要实现Dropout(0.5),其中 0.5 就是一个示例。

一旦达到最低损失,您可能会开始更多地更改这些超参数,以尝试降低损失。

除此之外,我实际上建议的第一件事是尝试添加多个不同大小的隐藏层。与尝试优化所有超参数相比,这可能会产生更大的影响。

编辑:也许您可以发布训练和验证数据的训练损失与时期的屏幕截图?这可能会让其他人更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多