2016-07-24 86 views
2

我有一些問題試圖傳播我的損失函數的梯度相對於代表收集指數的變量,類似於在空間變換網絡(https://github.com/tensorflow/models/blob/master/transformer/spatial_transformer.py)中所做的。我覺得我可能會錯過一些非常簡單的事情。這裏是什麼,我希望做一個簡單的玩具例子:Tensorflow:如何通過tf.gather傳播漸變?

import tensorflow as tf 
import numpy as np 
lf = np.array([1.0,2.0,3.0]) 
lf_b = 2.0 
sess = tf.InteractiveSession() 
x = tf.placeholder(tf.float32, shape=(3)) 
pt = tf.Variable(0, name='point') 
y_ = tf.placeholder(tf.float32, shape=()) 
sess.run(tf.initialize_all_variables()) 
y = tf.gather(x, pt) 
data_loss = tf.reduce_mean(tf.squared_difference(y,y_)) 
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(data_loss) 

目前,這個返回錯誤: ValueError異常:目前沒有任何變量

回答

0

問題梯度是,你不能區分因爲pt是一個整數。它在x佔位符中選擇一個索引,所以它沒有衍生物。通常當你這樣做時,你會輸入一個整數並用它來選擇一個浮點值。你正在反其道而行。

+0

感謝您的回答!我的理解是,根據(https://arxiv.org/pdf/1506.02025v3.pdf)和(https://github.com/tensorflow/models/blob/master/transformer/spatial_transformer.py)中的代碼,這種抽樣應該是(次)不可分的。即使當pt是一個浮點數(後來被四捨五入並轉換爲int),我也會得到相同的錯誤。你有建議如何這應該工作? – user873261