Eme*_*ieh 1 machine-learning neural-network keras tensorflow one-hot-encoding
我有一个使用 Scikit-Learn API 的 Keras 包装器构建的 Keras 分类器。该神经网络有10个输出节点,训练数据全部采用one-hot编码表示。
根据 Tensorflow文档,该predict函数输出形状为(n_samples,). 当我拟合 514541 个样本时,该函数返回一个形状为 的数组(514541, ),数组的每个条目的范围为 0 到 9。
由于我有十个不同的输出,每个条目的数值是否与我在训练矩阵中编码的结果完全对应?
即,如果我的 one-hot 编码的索引 5y_train代表“橙色”,那么预测值 5 是否意味着神经网络预测为“橙色”?
这是我的模型的示例:
model = Sequential()
model.add(Dropout(0.2, input_shape=(32,) ))
model.add(Dense(21, activation='selu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
Run Code Online (Sandbox Code Playgroud)
你的问题有一些问题。
该神经网络有10个输出节点,训练数据全部采用one-hot编码表示。
由于您的网络有 10 个输出节点,并且您的标签是单热编码的,因此您的模型的输出也应该是 10 维的,并且同样是热编码的,即形状(n_samples, 10)。此外,由于您softmax对最后一层使用激活,因此 10 维输出的每个元素都应位于 [0, 1] 中,并解释为属于相应(one-hot 编码)类的输出的概率。
根据 Tensorflow 文档,预测函数输出的形状为
(n_samples,).
令人费解的是,为什么你提到 Tensorflow,而你的模型显然是 Keras 模型;您应该参考Keras顺序APIpredict的方法。
当我拟合 514541 个样本时,该函数返回一个形状为 的数组
(514541, ),数组的每个条目的范围为 0 到 9。
如果发生类似的情况,则一定是由于代码中的后续部分未在此处显示所致;无论如何,我们的想法是从每个 10 维网络输出中找到具有最高值的参数(因为它们被解释为概率,所以直观地认为具有最高值的元素是最有可能的)。换句话说,你的代码中的某个地方一定有这样的东西:
pred = model.predict(x_test)
y = np.argmax(pred, axis=1) # numpy must have been imported as np
Run Code Online (Sandbox Code Playgroud)
正如您所报告的,这将给出一个 shape 数组(n_samples,),每个y数组都是 0 到 9 之间的整数。
即,如果 y_train 的 one-hot 编码的索引 5 表示“橙色”,那么预测值 5 是否意味着神经网络预测为“橙色”?
前提是上述条件成立,是的。
| 归档时间: |
|
| 查看次数: |
2737 次 |
| 最近记录: |