2016-04-26 85 views
4

我正在嘗試調整tf DeepDream教程代碼以與另一個模型一起使用。現在,當我打電話tf.gradients():Tensorflow漸變

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 s。 None在數學上等同於0漸變,但在成本不依賴於與其區分的參數相關的特殊情況下返回。有各種各樣的原因,我們不只是返回0,而不是None你可以在討論中看到here

因爲None可以像上述情況是惱人的,或計算二階導數的時候,我用下面

輔助函數
def replace_none_with_zero(l): 
    return [0 if i==None else i for i in l] 
2

以下是有用的提示用於調試tf.gradients()

對於無效的一對張量:

grads = tf.gradients(<a tensor>, <another tensor that doesn't depend on the first>) 

您嘗試運行在一個會話tf.gradients甚至之前,你可以看到它使用print

print grads 

是無效的,它將返回[None]列表在一個單一None

如果試圖在反正會話中運行它:

results = sess.run(grads) 

您將不會再得到None,而不是你的問題描述的錯誤消息。

對於一個有效的對張量:

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

你會得到這樣的:

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

在有效的情況:

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

你喜歡的東西

[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

事實證明,我提供了一個適當的飼料,所以實際上沒有梯度,這就是爲什麼我沒有得到。爲了解決這個問題,我只提供了合適的提要並且工作。我有使用tensorflow變量作用域的其他類似情況。爲了解決這些其他問題,我小心使用了tf.variable_scope.reuse_variables()。希望有所幫助。 – apfalz

+0

這就是類似的情況,其中不適當的Feed會導致無!謝謝。 – rafaelvalle