凯拉斯(Keras):增加班级重量后的巨大损失

时间:2019-11-21 15:48:08

标签: python machine-learning keras deep-learning data-science

我正在Keras上研究LSTM模型,目标是利用BERT词向量作为模型输入的一部分来进行下一词预测。

这是一个多类分类问题,我已经做了一些怪异的步骤,使用BERT和停用词和k-means将英语简化为单词簇,对于我的初始练习模型,我使用144 target类别。我计划在解决一些问题后将其提高到大约1000。

这是我的Keras模型的体系结构:

url()

我的损失开始在6点左右,然后下降,据我所知这并不罕见。然后,我尝试合并类权重,因为该模型过高地预测了“ the”之类的常用词,这是可以预期的。所以我用下面的代码来做权重:

model = Sequential()
model.add(LSTM(32, input_shape=(SENTENCE_LENGTH, COM_WORDS), dropout=0.2))
model.add(Dropout(0.2))
model.add(Dense(COM_WORDS))
model.add(Activation('softmax'))


optimizer = Adam(lr=lr)
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
model.fit(X, y, validation_split=0.05, batch_size=128, epochs=epochs)

因此,我最常用的y输入在字典中的值为1,而仅表示一次的y输入将按最常用的y输入的计数加权:在这种情况下,大约为100万。然后将其添加到我的fit()中,然后重新启动模型。

当我使用权重运行模型时,我会遭受极大的损失(这只是我运行的所有输入中的100,000的批次): 时代1/3 950000/950000 [==============================]-160s 168us / step-损耗:3014409.5359-acc:0.1261-val_loss :2808283.0898-val_acc:0.1604

虽然准确度还不错!与我不使用砝码时没什么不同。

我的问题: 这种高损失重要吗?仅仅是我巨大的体重数字的反映,还是表明有些险恶?损失数字是相对的吗?

侧面问题:我应该使用更好的方法来加权输入吗?

谢谢!

0 个答案:

没有答案