Keras 使用输入和输出图像生成器fit_generator错误'ndim'



我决定尝试训练自动编码器重新彩色灰度图像。这种方法可能有点天真,但我想玩它,看看它有多好(或坏(,并检查了我如何改进它。

但是,它出乎意料地引发了以下错误:

  File "colorise0.py", line 63, in <module>
    validation_data=(val_g_generator, val_c_generator)
  File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 2183, in fit_generator
    val_x, val_y, val_sample_weight)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1483, in _standardize_user_data
    exception_prefix='input')
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 76, in _standardize_input_data
    data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data]
AttributeError: 'DirectoryIterator' object has no attribute 'ndim'

我的代码是:

from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.layers import Conv2DTranspose as DeConv2D
from keras.models import Model
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator
img_width, img_height = 150, 150
batch_size=32
train_data_dir = './train/'
validation_data_dir = './validation/'
input_shape = (img_width, img_height,3)
train_datagen = ImageDataGenerator(rescale = 1./255)
test_datagen =  ImageDataGenerator(rescale = 1./255)

train_c_generator=  train_datagen.flow_from_directory( 
    train_data_dir+'colored',
    target_size=(img_width, img_height),
    batch_size=batch_size
)
train_g_generator=  train_datagen.flow_from_directory(
    train_data_dir+'grey',
    target_size=(img_width, img_height),
    batch_size=batch_size
)
val_c_generator=  test_datagen.flow_from_directory(
    validation_data_dir+'colored',
    target_size=(img_width, img_height),
    batch_size=batch_size
)
val_g_generator=  test_datagen.flow_from_directory(
    validation_data_dir+'grey',
    target_size=(img_width, img_height),
    batch_size=batch_size
)
input_img=Input(shape=(img_width,img_height,3))
x=Conv2D(32,(3,3), activation='relu', padding='same')(input_img)
x=Conv2D(32,(3,3), activation='relu', padding='same')(x)
x=Conv2D(32,(3,3), activation='relu', padding='same')(x)
x=Conv2D(32,(3,3), activation='relu', padding='same')(x)
y=DeConv2D(32,(3,3), activation='relu',padding='same')(x)
y=DeConv2D(32,(3,3), activation='relu',padding='same')(y)
y=DeConv2D(32,(3,3), activation='relu',padding='same')(y)
decoded=DeConv2D(3,(3,3), padding='same')(y)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

autoencoder.fit_generator(
                train_g_generator, train_c_generator,
                epochs=50,
                validation_data=(val_g_generator, val_c_generator)
                )

鉴于错误消息,我认为错误可能源于调用两个发电机(一个提供灰色输入图像,第二个提供原始彩色图像,用作目标(。

我该如何解决?

非常感谢!

fit_generator只采用一个发电机,而不是两个。发电机输出元组(x,y(,因此输入和目标均由单个发电机处理。

对于您的特定用例,我认为您需要制作自定义生成器。

相关内容

  • 没有找到相关文章

最新更新