我是Keras的新手,我正在尝试建立一个神经网络来识别38个案例。我创建了这样一个模型,但它不起作用。我认为最后一层有一些问题。我检查了摘要,它看起来像最后一层的输出是38应该。有人可以帮助我使它工作吗?
我的代码是:
model = Sequential()
model.add(Convolution2D(16, 5, 5, border_mode='valid', input_shape=(168, 192, 3)) )
model.add( Activation('relu') )
model.add( MaxPooling2D(2,2) )
model.add( Convolution2D(16, 5, 5) )
model.add( Activation('relu') )
model.add( MaxPooling2D(2,2) )
model.add( Flatten() )
model.add( Dense(512, activation='relu'))
model.add(Dense(38, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer=adam(0.001),metrics=['accuracy'])
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(168, 192),
batch_size=38,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(168, 192),
batch_size=38,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=10,
validation_data=validation_generator,
validation_steps=800)
,错误如下:
ValueError: Error when checking target: expected dense_129 to have shape (None, 38) but got array with shape (38, 1)
答案 0 :(得分:1)
根据Keras的from_from_directory
文档,指定目录('数据/列车'在您的情况下)应包含每个类的一个子目录。
由于错误表示模型正在获得一个形状数组(38,1),这意味着您没有38个带有data/train
的文件夹。 (注意不要混淆第一个38维是批量大小,巧合的是你将它设置为与类的数量相同,但不一定是这样)。
因此,您应该将子文件夹重新排列到每个子文件夹的一个类中,或手动加载数据,并从内存中流出。