2016-04-26 11 views
4

私は別のモデルで動作するようにtf DeepDreamチュートリアルのコードを適合させようとしています。私はtf.gradients()を呼び出したときに今:テンソルの勾配

t_grad = tf.gradients(t_score, t_input)[0] 
g  = sess.run(t_grad, {t_input:img0}) 

を私は型エラーを取得しています:

TypeError: Fetch argument None of None has invalid type <type 'NoneType'>,  
must be a string or Tensor. (Can not convert a NoneType into a Tensor or 
Operation.) 

はどこでも、このエラーを修正するために探し始めるべきですか?

オプティマイザを搭載したモデルでtf.gradients()を使用することはできますか?

+0

sess.runはリストを最初の引数として期待していますが、テンソルを与えましたか? – Aaron

+0

これは良い考えです。私は[t_grad]を引数として試してみました。私は同じ結果を得ました。 – apfalz

答えて

5

t_gradにはNoneがいくつかあります。 Noneは0の勾配と数学的に等価ですが、コストが差異化された引数に依存しない特殊なケースで返されます。 Noneは、上記のような場合にはいらいらすることができ、または第二の導関数を計算するとき、私は

の下ヘルパー関数を使用しているため、我々はちょうど0の代わりに、あなたは議論 here

にして見ることができますNoneを返さない様々な理由があります。

def replace_none_with_zero(l): 
    return [0 if i==None else i for i in l] 
+1

これは置換したスカラーが( 'tf.trainable_variables()')と区別される変数に依存しないので、グラデーションが0であることを意味します。 –

2

以下はテンソルの無効一対のデバッグtf.gradients()

に役立つヒントである:

grads = tf.gradients(<a tensor>, <another tensor that doesn't depend on the first>) 
あなたは、それはそれはそれで一つの None[None]リストを返します print

print grads 

を使用して無効で見ることができますセッションでtf.gradientsを実行しようとする前であっても

あなたはとにかくセッションでそれを実行しようとした場合:

results = sess.run(grads) 

あなたは質問に記載されているエラーメッセージを取得する代わりに、再びNoneを取得することはありません。テンソルの有効なペアのために

grads = tf.gradients(<a tensor>, <a related tensor>) 
print grads 

次のようなものでしょう:あなたは

ような何かを得る

results = sess.run(grads, {<appropriate feeds>}) 
print results 

:有効な状況で

Tensor("gradients_1/sub_grad/Reshape:0", dtype=float32) 

[array([[ 4.97156498e-06, 7.87349381e-06, 9.25197037e-06, ..., 8.72526925e-06, 6.78442757e-06, 3.85240173e-06], [ 7.72772819e-06, 9.26370740e-06, 1.19129227e-05, ..., 1.27088233e-05, 8.76379818e-06, 6.00637532e-06], [ 9.46506498e-06, 1.10620931e-05, 1.43903117e-05, ..., 1.40718612e-05, 1.08670165e-05, 7.12365863e-06], ..., [ 1.03536004e-05, 1.03090524e-05, 1.32107480e-05, ..., 1.40605653e-05, 1.25974075e-05, 8.90011415e-06], [ 9.69486427e-06, 8.18045282e-06, 1.12702282e-05, ..., 1.32554378e-05, 1.13317501e-05, 7.74569162e-06], [ 5.61043908e-06, 4.93397192e-06, 6.33513537e-06, ..., 6.26539259e-06, 4.52598442e-06, 4.10689108e-06]], dtype=float32)]

+0

どのように問題を解決しましたか? – rafaelvalle

+0

実際には勾配がないので、適切な飼料を提供していたので、私は何も得られませんでした。問題を解決するために、私はちょうど適切なフィードを提供し、それは働いた。テンソルフローの可変スコープを使用することから生じる他の同様の状況がありました。これらの他の問題を解決するために、私は注意深くtf.variable_scope.reuse_variables()を使用しました。希望が役立ちます。 – apfalz

+0

これは同様のケースです。不適切なフィードがNone!ありがとう。 – rafaelvalle