tens中的小批量梯度下降实现

2024-04-25 22:47:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在阅读深度学习模型的tensorflow实现时,我试图理解培训过程中包含的以下代码段。在

self.net.gradients_node = tf.gradients(loss, self.variables)
for epoch in range(epochs):
            total_loss = 0
            for step in range((epoch*training_iters), ((epoch+1)*training_iters)):
                batch_x, batch_y = data_provider(self.batch_size)

                # Run optimization op (backprop)
                _, loss, lr, gradients = sess.run((self.optimizer, self.net.cost, self.learning_rate_node, self.net.gradients_node), 
                                                  feed_dict={self.net.x: batch_x,
                                                             self.net.y: util.crop_to_shape(batch_y, pred_shape),
                                                             self.net.keep_prob: dropout})

                if avg_gradients is None:
                    avg_gradients = [np.zeros_like(gradient) for gradient in gradients]
                for i in range(len(gradients)):
                    avg_gradients[i] = (avg_gradients[i] * (1.0 - (1.0 / (step+1)))) + (gradients[i] / (step+1))

                norm_gradients = [np.linalg.norm(gradient) for gradient in avg_gradients]
                self.norm_gradients_node.assign(norm_gradients).eval()



                total_loss += loss

我认为它与小批量梯度下降有关,但我不明白它是如何工作的,或者我有一些困难要把它与如下所示的算法联系起来

enter image description here


Tags: inselfnodenormfornetstepbatch
1条回答
网友
1楼 · 发布于 2024-04-25 22:47:14

这与小批量SGD无关。在

它计算所有时间步的平均梯度。在第一个时间步之后,avg_gradients将包含刚刚计算的梯度,第二个步骤之后,它将是两个步骤中两个梯度的元素平均值,n步骤之后,它将是迄今为止计算的所有n梯度的元素平均值。然后对这些平均梯度进行归一化(使其范数为1)。很难说为什么这些平均梯度是需要的,如果没有它们出现的背景。在

相关问题 更多 >