【发布时间】:2019-04-25 10:02:14
【问题描述】:
我想创建一个多输入深度学习模型。该模型从不同的数据集中获取两个输入(图像)并计算它们的平均值。见代码:
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
a = keras.layers.average([x1, x2])
out = keras.layers.Dense(4)(a)
model = keras.models.Model(inputs=[input1, input2], outputs=out)
我尝试了以下代码来创建生成器,但出现错误:
input_imgen = ImageDataGenerator(
rotation_range=10,
shear_range=0.2,
zoom_range=0.1,
width_shift_range=0.1,
height_shift_range=0.1
)
test_imgen = ImageDataGenerator()
def generate_generator_multiple(generator,dir1, dir2, batch_size, img_height,img_width):
genX1 = generator.flow_from_directory(dir1,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
genX2 = generator.flow_from_directory(dir2,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
while True:
X2i = genX2.next()
X1i = genX1.next()
yield X1i[0], X2i[0]
inputgenerator=generate_generator_multiple(generator=input_imgen,
dir1=train_data1,
dir2=train_data2,
batch_size=32,
img_height=224,
img_width=224)
validgenerator=generate_generator_multiple(generator=test_imgen,
dir1=valid_data1,
dir2=valid_data2,
batch_size=32,
img_height=224,
img_width=224)
testgenerator=generate_generator_multiple(generator=test_imgen,
dir1=test_data1,
dir2=test_data2,
batch_size=32,
img_height=224,
img_width=224)
# compile the model
multi_model.compile(
loss='categorical_crossentropy',
optimizer=Adam(lr=0.0001),
metrics=['accuracy']
)
# train the model and save the history
history = multi_model.fit_generator(
inputgenerator,
steps_per_epoch=len(train_data) // batch_size,
epochs=10,
verbose=1,
validation_data=validgenerator,
validation_steps=len(valid_data) // batch_size,
use_multiprocessing=True,
shuffle=False)
我收到了这个错误:
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays: [array([[[[108.930984, 108.930984, 108.930984],
[113.63957 , 113.63957 , 113.63957 ],
[113.07516 , 113.07516 , 113.07516 ],
...,
[ 99.46968 , 99.46968 , 99.46968 ...
如何解决这个问题并创建生成器?
【问题讨论】:
-
你到底在问什么?什么发电机?问题是关于平均两个输入,对吗?看起来你已经这样做了
-
方法是正确的。如果您遇到错误,请在此处提及
-
@lanQuah @lan Quah 感谢您的回复。我的意思是
ImageDataGenerator和fit_generator。 -
@Dulmina 感谢您的回复,我在帖子中添加了一些细节。
标签: tensorflow machine-learning keras neural-network deep-learning