小编Dar*_*ong的帖子

TensorFlow:在输入处获得渐变时性能降低

我正在使用TensorFlow构建一个简单的多层感知器,我还需要获得神经网络输入处的损失的梯度(或误差信号).

这是我的代码,它有效:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(self.network, self.y))
optimizer = tf.train.AdagradOptimizer(learning_rate=nn_learning_rate).minimize(cost)
...
for i in range(epochs):
    ....
    for batch in batches:
        ...
        sess.run(optimizer, feed_dict=feed_dict)
        grads_wrt_input = sess.run(tf.gradients(cost, self.x), feed_dict=feed_dict)[0]
Run Code Online (Sandbox Code Playgroud)

(编辑包括训练循环)

没有最后一行(grads_wrt_input...),这在CUDA机器上运行得非常快.但是,tf.gradients()性能会大幅降低十倍或更多.

我记得节点处的错误信号是作为反向传播算法中的中间值计算的,我已经使用Java库DeepLearning4j成功地完成了这个.我的印象是,这将是对已经构建的计算图的轻微修改optimizer.

如何更快地制作,或者是否有其他方法来计算输入损失的梯度?

tensorflow

10
推荐指数
1
解决办法
3791
查看次数

标签 统计

tensorflow ×1