![](/img/trans.png)
[英]Keras LSTM with Variable Sentences Length — the list of Numpy arrays passing to model not size model expected
[英]keras list of Numpy arrays not the size model expected
我无法找到将多个输入传递给模型的正确方法。 该模型有2个输入
(256, 256, 3)
(256, 256, 3)
和1输出
(256, 256, 3)
我通过ImageDataGenerator
生成图像:
x_data_gen = ImageDataGenerator(
horizontal_flip=True,
validation_split=0.2)
我通过python生成器生成示例:
def image_sampler(datagen, batch_size, subset="training"):
for imgs in datagen.flow_from_directory('data/r_cropped', batch_size=batch_size, class_mode=None, seed=1, subset=subset):
g_y = []
noises = []
bw_images = []
for i in imgs:
# append to expected output the original image
g_y.append(i/255.0)
noises.append(generate_noise(1, 256, 3)[0])
bw_images.append(iu_rgb2gray(i))
yield(np.array([noises, bw_images]), np.array(g_y))
在尝试训练模型时:
generator.fit_generator(
image_sampler(x_data_gen, 32),
validation_data=image_sampler(x_data_gen,32,"validation"),
epochs=EPOCHS,
steps_per_epoch= 540,
validation_steps=160 )
我收到一条错误说明:
检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小。 预计会看到2个数组,但是得到以下1个数组的列表
虽然消息很清楚,但我不明白如何解决生成过程来解决它。
我试过了:
yield([noises, bw_images], np.array(g_y))
但这不起作用,因为它会达到一个不同的错误:
AttributeError:'list'对象没有属性'shape'
我错过了什么?
当您有多个输入/输出时,您应该将它们作为numpy数组列表传递。 所以你的第二种方法是正确的,但你忘了在第二种方法中将列表转换为numpy数组:
yield ([np.array(noises), np.array(bw_images)], np.array(g_y))
确保一切正确的更详细的方法是为输入和输出层选择名称。 例:
input_1 = layers.Input(# other args, name='input_1')
input_2 = layers.Input(# other args, name='input_2')
然后,在生成器函数中使用这样的名称:
yield ({'input_1': np.array(noises), 'input_2': np.array(bw_images)}, {'output': np.array(g_y)})
通过这样做,您确保正确完成映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.