2016-08-17 4 views
0

学習可能で学習できない2種類の重みを持つカスタムKerasレイヤーを作成しました。 In build(self, input_shape)ValueError:値がサポートされていません

次のように、2つの重み行列WtとWuを追加します。 call(self, x, mask=None)

self.trainable_weights = [self.Wt] 
self.non_trainable_weights = [self.Wu] 
self.non_trainable_weights[0].eval(K.get_session()) # why? 

私が行います

gwt = K.gather(self.Wt, x) 
gwu = K.gather(self.Wu, x) 
return gwu + gwt 

私のバックエンドはTensorFlowです。

コードは、訓練できない体重に対してevalを呼び出した場合にのみ機能します。私がそれを残しておけば、私はValueError: None values not supported.を得ることができます。訓練可能な体重については、evalに電話する必要はありません。

evalの効果が何であれ、それを達成するためのより良い方法はありますか?

答えて

1

xの指数で重みの値を取得しようとしていますか?

Tensorflowは変数を記号的に格納します。彼らはセッションのグラフ上で評価されるときにランタイムまで実際には値をとらない。したがって、重みを取得するには、まず値をロードするために重みを評価する必要があります。

+0

ありがとうございました。 'eval'を呼び出す代わりに、値をロードする方がいいですか?たとえば、訓練可能な体重の行列は呼び出しなしで使用できますが、訓練不可能な体重の行列はありません(マイナーな編集を参照してください)。 – Alex

+0

わかりません。それはWtとWuが初期化される方法と関係があります。これはコードのどこかにあります。 –

関連する問題