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)
我有一个具有两个不同输入的神经网络。输入 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)