Keras不是班级的马赫模型

时间:2018-01-26 22:40:30

标签: neural-network keras keras-layer neuroscience

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

1 个答案:

答案 0 :(得分:1)

根据Keras的from_from_directory文档,指定目录('数据/列车'在您的情况下)应包含每个类的一个子目录

由于错误表示模型正在获得一个形状数组(38,1),这意味着您没有38个带有data/train的文件夹。 (注意不要混淆第一个38维是批量大小,巧合的是你将它设置为与类的数量相同,但不一定是这样)。

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