如何修复检查目标时出现的错误:预期activation_5具有2维,但数组的形状为(24943、50、50、1)

时间:2019-04-08 18:02:09

标签: python deep-learning

我正在构建CNN,以预测kaggle(文件类型:jpg)中的猫和狗。我在带有Python 3.6的anaconda环境中使用了一个tensorflow后端。但是我得到这个错误:

  

ValueError:检查目标时出错:预期activation_8具有2个维度,但数组的形状为(24943、50、50、1)

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
import pickle
pickle_in = open("X.pickle","rb")
X = pickle.load(pickle_in)
pickle_in = open("y.pickle","rb"`
y = pickle.load(pickle_in)
X = X/255.0
model = Sequential()
model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation('sigmoid')) 
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.fit(X, y, batch_size=32, epochs=3, validation_split=0.3)

这是model.summary()表

图层(类型)输出形状参数#

conv2d_22(Conv2D)(无,48、48、256)2560


activation_30(激活)(无,48、48、256)0


max_pooling2d_22(MaxPooling(None,24,24,256)0


conv2d_23(Conv2D)(无,22、22、256)590080


activation_31(激活)(无,22、22、256)0


max_pooling2d_23(MaxPooling(None,11,11,256)0


flatten_11(Flatten)(无,30976)0


dense_19(Dense)(None,64)1982528


dense_20(密集)(无,1)65


activation_32(激活)(无,1)0

总参数:2,575,233 可训练的参数:2,575,233 不可训练的参数:0


2 个答案:

答案 0 :(得分:0)

您的代码看起来很奇怪。

尝试model.summary()并检查尺寸。

答案 1 :(得分:0)

如果要在两件事之间进行分类,则需要最后一个密集层具有2个神经元。

也许您还忘记了对目标向量(y)进行一次热编码。您可以通过以下方式做到这一点:

y = to_categorical(y)

希望有帮助!