如何在 CNN Keras 中修复密集层的输入大小?

我尝试使用 keras 构建人脸识别模型。我有带有主题名称和特征的图像(深度学习用的不多,我知道,但我很快就会得到更多)


但是当我尝试拟合我的数据时,我收到了这个错误:


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


我试图将损失函数从 更改sparse_categorical_crossentropy为categorical_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)

我的班级现在是3个!(1个班是一个科目)


以下是如何重塑和规范化图像。


# Reshape  243x320 pixels, 1 channel (B/W)

train = train.reshape(train.shape[0], img_rows, img_cols, 1)

# Reshape  243x320 pixels, 1 channel (B/W)

test = test.reshape(test.shape[0], img_rows, img_cols, 1)


# Normalize pixel values: [0-255] --> [0.0-1.0]

train, test = train / 255.0, test / 255.0


# One-hot encode labels

test = to_categorical(test, num_classes)

test_labels = to_categorical(test_labels, num_classes)

我建立了一个简单的 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'])



我认为问题是我的模型中的一个层的输出。我试图移动flatten,但没有奏效。


谢谢你的帮助 !


BIG阳
浏览 131回答 1
1回答

慕森王

这test = to_categorical(test, num_classes)应该是,train_labels = ...而您的model.fit(...)电话应该是model.fit(train, train_labels)。这些是我能找到的最显着的错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python