Keras:向密集层添加一批常量输入

Keras: Adding batch of constant inputs to Dense Layer

我有一个具有两个不同输入的神经网络。输入 1 是图像数据,输入 2 是单个浮点数。所以我的输入形状为 (32,img_dim)(32,1),批量大小为 32。

NN 的输出层是一个密集层,具有 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)

#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)