Python Keras:增加职业权重后的巨大损失

Python Keras:增加职业权重后的巨大损失,python,machine-learning,keras,deep-learning,data-science,Python,Machine Learning,Keras,Deep Learning,Data Science,我正在Keras开发一个LSTM模型,目标是利用BERT单词向量作为模型输入的一部分进行下一个单词预测 这是一个多类的分类问题,我已经做了一些奇怪的步骤,使用BERT和stop单词以及k-means将英语简化为一组单词,对于我的初始练习模型,我使用了144个目标类别。在解决了一些问题后,我计划将其增加到1000左右 以下是我的Keras模型的体系结构: model = Sequential() model.add(LSTM(32, input_shape=(SENTENCE_LENGTH, CO

我正在Keras开发一个LSTM模型,目标是利用BERT单词向量作为模型输入的一部分进行下一个单词预测

这是一个多类的分类问题,我已经做了一些奇怪的步骤,使用BERT和stop单词以及k-means将英语简化为一组单词,对于我的初始练习模型,我使用了144个目标类别。在解决了一些问题后,我计划将其增加到1000左右

以下是我的Keras模型的体系结构:

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)
我的损失大约在6点左右开始,然后下降,据我所知这并不罕见。然后我尝试加入班级权重,因为该模型过度预测了“the”等常见词汇,这是意料之中的。所以我用这个代码来制作权重:

max_count = 0
for word in range(COM_WORDS):
    if Ys.count(word) > max_count:
        max_count = Ys.count(word)

class_weights = {}
for word in range(COM_WORDS):
    class_weights[word] = (max_count - Ys.count(word) + 1)
因此,我最常见的y输入在字典中的值为1,并且只表示一次的y输入将在最常见的y输入计数时加权:在本例中约为100万。然后我将其添加到fit()中,并重新启动模型

当我使用权重运行我的模型时,我得到了非常高的损失(这只是一批运行中的100000个输入): 纪元1/3 950000/950000[================================================160s 168us/阶跃-损耗:3014409.5359-acc:0.1261-val\ U损耗:2808283.0898-val\ U acc:0.1604

但准确度很好!和我不使用砝码时没什么不同

我的问题: 这种高损失重要吗?这只是我巨大体重数字的反映,还是暗示着某种邪恶的东西?损失数字是相对的吗

附带问题:我应该使用更好的方法来衡量我的投入吗


谢谢大家!

是的,像那样调整班级权重会让你的损失值不成比例。但这是相对的。您的损失可能是
10^1000
,但仍会收敛到可用的模型。我不确定这个类权重方法是否是标准的,但它看起来很合理,应该可以工作,因为它可以调整不太频繁的单词,使其对用户更加重要model@BrianJoseph谢谢