我有一个有两个不同输入的神经网络。输入1是图像数据,输入2是单个浮点数。因此,我的输入形状为(32,img_dim)
和(32,1)
,批量大小为32。
NN的输出层是具有10+(可以变化)输出的密集层,具有线性激活函数(回归)。我想将输入2中的浮点数添加到10+输出中的每一个。如何为整个图层添加一个简单的值(批处理中的每个样本不同)(将其广播到10+输出)。
e.g。对于批量大小为3,我有输入2:
[12.0,23.0,60.0]
现在我想将第一个样本的12.0
添加到图层中的所有单元。然后23.0
用于批次中的下一个样本,依此类推。
答案 0 :(得分:2)
您可以使用功能API模型
from keras.models import Model
为模型制作两个输入:
inpImg = Input((rows,columns,channels))
inpFloat = Input((1,))
像这样创建你的图层:
outputTensor = SomeLayer(....)(inputTensor)
#example:
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)