Python 如何确定CNN Keras中密集层的输入尺寸?
我尝试使用keras建立一个人脸识别模型。我有一些主题名称和特征的图片(不太适合深入学习,我知道,但我很快就会得到更多) 但是,当我尝试拟合数据时,出现了以下错误: ValueError:检查目标时出错:预期稠密_2有2个维度,但得到了形状为(3,243,320,3)的数组 我尝试将损失函数从Python 如何确定CNN Keras中密集层的输入尺寸?,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我尝试使用keras建立一个人脸识别模型。我有一些主题名称和特征的图片(不太适合深入学习,我知道,但我很快就会得到更多) 但是,当我尝试拟合数据时,出现了以下错误: ValueError:检查目标时出错:预期稠密_2有2个维度,但得到了形状为(3,243,320,3)的数组 我尝试将损失函数从sparse\u categorical\u crossentropy更改为categorical\u crossentropy 使用keras的“to_categorical”功能进行热编码标签 但这行不
sparse\u categorical\u crossentropy
更改为categorical\u crossentropy
使用keras的“to_categorical”功能进行热编码标签
但这行不通
下面是我如何用图片和标签来填充我的列表
###### fill with images
for i in range(0,num_classes):
k=0
for j in range(len(features)):
k+=1
if(i < 10):
sub = "subject0"+str(i)+"."+features[j]+".png"
else:
sub = "subject"+str(i)+"."+features[j]+".png"
imgfile = Image.open(sub)
img = np.array(imgfile)
#print(img.shape)
#print(type(img))
if(k != 3):
train.append(img)
train_labels.append(i)
else :
test.append(img)
test_labels.append(i)
########## train
train = np.asarray(train)
train_labels = np.asarray(train_labels)
########## test
test = np.asarray(test)
test_labels = np.asarray(test_labels)
我建立了一个简单的CNN模型
######### build cnn models
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), padding='same', activation='relu', input_shape=(img_rows,img_cols,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
batch_size = 128
epochs = 10
model.fit(train, test, validation_data=(train_labels, test_labels), batch_size=batch_size, epochs=epochs)
我认为问题在于我的模型中的一个层的输出。我试过移动扁平机,但没用
谢谢你的帮助 这个
test=to\u category(test,num\u classes)
应该是train\u labels=…
,而您的model.fit(…)
调用应该是model.fit(train,train\u labels)
这些是我能找到的最显著的错误。这个
test=to\u category(test,num\u classes)
应该是train\u labels=…
,而你的model.fit(…)
调用应该是model.fit(train,train\u labels)
这些是我能找到的最显著的错误
######### build cnn models
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), padding='same', activation='relu', input_shape=(img_rows,img_cols,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
batch_size = 128
epochs = 10
model.fit(train, test, validation_data=(train_labels, test_labels), batch_size=batch_size, epochs=epochs)