2017-09-28 10 views
0

kerasモデル内で定数変数を作成しようとしています。今まで私がやっていたことは、それを入力として渡すことでした。しかし、それはので、私は定数としてそれをしたい常に一定である(入力がそれぞれ例えば[1,2,3...50]ある=>私はそれぞれの例のためにそれを再現するnp.tile(np.array(range(50)),(len(X_input)))を使用)Kerasで定数値を作成する

だから、今の私が持っていた:。

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

:0123を

しかし、私が望むのは、テンソルの形が(?, 50)であることを意味する、各バッチで定数をスケールすることです。Inputと同じです。

これは可能ですか?

答えて

1

可変長の定数は使用できません。定数は常に同じ値を持ちます。あなたができることは、(1, 50)の定数を持っていて、TensorFlow内でそれをK.tileでタイルします。また、np.array(list(range(50))の代わりにnp.arangeを使用することをお勧めします。次のようなものがあります。

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... 
+0

回答ありがとうございます。それは望みの次元を作成するようですが、 'Model()'を呼び出すと 'Graph disconnected:テンソルの値を取得できません 'というエラーが出ます。私はそれがこれに関連しているのか、私が2つの「モデル」を作ろうとしているか分からない。 'Input'を使用する場合(質問に記載されている1番目の方法)、このエラーは発生しません。 –

+0

@MpizosDimitrisそうですね、あなたは['Lambda'](https://keras.io/layers/core/#lambda)なんかのようないくつかの層に操作を入れなければならないと思います。 – jdehesa

関連する問題