Keras:向Dense Layer添加一批常量输入

时间:2017-09-15 13:51:44

标签: python machine-learning neural-network keras regression

我有一个有两个不同输入的神经网络。输入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用于批次中的下一个样本,依此类推。

1 个答案:

答案 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)
相关问题