在Keras创造恒定价值

时间:2017-09-28 09:37:39

标签: python keras

我正在尝试在keras模型中创建一个常量变量。到目前为止我所做的是将其作为输入传递。但它始终是一个常数,所以我希望它作为常量。(每个示例的输入为[1,2,3...50] =>所以我使用np.tile(np.array(range(50)),(len(X_input)))为每个示例重现它)

所以现在我有:

constant_input = Input(shape=(50,), dtype='int32', name="constant_input")

给出张量:Tensor("constant_input", shape(?,50), dtype=int32)

现在尝试将其作为常量:

np_constant = np.array(list(range(50))).reshape(1, 50)
tf_constant = K.constant(np_constant)
tensor_constant = Input(tensor=tf_constant, shape=(50,), dtype='int32', name="constant_input")

给出张量:Tensor("constant_input", shape(50,1),dtype=float32)

但我想要的是每个批次中要缩放的常量,这意味着张量的形状应该是(?, 50),与使用Input的方式相同。

有可能吗?

1 个答案:

答案 0 :(得分:2)

你不能拥有可变大小的常量。常量始终具有相同的值。您可以做的是(1, 50)常量,然后使用K.tile在TensorFlow中将其平铺。另外,最好使用np.arange代替np.array(list(range(50))。类似的东西:

from keras.layers.core import Lambda
import keras.backend as K

def operateWithConstant(input_batch):
    tf_constant = K.constant(np.arange(50).reshape((1, 50)))
    batch_size = K.shape(input_batch)[0]
    tiled_constant = K.tile(tf_constant, (batch_size, 1))
    # Do some operation with tiled_constant and input_batch
    result = ...
    return result

input_batch = Input(...)
input_operated = Lambda(operateWithConstant)(input_batch)
# continue...