如何解决LSTM问题中的损耗:nan和精度:0.0000e + 00? Tensorflow 2.x

问题描述 投票:1回答:1

我正在处理LSTM问题。我试图基于文本分类(有16种人格类型)来[[预测MBTI(Myers-Briggs测试)人格类型。

我有一个

csv文件

,该文件已进行了预处理:删除了停用词,对其进行了词形化,标记化,排序和填充。文件没有任何NaN值,并且文本序列只有int数但是,在尝试训练我得到的模型时会产生问题:

loss: nan - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00

enter image description here

training model

enter image description here


根据要求:x,y数据和标签的结果看起来如何

print(validation_label_seq) [[ 5] [10] [ 4] [ 4] [15] [12] [ 1]...] print(validation_padded[0]) maxlen = 240 array([ 23, 353, 147, 677, 1, 1, 409, 10, 845, 1530, 1, 103, 107, 998, 117, 1389, 25, 1, 28, 1889, 165, 1, 1520, 49, 718, 65, 55, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...], dtype=int32)
print(train_label_seq)
[[ 8]
 [ 9]
 [ 3]
 [ 7]
 [ 4]
 [10]
 [15]
 [11]...]

print(train_data_padded[0])
maxlen = 240
array([ 19, 301, 133, 302, 562, 133,  28, 563, 895, 896, 897, 118,  99,
       564, 397,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0...], dtype=int32)

results = model.evaluate(validation_padded, validation_label_seq)

test = validation_padded[10]
predict = model.predict_classes([test])
print(predict[1])

59/59 [==============================] - 0s 1ms/sample - loss: nan - accuracy: 0.0000e+00
[0]
/tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/sequential.py:342: RuntimeWarning: invalid value encountered in greater
  return (proba > 0.5).astype('int32')

print(predict)

array([[0],
       [0],
       ...
       [0],
       [0]], dtype=int32)

我尝试了什么?

    我已经尝试更改为其他优化程序
  • 降低批量大小
  • [检查数据框和序列中的值错误(火车和验证数据)。

  • 预期输出:

  • 也许我在建立错误的模型,所以我将解释哪个是主要思想。我想获得一个输出或十六个输出,这决定了您的性格类型的准确性。1 output: INTP: 89% 16 outputs: ENTP: 5% | INTP: 81% | INTJ: 1% | ...

    如果您想检查,这里是代码:mbti personality

    Dataframe:mbti_df

    将考虑任何改善问题的建议

    python tensorflow text-classification
    1个回答
    1
    投票
    您正在代码中使用softmax作为最终输出。这是一堆概率值,并检查您在此代码中比较的内容。标签编码的目标。它们不匹配,这就是为什么它给出0精度的原因。我建议将softmax o / p更改为正确的格式,以便通过accuracy指标进行比较可以得出正确的结果。

    示例:

    软最大输出[0.2, 0.8]其他[0 , 1]的输出>

    然后会出现不匹配,并且准确性会受到影响。

    © www.soinside.com 2019 - 2024. All rights reserved.