如何给keras一个恒定的输入

时间:2017-05-12 08:30:07

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

我的网络有两个时间序列输入。其中一个输入具有针对每个时间步重复的固定向量。有没有一种优雅的方法可以将这个固定的矢量加载到模型中一次并将其用于计算?

2 个答案:

答案 0 :(得分:7)

您可以使用jdehesa描述的tensor参数创建静态输入,但张量应该是Keras(而不是tensorflow)变量。您可以按如下方式创建:

from keras.layers import Input
from keras import backend as K

constants = [1,2,3]
k_constants = K.variable(constants)
fixed_input = Input(tensor=k_constants)

答案 1 :(得分:0)

要添加的内容: 编译模型时,需要输入常量作为输入,否则图形会断开连接

#your input
inputs = Input(shape = (input_shape,))

# an array of ones
constants = [1] * input_shape

# make the array a variable
k_constants = K.variable(constants, name = "ones_variable") 

# make the variable a tensor
ones_tensor = Input(tensor=k_constants, name = "ones_tensor")

# do some layers
inputs = (Some_Layers())(inputs)

# get the complementary of the outputs
output = Subtract()([ones_tensor,inputs])

model = Model([inputs, ones_tensor],output)
model.complie(some_params)

训练时,您只需输入已有的数据,就不再需要常数层了。

我发现无论您尝试什么,使用自定义图层并充分利用numpy的功能通常会更容易:

class Complementry(Layer):

    def __init__(self, **kwargs):
        super(Complementry, self).__init__(**kwargs)

    def build(self, input_shape):
        super(Complementry, self).build(input_shape)  # Be sure to call this at the end

    def call(self, x):
        return 1-x  # here use MyArray + x