2017-11-01 13 views
2

私は非常に単純なKeras MLPを持っており、入力に関して出力の勾配を得ようとしています。私は次のコードを使用していTFバックエンドを持つKeras:入力に関して出力の勾配を得る

regressor = Sequential([ 
    Dense(32, input_shape=(n_features,), activation='relu'), 
    Dense(1) 
]) 
regressor.compile(optimizer=SGD(lr=0.1), loss='mse') 

regressor.fit(x, y) 

output_tens = regressor.layers[-1].output 
input_tens = regressor.layers[0].input 

grad = tf.gradients(output_tens, input_tens) 
with tf.Session() as sess: 
    sess.run(grad, feed_dict={input_tens: np.zeros((1, n_features))}) 

次のエラーで失敗し

FailedPreconditionError: Attempting to use uninitialized value dense_7/bias 
    [[Node: dense_7/bias/read = Identity[T=DT_FLOAT, _class=["loc:@dense_7/bias"], _device="/job:localhost/replica:0/task:0/cpu:0"](dense_7/bias)]] 

(スタックトレースは、私がいない、非常に有益と仮定し、私は」、長さで、私はここにそれを追加しません)。

私のアプローチは基本的に正しいですか?私は何か特別なことはありますか?

ありがとうございます!

答えて

1

あなたはそれを動作させるために、あなたのkerasセッションを取得する必要があります:あなたは新しいセッションをインスタンス化するとき

import keras.backend as K 

with K.get_session() as sess: 
    sess.run(grad, feed_dict={input_tens: np.zeros((1, n_features))}) 

- あなたはkerasトレーニングから変数を初期化していません。

+0

私はここで少し混乱します:ラベルが指定されていないときに勾配はどのように計算されますか?損失は​​どのように計算されますか? –

関連する問題