gpt4 book ai didi

tensorflow - 在序列模型中使用填充时,Keras 验证准确性是否有效/可靠?

转载 作者:行者123 更新时间:2023-12-05 03:51:19 28 4
gpt4 key购买 nike

我有一组不同长度的非零序列,我正在使用 Keras LSTM 对这些序列建模。我使用 Keras Tokenizer 进行分词(分词从 1 开始)。为了使序列具有相同的长度,我使用了填充

填充示例:

# [0,0,0,0,0,10,3]
# [0,0,0,0,10,3,4]
# [0,0,0,10,3,4,5]
# [10,3,4,5,6,9,8]

为了评估模型是否能够泛化,我使用了比例为 70/30 的验证集。在每个纪元结束时,Keras 显示训练和验证的准确性。

我最大的疑问是使用填充时,Keras 验证准确性是否可靠。因为验证集可以只是 0 的序列 --> [0,0,0]。由于有很多 0 的序列(因为填充),模型可以轻松地学习和正确预测 0 的序列,从而创建虚假的高验证精度。换句话说,该模型可能学习零序列而不学习真实序列。

那么,padding 会影响 Keras 中的验证准确性吗?

最佳答案

我知道这个答案为时已晚,但我认为它对其他读者有用。

简短的回答是是的!填充会影响准确性。

为了处理填充的不良影响,您可以定义新的指​​标。这个新指标必须忽略与填充相关的类。

In this article提出了一个用于词性标注的 BiLSTM 模型作为序列标注任务。忽略类(填充类)的特殊精度度量被呈现给:

from keras import backend as K

def ignore_class_accuracy(to_ignore=0):
def ignore_accuracy(y_true, y_pred):
y_true_class = K.argmax(y_true, axis=-1)
y_pred_class = K.argmax(y_pred, axis=-1)

ignore_mask = K.cast(K.not_equal(y_pred_class, to_ignore), 'int32')
matches = K.cast(K.equal(y_true_class, y_pred_class), 'int32') * ignore_mask
accuracy = K.sum(matches) / K.maximum(K.sum(ignore_mask), 1)
return accuracy
return ignore_accuracy

请注意,在本例中使用的是 one-hot 标签。最后,您可以像这样传递新的准确性:

model.compile(loss='categorical_crossentropy',
optimizer=Adam(0.001),
metrics=['accuracy', ignore_class_accuracy(0)])

在训练模型中,将报告这样的输出(正常精度为 91%,新特殊精度为 81%):

Epoch 1/10 1679/2054 [=======================>......] - ETA: 2:33 -
loss: 0.2901 - accuracy: 0.9147 - ignore_accuracy: 0.8118

关于tensorflow - 在序列模型中使用填充时,Keras 验证准确性是否有效/可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62963127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com