2

我是 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)
4

1 回答 1

1

根据 Keras 的文档from_from_directory,指定的目录(在您的情况下为“data/train”)每个类应该包含一个子目录

由于错误是说模型正在获取形状数组 (38, 1),这意味着您没有 38 个文件夹data/train。(请注意不要混淆前 38 维是批量大小,巧合的是,您已将其设置为与类数相同,但并非必须如此)。

因此,您应该将子文件夹重新排列为每个子文件夹一个类,或者手动加载数据,然后从内存中流出。

于 2018-01-26T23:02:09.880 回答