我已经构建了一个用于推文情感检测的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)转换成我期望的输出格式呢?
回答:
使用您这里展示的6个预测示例:
import numpy as nptweets_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
中显示的值。
虽然与您的问题无关,但正如评论中提到的,在单标签多类别设置中使用one-hot编码标签时,最后一层网络的sigmoid
激活函数是不合适的,像您的情况一样 – 您应该将其更改为softmax
。