2016-07-24 4 views
2

공간 손실 변환기 네트워크 (https://github.com/tensorflow/models/blob/master/transformer/spatial_transformer.py)에서 수행되는 것과 유사한 수집 인덱스를 나타내는 변수와 관련하여 손실 함수의 그래디언트를 전파하려는 일부 문제가 있습니다. 나는 아주 간단한 것을 놓치고있는 것처럼 느낍니다. 에 ValueError :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) 

는이 오류를 반환 : 어떤 변수

답변

0

문제에 대해 제공 그라디언트는 구별 할 수 없다는 것입니다 여기에 내가하고 싶은 것이 무엇의 단순화 된 장난감 예입니다 pt는 정수이기 때문에. x 자리 표시 자에서 하나의 인덱스를 선택하므로 미분이 없습니다. 일반적으로 이것을 할 때 정수를 입력하고 이것을 사용하여 부동 소수점 값을 선택합니다. 당신은 다른 방향으로하고 있습니다.

+0

답변 해 주셔서 감사합니다. 나의 이해는 (https://arxiv.org/pdf/1506.02025v3.pdf)와 (https://github.com/tensorflow/models/blob/master/transformer/spatial_transformer.py)의 코드에 따르면, 이런 종류의 표본 추출은 (하위) - 구분할 수 있어야한다. pt가 float (나중에 반올림되고 int로 캐스트) 일 때도 동일한 오류가 발생합니다. 이것이 어떻게 작동해야하는지에 대한 제안이 있습니까? – user873261

관련 문제