【问题标题】:Average of the two inputs in multi-input deep learning model多输入深度学习模型中两个输入的平均值
【发布时间】: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 感谢您的回复。我的意思是ImageDataGeneratorfit_generator
  • @Dulmina 感谢您的回复,我在帖子中添加了一些细节。

标签: tensorflow machine-learning keras neural-network deep-learning


【解决方案1】:

引发错误是因为您的模型有两个输入,但在这一行:

yield X1i[0], X2i[0]

生成器将返回两个数组的元组。在fit_generator 中,第一个将被解释为模型输入,第二个将被解释为模型输出。因此,您会收到错误消息,说您只向模型传递了一个输​​入。为了解决这个问题,将输入放在一个列表中并返回标签,无论它们应该是什么:

yield [X1i[0], X2i[0]], the_labels_array

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2019-06-27
    • 2023-03-29
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多