Deep learning Keras ImageDataGenerator未按预期工作

Deep learning Keras ImageDataGenerator未按预期工作,deep-learning,keras,autoencoder,Deep Learning,Keras,Autoencoder,我正试图基于文档中的[本例][1]使用Keras构建一个自动编码器。因为我的数据很大,所以我希望使用生成器来避免将其加载到内存中 我的模型看起来像: model = Sequential() model.add(Convolution2D(16, 3, 3, activation='relu', border_mode='same', input_shape=(3, 256, 256))) model.add(MaxPooling2D((2, 2), border_mode='same')) m

我正试图基于文档中的
[本例][1]
使用Keras构建一个自动编码器。因为我的数据很大,所以我希望使用生成器来避免将其加载到内存中

我的模型看起来像:

model = Sequential()
model.add(Convolution2D(16, 3, 3, activation='relu', border_mode='same', input_shape=(3, 256, 256)))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(8, 3, 3, activation='relu', border_mode='same'))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(8, 3, 3, activation='relu', border_mode='same'))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(8, 3, 3, activation='relu', border_mode='same'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(8, 3, 3, activation='relu', border_mode='same'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(16, 3, 3, activation='relu'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same'))

model.compile(optimizer='adadelta', loss='binary_crossentropy')
我的发电机:

from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory('IMAGE DIRECTORY', color_mode='rgb', class_mode='binary', batch_size=32, target_size=(256, 256))
然后拟合模型:

model.fit_generator(
        train_generator,
        samples_per_epoch=1,
        nb_epoch=1,
        verbose=1,
        )
我得到了这个错误:

异常:检查模型目标时出错:预期卷积2D_76有4个维度,但得到了形状为(32,1)的数组


这看起来像是我的批量大小,而不是样本大小。我做错了什么?

错误很可能是由于
类\u mode='binary'
造成的。它使生成器生成二进制类,因此输出具有shape
(batch\u size,1)
,而模型生成四维输出(因为最后一层是卷积)

我猜你希望你的标签是图像本身。基于来自_目录的
流_的源以及它使用的
目录迭代器
,仅仅更改
类模式
是不可能的。一个可能的解决办法是:

train\u generator\uu=train\u datagen.flow\u from\u目录('IMAGE directory',color\u mode='rgb',class\u mode=None,batch\u size=32,target\u size=(256,256))
def列_发生器():
对于列迭代器中的x:
收益率x,x

请注意,我将
class\u模式设置为
None
。它使生成器只返回
图像
,而不是
元组(图像、标签)
。然后我定义了一个新的生成器,它返回图像作为输入和标签。

太棒了,非常感谢!现在一切正常。我很困惑,因为我认为它是在谈论输入形状,但在实现了您的解决方案后,我发现问题出在输出形状上。