手语识别神经网络:如何获取全连接层最大概率输出及生成预测字母一维列表
嘿,作为新手能练出99%准确率的手语识别模型已经超棒啦!先帮你理清楚代码的基础逻辑,再解决你问的两个问题~
先搞懂核心代码的运作逻辑
关于输出层的model.add(Dense(units=26,activation="softmax"))
- 这里的
units=26对应26个英文字母,每个单元就像一个“概率计算器”,输出当前输入的手语数据属于对应字母的可能性。 softmax激活函数的作用是把这26个单元的输出值压缩到0-1之间,而且所有26个概率加起来刚好等于1。这样你就能直观看到每个字母的概率占比,比如某样本输出里A的概率是0.95,其他字母加起来才0.05,那基本就能确定是A了。
关于评估准确率的model.evaluate(x=test_X,y=test_Y,batch_size=32)
test_X是你准备好的测试用手语数据,test_Y是这些数据对应的真实字母标签(相当于标准答案)。batch_size=32是说模型每次一次性处理32个测试样本,这样计算效率更高。- 最后返回的
accuracy是模型预测正确的样本数占总测试样本数的比例,99%的准确率说明你的模型对手语字母的识别能力已经非常强了!
问题一:如何获取全连接层输出中概率最大的结果
你可以先用model.predict(test_X)得到所有测试样本的概率矩阵(形状是[样本数量, 26],每一行对应一个样本的26个字母概率),然后用下面两种简单方法取最大值对应的索引:
方法一(用numpy):
import numpy as np # 先得到所有样本的概率预测结果 predictions = model.predict(test_X) # 沿着每一行(每个样本的26个概率)找最大值的索引,axis=1表示行方向 max_prob_indices = np.argmax(predictions, axis=1)这里得到的索引0对应字母A,1对应B,……,25对应Z。
方法二(用TensorFlow后端):
import tensorflow as tf predictions = model.predict(test_X) max_prob_indices = tf.keras.backend.argmax(predictions, axis=1) # 如果需要转换成numpy数组方便后续处理 max_prob_indices = max_prob_indices.numpy()
问题二:生成仅包含预测字母的一维列表
拿到上面的索引后,只需要把索引映射成对应的字母就行,步骤如下:
- 先创建一个字母和索引对应的列表:
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] - 用列表推导式快速生成预测字母的一维列表:
这样predicted_letters = [letters[idx] for idx in max_prob_indices]predicted_letters就是你想要的结果啦,比如它可能是['A', 'G', 'Z', 'M', ...],每个元素对应一个测试样本的预测字母。
内容的提问来源于stack exchange,提问作者Arshad_221b
相关产品推荐
相关产品推荐

