簡體   English   中英

Tensorflow-重量值在tf.nn.conv2D()中是否已更改?

[英]Tensorflow - Does Weight value changed in tf.nn.conv2D()?

當我研究帶有張量流的神經網絡時,我遇到了一個關於tf.nn.conv2D(x,W,strides = [1,1,1,1],padding ='SAME')的問題

當我輸入圖像值x和權重值W(由tf.truncated_normal(shape,stddev = 0.1)定義)時,我知道它會返回一些值,這是tf.nn.conv2D()的結果。

但是我的問題是,當調用tf.nn.conv2D()時,它會改變重量值嗎?

如果它改變了權重的值,它是如何工作的? 實際上,當我打印“重量”值時,它會發生變化。 但是我不知道為什么...我的假設是值W是某種按引用調用,因此在計算tf.nn.conv2D()時,值W會更改。 這樣對嗎?

Tensorflow代碼流與您的常規編程語言不同。 首先,從代碼創建一個圖形(可以使用Tensorboard可視化),然后使用內部實現的反向傳播計算更新規則。

當你寫:

h = tf.nn.conv2D(x, W, strides=[1, 1, 1, 1], padding='SAME')

它在您的神經網絡中創建一個卷積層,對您的輸入矩陣執行卷積( http://cs231n.github.io/convolutional-networks/ ),並將結果輸出到h中 現在,執行此類卷積的全部目的是識別圖像中的某些局部圖案,例如垂直或水平邊緣。 例如,權重矩陣W例如

W = [[0,1,0],[0,1,0],[0,1,0]]

將識別圖像中的垂直邊緣。 但是,由於W已在此處隨機初始化

W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)))

一開始將無法找到任何模式。 這可以通過反向傳播解決。

當您在標記的數據上訓練神經網絡時,每一步矩陣W都會更新,從而減少了誤差E wrt W的導數。 您無法在代碼中看到它的發生,因為反向傳播是在Tensorflow內部實現的,並且只需要為正向編寫代碼。 如果您將W定義為

W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)),trainable=False)

它不會被更新,但是訓練參數的整個目的將被破壞。

我建議您在繼續使用Tensorflow之前先瀏覽http://neuralnetworksanddeeplearning.com來了解神經網絡的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM