使用 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 的真实类值相反,为啥?的主要内容,如果未能解决你的问题,请参考以下文章