我们正在尝试使用 keras 进行图像识别,但出现以下错误:ValueError: 检查输入时出错:预期 conv2d_93_input 有 4 个维度,但得到了形状为 (4999, 40) 的数组
因此,我们使用 imread
读取图像数据,然后将其放入数组中,但出于某种原因,keras 需要第四维。
这就是我们读取文件的方式:
def generator(BatchSize):
text_file = open("/content/list_attr_celeba.txt", "r")
lines = text_file.readlines()
lines = lines[2:]
prew = 1
e = []
while True:
for i in range(prew,prew+BatchSize):
#print(i)
lines[i] = lines[i].split()
name = lines[i][0]
lines[i] = lines[i][1:]
a = imread('/content/img_align_celeba/' + name)
#b = numpy.zeros(4,1)
#print(a)
e.append(numpy.array(a))
if i % BatchSize == 0 and i != 0:
yield (numpy.array(lines[prew:i]),e)
e = []
prew = i+1
这就是我们定义生成器和模型的方式
gen = generator(5000)
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), strides=(1, 1),
activation='relu',
input_shape=((170,140,3))))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dense(40, activation='sigmoid'))
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics =
['accuracy'])
这就是我们的风格
model.fit_generator(gen, epochs=2, verbose=1, max_queue_size=10,
workers=1, use_multiprocessing=False, shuffle=False, initial_epoch=0,
steps_per_epoch = 4)
最佳答案
将数据 reshape 为 (4999, 40,1)
,例如添加大小为 1 的维度,conv2d
需要 (batch_size, x, y, 过滤器)
。
a = numpy.array(a)
e.append(a.reshape((a.shape + (1,)))
关于python - 人脸识别keras维数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905433/