Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras中一个模型的两个输入_Python_Image_Vector_Keras - Fatal编程技术网

Python Keras中一个模型的两个输入

Python Keras中一个模型的两个输入,python,image,vector,keras,Python,Image,Vector,Keras,在Keras中,是否可以同时向一个模型输入图像和值向量?如果是,如何进行 我想要的是创建一个CNN,在输入上有一个图像和一个6个值的向量 输出是3个值的向量 是的,关于如何使用多个输入构建模型的许多示例,请参见Keras 您的代码看起来像这样,您可能希望将图像通过卷积层,展平输出并将其与矢量输入连接起来: from keras.layers import Input, Concatenate, Conv2D, Flatten, Dense from keras.models import Mod

在Keras中,是否可以同时向一个模型输入图像和值向量?如果是,如何进行

我想要的是创建一个CNN,在输入上有一个图像和一个6个值的向量


输出是3个值的向量

是的,关于如何使用多个输入构建模型的许多示例,请参见Keras

您的代码看起来像这样,您可能希望将图像通过卷积层,展平输出并将其与矢量输入连接起来:

from keras.layers import Input, Concatenate, Conv2D, Flatten, Dense
from keras.models import Model

# Define two input layers
image_input = Input((32, 32, 3))
vector_input = Input((6,))

# Convolution + Flatten for the image
conv_layer = Conv2D(32, (3,3))(image_input)
flat_layer = Flatten()(conv_layer)

# Concatenate the convolutional features and the vector input
concat_layer= Concatenate()([vector_input, flat_layer])
output = Dense(3)(concat_layer)

# define a model with a list of two inputs
model = Model(inputs=[image_input, vector_input], outputs=output)
这将为您提供具有以下规格的模型:

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_8 (InputLayer)            (None, 32, 32, 3)    0                                            
__________________________________________________________________________________________________
conv2d_4 (Conv2D)               (None, 30, 30, 32)   896         input_8[0][0]                    
__________________________________________________________________________________________________
input_9 (InputLayer)            (None, 6)            0                                            
__________________________________________________________________________________________________
flatten_3 (Flatten)             (None, 28800)        0           conv2d_4[0][0]                   
__________________________________________________________________________________________________
concatenate_3 (Concatenate)     (None, 28806)        0           input_9[0][0]                    
                                                                 flatten_3[0][0]                  
__________________________________________________________________________________________________
dense_3 (Dense)                 (None, 3)            86421       concatenate_3[0][0]              
==================================================================================================
Total params: 87,317
Trainable params: 87,317
Non-trainable params: 0
另一种可视化方法是:


是的,你必须使用暹罗网络。这不太正确,@MatiasValdenegro。通常,暹罗网络是两个权重共享分支(相同的层序列),处理相同模态的数据对(例如,两个图像或两个阵列)。答案更符合sdcbr发布的内容。@rafaspadilha你可以拥有一个不共享权重的暹罗网络。我认为当他们不共享权重时,他们不会被称为暹罗人。但是撇开术语不谈,你是对的。当使用model.fit()等函数时,x的格式是什么?对于model.fit(),这将是本例中的numpy数组列表。如果你的模型在训练期间有2个输入,但在推理期间只有1个输入,那么你是否必须用零数组填充第二个输入?或者有没有一种方法可以不向第二个输入传递任何内容,同时忽略第二个输出,以避免tensorflow必须执行第二个分支?可以只导出模型图的一部分进行推断。在上面的示例中,可以导出
input_8->convd2d_4->flatten_3
,为其提供单个输入,并因此获得卷积层的输出。如果不包括
input\u9
,就不可能更进一步,包括
concatenate\u3
。此外,仅馈电零不会作为“空白”输入传递,因为偏移权重将在整个网络层中添加到这些零。