使用CNN进行推文情感预测

时间:2020-05-30 17:57:00

标签: python machine-learning keras conv-neural-network

我已经建立了一个CNN模型用于推特情绪检测,最后一步如下:

tweets_emotion = model.predict(val_tweets, verbose= 0)

这给了我这样的预测输出

array([[3.1052819e-01, 2.7634043e-01, 1.6270137e-03, 7.7674150e-01],
       [5.0230421e-02, 7.7430069e-01, 7.7313791e-09, 2.0278792e-01],
       [9.9952579e-01, 1.3450404e-03, 5.8804121e-20, 3.2991991e-07],
       ...,
       [3.9727339e-01, 2.8888196e-01, 1.9649005e-02, 2.1239746e-01],
       [1.2528910e-01, 3.2127723e-01, 3.2503495e-03, 5.5401272e-01],
       [5.8543805e-02, 4.5720499e-05, 2.9060062e-12, 9.3766922e-01]],
      dtype=float32)

我的实际输出应如下所示:

array([[1., 0., 0., 0.],
       [1., 0., 0., 0.],
       [1., 0., 0., 0.],
       ...,
       [0., 0., 0., 1.],
       [0., 0., 0., 1.],
       [0., 0., 0., 1.]], dtype=float32)

有没有一种方法可以将我的预测输出(tweets_emotion)转换为看起来像我期望的输出?

1 个答案:

答案 0 :(得分:0)

使用您在此处显示的6个预测示例:

import numpy as np

tweets_emotion = np.array([[3.1052819e-01, 2.7634043e-01, 1.6270137e-03, 7.7674150e-01],
                           [5.0230421e-02, 7.7430069e-01, 7.7313791e-09, 2.0278792e-01],
                           [9.9952579e-01, 1.3450404e-03, 5.8804121e-20, 3.2991991e-07],
                           [3.9727339e-01, 2.8888196e-01, 1.9649005e-02, 2.1239746e-01],
                           [1.2528910e-01, 3.2127723e-01, 3.2503495e-03, 5.5401272e-01],
                           [5.8543805e-02, 4.5720499e-05, 2.9060062e-12, 9.3766922e-01]])

tweets_emotion_class = np.argmax(tweets_emotion, axis=1)
tweets_emotion_class
# array([3, 1, 0, 0, 3, 3])

您应该能够通过简单的目视检查来验证每个数组元素的最大值确实是tweets_emotion_class中所示的值。

对您的问题不重要,但是,如注释中所述,对最后一个网络层的sigmoid激活在具有单编码标签的单标签多类设置中没有意义,因为您的设置似乎是-您应将其更改为softmax