김태형*_*김태형 15 python machine-learning generator neural-network keras
是否有可能有两个fit_generator?
我正在创建一个带有两个输入的模型,模型配置如下所示.
标签Y对X1和X2数据使用相同的标签.
将继续发生以下错误.
检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小.预期看到2个阵列,但是得到以下1个阵列的列表:[array([[[[0.75686276,0.75686276,0.75686276],[0.75686276,0.75686276,0.75686276],[0.75686276,0.75686276,0.75686276],.... ..,[0.65882355,0.65882355,0.65882355 ...
我的代码看起来像这样:
def generator_two_img(X1, X2, Y,batch_size):
generator = ImageDataGenerator(rotation_range=15,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
genX1 = generator.flow(X1, Y, batch_size=batch_size)
genX2 = generator.flow(X2, Y, batch_size=batch_size)
while True:
X1 = genX1.__next__()
X2 = genX2.__next__()
yield [X1, X2], Y
"""
.................................
"""
hist = model.fit_generator(generator_two_img(x_train, x_train_landmark,
y_train, batch_size),
steps_per_epoch=len(x_train) // batch_size, epochs=nb_epoch,
callbacks = callbacks,
validation_data=(x_validation, y_validation),
validation_steps=x_validation.shape[0] // batch_size,
`enter code here`verbose=1)
Run Code Online (Sandbox Code Playgroud)
Ioa*_*ios 16
试试这个发电机:
def generator_two_img(X1, X2, y, batch_size):
genX1 = gen.flow(X1, y, batch_size=batch_size, seed=1)
genX2 = gen.flow(X2, y, batch_size=batch_size, seed=1)
while True:
X1i = genX1.next()
X2i = genX2.next()
yield [X1i[0], X2i[0]], X1i[1]
Run Code Online (Sandbox Code Playgroud)
在Thanh Nguyen评论之后编辑
3输入发电机:
def generator_three_img(X1, X2, X3, y, batch_size):
genX1 = gen.flow(X1, y, batch_size=batch_size, seed=1)
genX2 = gen.flow(X2, y, batch_size=batch_size, seed=1)
genX3 = gen.flow(X3, y, batch_size=batch_size, seed=1)
while True:
X1i = genX1.next()
X2i = genX2.next()
X3i = genX3.next()
yield [X1i[0], X2i[0], X3i[0]], X1i[1]
Run Code Online (Sandbox Code Playgroud)
JVG*_*VGD 10
我有一个针对多个输入的实现TimeseriesGenerator,我已经对其进行了调整(不幸的是,我无法对其进行测试)以使用ImageDataGenerator. 我的方法是为多个生成器构建一个包装类keras.utils.Sequence,然后实现它的基本方法:__len__和__getitem__:
from keras.preprocessing.image import ImageDataGenerator
from keras.utils import Sequence
class MultipleInputGenerator(Sequence):
"""Wrapper of 2 ImageDataGenerator"""
def __init__(self, X1, X2, Y, batch_size):
# Keras generator
self.generator = ImageDataGenerator(rotation_range=15,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
# Real time multiple input data augmentation
self.genX1 = self.generator.flow(X1, Y, batch_size=batch_size)
self.genX2 = self.generator.flow(X2, Y, batch_size=batch_size)
def __len__(self):
"""It is mandatory to implement it on Keras Sequence"""
return self.genX1.__len__()
def __getitem__(self, index):
"""Getting items from the 2 generators and packing them"""
X1_batch, Y_batch = self.genX1.__getitem__(index)
X2_batch, Y_batch = self.genX2.__getitem__(index)
X_batch = [X1_batch, X2_batch]
return X_batch, Y_batch
Run Code Online (Sandbox Code Playgroud)
model.fit_generator()一旦生成器被实例化,你就可以使用这个生成器。