ValueError: Error when checking target: expected activation_6 to have shape (2,) but got array with shape (1,)
小叙:最近测试图像分类算子,发现出现了上述的错误,一开始以为数据格式出现了问题,比如图片通道不同导致的等等,到最后定位到了代码数据处理上
原因:keras激活层需要维度为2,但是只有一列内容
是因为这个算子在图像标签做独热编码处理的时候,直接调用第三方库LabelBinarizer,而二分类的标签经过fit_transform是不会独热的,但是多分类的时候就会独热成功,对二分类不是很友好
from sklearn.preprocessing import LabelBinarizer
label_arr = [0 0 0 1 1 1] lb = LabelBinarizer() trainY = lb.fit_transform(label_arr) print('trainY=',trainY)
#trainY = [[0]
[0]
[0]
[1]
[1]
[1]]
解决办法:
from keras.utils import to_categorical label_arr = [0 0 0 1 2 3] lb = LabelBinarizer() trainY = to_categorical(label_arr) print('trainY=',trainY) #trainY = [[1 0 0 0] [1 0 0 0] [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]