猿问

Tensorflow Keras LSTM 未训练 - 受 number_of_epoch

我有 2 个代码片段。其中一个训练模型,而另一个不训练。我不想在没有深入了解问题的情况下在 Github 上提出问题,这浪费了我一天的时间等待不正确的模型进行训练。


这是模型,这是正确的。运行张量流 1.10.1。


model = Sequential()

# I truncate the string at 20 characters, alphabet listset is a sorted list of the set of [A-Za-z0-9-_] which has len = 64

model.add(LSTM(512, return_sequences=True, input_shape=(20, len(alphabet_listset)), dropout=0.2, stateful=False))

model.add(LSTM(512, return_sequences=False, dropout=0.2, stateful=False))

model.add(Dense(2, activation="softmax"))

model.compile(optimizer=adam, loss='categorical_crossentropy', 

              metrics=['accuracy'])  # adam here is at learning rate 1e-3

model.summary()

要创建 X_train 和 Y_train 我使用test_train_split. 我将字符串转换为一个热向量的方式(即使现在对于 lstm 有一个热向量的功能,如果您添加它真的会有所帮助)是


def string_vectorizer(strng, alphabet, max_str_len=20):

    vector = [[0 if char != letter else 1 for char in alphabet] for letter in strng[0:max_str_len]]

    while len(vector) != max_str_len:

        vector = [*vector, [0 for char in alphabet]]

    return np.array(vector)

我提到的正确部分确实是正确的,因为这不是我第一次训练这个模型并对其进行验证。我每个月都需要更新我的模型,当我通过运行多个模型来测试我的架构时,我遇到了这个异常。


这是错误的代码


    model.fit(X_train, to_categorical(Y_train, 2), epochs=1000,

              validation_data=(X_test, to_categorical(Y_test, 2)),

              verbose=2, shuffle=True)

    loss, accuracy = model.evaluate(X_test, to_categorical(Y_test, 2))

这个错误片段的输出与正确的片段日志相同,只是在 12 个时期内准确度保持在 0.5454 并且损失没有减少。我的样本数据分为 50k 个正确标签和 60k 个错误标签。因此,如果模型仅对所有 60k 个错误标签预测 1,则准确度将为60k / (60k + 50k) => 0.54.


这是正确的代码,唯一的区别是 的值epochs。


expected_acc_eth, expected_loss_eth = 0.83, 0.40


我看过这个 stackoverflow 帖子,它指出提前停止会影响模型学习的方式,但它们与每个时代理论的步骤无关。我尝试过设置,batch_size但这没有帮助,或者我无法正确设置,因为它与 adam 的学习率成反比,而且我的比例一定是关闭的。我在某种程度上了解深度网络和机器学习,但输出之间的差异太大了。


我希望它能像我一样避免其他面临类似错误的人浪费太多时间!


有人可以详细说明这一点。任何帮助深表感谢!


慕丝7291255
浏览 231回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答