我在尝试针对表示聚集索引的变量传播我的损失函数的梯度时遇到了一些问题,类似于在空间转换器网络中所做的工作(https://github.com/tensorflow/models/blob/ master/transformer/spatial_transformer.py)。我觉得我可能遗漏了一些非常简单的东西。这是我想要做的一个简化的玩具示例:
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)
Run Code Online (Sandbox Code Playgroud)
目前,这会返回错误:ValueError: No gradients provided for any variable
Tensorflow是否可以对数组进行可区分索引?更具体地说,如果我有一个以某种方式转换数组索引的float变量,是否可以获得相对于该变量的转换数组的梯度?基于空间变压器网络(https://arxiv.org/pdf/1506.02025v3.pdf和https://github.com/tensorflow/models/blob/master/transformer /spatial_transformer.py)。我已经尝试实现了这一点,但由于在使用tf.gather转换数组之前必须将转换后的索引转换为整数,因此遇到了麻烦,而且似乎无法通过渐变。有人会建议如何做吗?
tensorflow ×2