TensorFlow2.3下带分类头的Stacked Autoencoder分类预测问题咨询
问题解决:TensorFlow 2.3下带分类层的堆叠自编码器预测实现
问题原因
- 你的模型最后一层为11神经元的
softmax激活层,调用predict()方法返回的是形状为(样本数, 11)的二维数组,每一行对应单个样本所属11个类别的概率分布 - TensorFlow 2.x相比1.x版本调整了
predict()接口的返回值类型,默认返回EagerTensor类型,不能直接调用ravel()方法,且原代码中直接摊平数组的逻辑本身不符合多分类场景取预测类别的需求,此前在TensorFlow 1.6可正常运行属于适配特殊场景的特例
解决方法
场景1:获取预测类别编号(最常用,用于分类效果验证)
取每个样本概率最高的类别索引作为预测结果,代码如下:
import numpy as np # 获取所有样本的类别概率矩阵 y_pred_proba = autoencoder.predict(X_test) # 沿类别维度取概率最大值对应的索引,即预测类别,输出形状为(样本数,) y_pred = np.argmax(y_pred_proba, axis=1)
场景2:需要和TensorFlow 1.6版本一致获取摊平的概率数组
先将返回的EagerTensor转为numpy数组后再摊平:
y_pred = autoencoder.predict(X_test).numpy().ravel()
注意事项
- 调用
predict()前请确保模型已完成编译、训练,或已加载训练好的权重,否则输出结果为随机初始化值无实际意义 - 若测试集标签为独热编码格式,计算准确率时可直接将
y_pred与np.argmax(y_test, axis=1)的结果比对
内容的提问来源于stack exchange,提问作者Souradip Roy
相关产品推荐
相关产品推荐

