使用 Keras 的 NN 将类预测为 dtype=float32 与 1、2、3 的真实类值相反,为啥?

Posted

技术标签:

【中文标题】使用 Keras 的 NN 将类预测为 dtype=float32 与 1、2、3 的真实类值相反,为啥?【英文标题】:NN with Keras predicts classes as dtype=float32 as oppose to true class values of 1,2,3, why?使用 Keras 的 NN 将类预测为 dtype=float32 与 1、2、3 的真实类值相反,为什么? 【发布时间】:2018-06-22 00:31:18 【问题描述】:

我正在葡萄酒数据集上实现一个简单的神经网络。 NN 运行良好并产生预测分数,但是,当我尝试探索测试数据集上的实际预测值时,我收到一个 dtype=float32 值的数组,与类的值相反。

类被标记为 1、2、3 我有 13 个属性和 178 个观察值(小数据集)

下面是实现的代码和我得到的结果:

df.head() enter image description here

X=df.ix[:,1:13]

y= np.ravel(df.Type)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

scale the data:

scaler = StandardScaler().fit(X_train)

X_train = scaler.transform(X_train)

X_test = scaler.transform(X_test)

define the NN

model = Sequential()

model.add(Dense(13, activation='relu', input_shape=(12,)))

model.add(Dense(4, activation='softmax'))

fit the model

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, y_train1,epochs=20, batch_size=1, verbose=1)

现在这是我将我的预测存储到 y_pred 并获得最终分数的地方:

`y_pred = model.predict(X_test)`

`score = model.evaluate(X_test, y_test1,verbose=1)`


`59/59 [==============================] - 0s 2ms/step

[0.1106848283591917, 0.94915255247536356]`

当我探索 y_pred 时,我看到以下内容:

`y_pred[:5]`

`array([[  3.86571424e-04,   9.97601926e-01,   1.96467945e-03,
      4.67598657e-05],
   [  2.67244829e-03,   9.87006545e-01,   7.04612210e-03,
      3.27492505e-03],
   [  9.50196641e-04,   1.42343721e-04,   4.57215495e-02,
      9.53185916e-01],
   [  9.03929677e-03,   9.63497698e-01,   2.62350030e-02,
      1.22799736e-03],
   [  1.39460826e-05,   3.24015366e-03,   9.96408522e-01,
      3.37353966e-04]], dtype=float32)`

不知道为什么我看不到实际预测的类别为 1、2、3?

在尝试转换为 int 后,我​​只得到一个零数组,因为所有值都很小。

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

您会看到每个类别的概率。要将概率转换为类别,只需取每个案例的最大值。

import numpy as np
y_pred_class = np.argmax(y_pred,axis=1)

【讨论】:

Ioannis,谢谢!成功了,非常感谢 那你可以接受并支持我的回答,也谢谢你

以上是关于使用 Keras 的 NN 将类预测为 dtype=float32 与 1、2、3 的真实类值相反,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 自定义损失函数 dtype 错误

使用 Keras 向 NN 输入时间序列数据

如何添加我的 NN 可以预测的每个分类的特定数字?

keras框架 反复调用model 模型 出错

pytorch 交叉熵损失教程(3)-torch.nn.BCELoss

多元 LSTM 股票预测