我尝试使用 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,但没有奏效。
谢谢你的帮助 !
慕森王
相关分类