我有一个神经网络,具有两种不同的输入。输入1是图像数据,输入2是一个单一的浮点数。因此,我的输入形状为(32,img_dim)
和(32,1)
,批次大小为32。
神经网络的输出层是一个Dense层,具有10+(可变)的输出,使用线性激活函数(回归)。我想将输入2中的浮点数添加到这10+个输出中的每一个。我如何将一个简单的值(批次中每个样本不同)添加到整个层(广播到10+个输出)?
例如,对于批次大小为3,我有输入2:
[12.0,23.0,60.0]
现在我想为第一个样本将12.0
添加到层中的所有单元。然后为批次中的下一个样本添加23.0
,依此类推。
回答:
您可以使用功能API模型
from keras.models import Model
为模型创建两个输入:
inpImg = Input((rows,columns,channels))inpFloat = Input((1,))
像这样创建您的层:
outputTensor = SomeLayer(....)(inputTensor)#示例:convOut = Conv2D(20,kernel_size=3,activation='relu')(inpImg)
在您希望进行乘法的地方,我们创建一个Lambda层来进行自定义操作(假设您有来自最后一层的lastOut
)。请注意,此层接受列表中的两个输入,这就是为什么我们需要功能API模型。
multOut = Lambda(lambda x: x[0] + x[1],output_shape=(10,))([lastOut,inpFloat])
然后,创建模型:
model = Model([inpImg,inpFloat],multOut)
正常编译模型,并在拟合和预测时,传递一个numpy输入列表:
model.fit([trainImages, trainFloats],labels)