2016-12-28 9 views
2

Как я могли получить градиент потери на входные данных, а не переменный вес и смещениеtensorflow LSTM, как я мог бы получить градиент потери на входных данных, а не переменный вес и смещение

lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=0.0) 
outputs, states = rnn.rnn(lstm_cell, x, dtype=tf.float32) 
pred = tf.matmul(outputs[-1], weights['out'] + biases['outs']) 

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) 
self.optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001) 
compute_gradients = optimizer.compute_gradients(cost) 
train = optimizer.apply_gradients(compute_gradients) 

with tf.Session() as sess: 
    sess.run(init) 
    fd = {x:batch_x, y:batch_y} 
    sess.run(train, feed_dict=fd) 

    grad_vals = sess.run([(g,v) for (g,v) in compute_gradients], feed_dict=fd) 

Я мог рассчитать градиент по весу и смещению, так как я могу получить градиент в batch_x напрямую?

input_grad = sess.run(tf.gradients(cost, batch_x), feed_dict=fd) 

Значение input_grad равно [None].

+0

Как насчет этого? input_grad = sess.run (tf.gradients (cost, x), feed_dict = fd) –

+0

он работает, спасибо! Я снова прочитал документ, В tf.gradients (dy, dx), dy и dx должны быть тензорами, и они должны иметь соединение в графе. Еще раз спасибо! – guohui

ответ

1

Вопрос разрешен в комментарии. batch_x следует заменить на x в строке ниже:

input_grad = sess.run(tf.gradients(cost, x), feed_dict=fd) 

 Смежные вопросы

  • Нет связанных вопросов^_^