python - Keras 输出概率而不是类
问题描述
我正在尝试在 Keras 中实现一个用于多类分类的简单神经网络。代码是:
model = Sequential()
model.add(Dense(512, input_dim = 55 , kernel_regularizer=l2(0.00001),
activation = 'relu'))
model.add(Dense(8, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = ['accuracy'] )
model.fit(X_train, dummy_y, epochs = 20, batch_size = 30, class_weight=class_weights)
我有 55 个特征,我想预测 8 个类(0、1、2、3、4、5、6、7)中的一个。我也这样编码y_train
:
encoder = LabelEncoder()
encoder.fit(y_train)
encoded_Y = encoder.transform(y_train)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)
但是,当我使用predict()
输出是每个类的概率的数组:
array([[3.3881092e-01, 2.6201099e-06, 1.9504215e-03, ..., 7.0641324e-02,
4.4026113e-01, 1.2641836e-02],
[2.3457911e-02, 5.5409328e-04, 2.8759112e-05, ..., 2.1585675e-03,
5.5625242e-01, 1.0208529e-01],
[4.6981460e-01, 2.0882198e-05, 1.4895502e-01, ..., 1.3179567e-01,
2.2908358e-01, 1.4160757e-03],
...
我应该如何修改网络以输出概率最高的类?像这样:
[[0,5,7,3,2,0,0,.....]]
解决方案
您可以简单地使用以下predict_classes
方法:
preds_classes = model.predict_classes(X_test)
您看到作为predict
方法输出的那些数字是每个类别的概率或置信度得分。因此,作为替代解决方案,您可以采用对应于预测类别的最大分数的索引:
import numpy as np
probs = model.predict(X_test)
classes = np.argmax(probs, axis=-1)
推荐阅读
- powershell - 从 PowerShell 运行 EXE 的问题
- outlook - 如何获取当前 Outlook 商店的 smtp 地址
- python - Python 3.x 使用 2D 切片创建 3D 体积
- image - Docker:运行容器时在 Docker 映像中找不到文件 (bootstrap.sh)。虽然文件存在于图像中
- flutter - 修复颤振中数据表中的顶行
- powerbi - Power BI DirectQuery:连接多个 Oracle 数据源的优缺点?
- c++ - 为什么 March=native 会破坏我的程序?
- audio - 管道转换 mp3 -> 使用 gstreamer 接收
- swift5 - 如何更正 Swift 5 中代码的执行顺序?
- c# - 使用 Automapper 检查条件