ValueEerror:检查目标时出错:预期activation_6 的形状为(70,),但数组的形状为(71,)
Posted
技术标签:
【中文标题】ValueEerror:检查目标时出错:预期activation_6 的形状为(70,),但数组的形状为(71,)【英文标题】:ValuError: Error when checking target: expected activation_6 to have shape (70,) but got array with shape (71,) 【发布时间】:2021-08-12 01:08:55 【问题描述】:我正在使用 CNN 创建人脸识别。我正在关注一个教程。我正在使用 Tensorflow==1.15。
该程序将拍摄用户面部的 70 张快照并将其保存在“数据集”文件夹中
我不断收到错误:
ValueError: 检查目标时出错:预期 activation_6 的形状为 (70,) 但得到的数组的形状为 (71,)
输入形状 - (32,32,1)
类(n_classes) - 70
K.clear_session()
n_faces = len(set(ids))
model = model((32,32,1),n_faces) #Calling Model given in next code block
faces = np.asarray(faces)
faces = np.array([downsample_image(ab) for ab in faces])
ids = np.asarray(ids)
faces = faces[:,:,:,np.newaxis]
print("Shape of Data: " + str(faces.shape))
print("Number of unique faces : " + str(n_faces))
ids = to_categorical(ids)
faces = faces.astype('float32')
faces /= 255.
x_train, x_test, y_train, y_test = train_test_split(faces,ids, test_size = 0.2, random_state = 0)
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
checkpoint = callbacks.ModelCheckpoint('trained_model.h5', monitor='val_acc',
save_best_only=True, save_weights_only=True, verbose=1)
model.fit(x_train, y_train,
batch_size=32,
epochs=10,
validation_data=(x_test, y_test),
shuffle=True,callbacks=[checkpoint])
def model(input_shape,num_classes):
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation("relu"))
model.add(Conv2D(64, (3, 3)))
model.add(BatchNormalization())
model.add(Activation("relu"))
model.add(Conv2D(64, (1, 1)))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Activation("relu"))
model.add(Conv2D(128, (3, 3)))
model.add(Dropout(0.5))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (1, 1)))
model.add(Activation("relu"))
model.add(Flatten())
model.add(Dense(32))
model.add(Dense(num_classes))
model.add(Activation("softmax"))
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
model.summary()
return model
输出
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 30, 30, 32) 320
_________________________________________________________________
activation_1 (Activation) (None, 30, 30, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 28, 28, 64) 18496
_________________________________________________________________
batch_normalization_1 (Batch (None, 28, 28, 64) 256
_________________________________________________________________
activation_2 (Activation) (None, 28, 28, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 28, 28, 64) 4160
_________________________________________________________________
dropout_1 (Dropout) (None, 28, 28, 64) 0
_________________________________________________________________
batch_normalization_2 (Batch (None, 28, 28, 64) 256
_________________________________________________________________
activation_3 (Activation) (None, 28, 28, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 26, 26, 128) 73856
_________________________________________________________________
dropout_2 (Dropout) (None, 26, 26, 128) 0
_________________________________________________________________
activation_4 (Activation) (None, 26, 26, 128) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 128) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 13, 13, 64) 8256
_________________________________________________________________
activation_5 (Activation) (None, 13, 13, 64) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 10816) 0
_________________________________________________________________
dense_1 (Dense) (None, 32) 346144
_________________________________________________________________
dense_2 (Dense) (None, 70) 2310
_________________________________________________________________
activation_6 (Activation) (None, 70) 0
=================================================================
Total params: 454,054
Trainable params: 453,798
Non-trainable params: 256
_________________________________________________________________
Shape of Data: (70, 32, 32, 1)
Number of unique faces : 70
我正在计算 x_train, x_test, y_train, y_test 如下图所示
x_train, x_test, y_train, y_test = train_test_split(faces,ids, test_size = 0.2, random_state = 0)
输出
x_train - (56, 32, 32, 1)
y_train - (56, 71)
x_test - (14, 32, 32, 1)
y_test - (14, 71)
我对 CNN 层的尺寸做错了什么? 请帮忙
【问题讨论】:
如何加载/创建y_train
和y_test
?它们的第一个轴的大小为 71。
【参考方案1】:
ValueError: Error when checking target: expected activation_6 to have shape (70,) but got array with shape (71,)
您正在参加 71 个班级,但预计会有 70 个班级。
要么将 num_classes
更改为 71,要么看看为什么你将 71 个班级改为 x_train
、y_train
而不是 70。
哪个是正确的取决于您的具体用例,我们无法从给定的问题中知道。
【讨论】:
以上是关于ValueEerror:检查目标时出错:预期activation_6 的形状为(70,),但数组的形状为(71,)的主要内容,如果未能解决你的问题,请参考以下文章
检查目标时出错:预期 dense_3 的形状为 (3,) 但得到的数组的形状为 (1,)
ValueError:检查目标时出错:预期dense_6的形状为(46,),但数组的形状为(1,)
检查目标时出错:预期 dense_24 有 3 个维度,但得到了形状为 (3283, 1) 的数组
ValueError:检查目标时出错:预期(keras 序列模型层)具有 n 维,但得到的数组具有形状