Python 如何确定CNN Keras中密集层的输入尺寸?

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”功能进行热编码标签 但这行不

我尝试使用keras建立一个人脸识别模型。我有一些主题名称和特征的图片(不太适合深入学习,我知道,但我很快就会得到更多)

但是,当我尝试拟合数据时,出现了以下错误:

ValueError:检查目标时出错:预期稠密_2有2个维度,但得到了形状为(3,243,320,3)的数组

我尝试将损失函数从
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)