首页 文章

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

提问于
浏览
2

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

NN的输出层是一个Dense层,具有10个(可以变化的)输出,具有线性激活功能(回归) . 我想将输入2中的浮点数添加到10个输出中的每一个 . 如何为整个图层添加一个简单的值(批处理中的每个样本不同)(将其广播到10个输出) .

例如对于批量大小为3我有输入2:

[12.0,23.0,60.0]

现在我想将第一个样本的 12.0 添加到图层中的所有单位 . 然后 23.0 用于批次中的下一个样本,依此类推 .

1 回答

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

相关问题