Tensorflow:为什么zip()函数在涉及应用渐变的步骤中使用?

时间:2016-07-25 13:08:50

标签: python machine-learning tensorflow deep-learning

我正在完成Udacity深度学习课程的作业6。我不确定为什么在这些步骤中使用zip()函数来应用渐变。

以下是相关代码:

void Start()
{
    string objDirFileDir = "LevelsData/Bullet";
    GameObject jsonFile = Resources.Load(objDirFileDir, typeof(GameObject)) as GameObject;
    Debug.Log(jsonFile.name);
}

应用# define the loss function logits = tf.nn.xw_plus_b(tf.concat(0, outputs), w, b) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf.concat(0, train_labels))) # Optimizer. global_step = tf.Variable(0) #staircase=True means that the learning_rate updates at discrete time steps learning_rate = tf.train.exponential_decay(10.0, global_step, 5000, 0.1, staircase=True) optimizer = tf.train.GradientDescentOptimizer(learning_rate) gradients, v = zip(*optimizer.compute_gradients(loss)) gradients, _ = tf.clip_by_global_norm(gradients, 1.25) optimizer = optimizer.apply_gradients(zip(gradients, v), global_step=global_step) 功能的目的是什么?

为什么zip()gradients以这种方式存储?我以为v只返回了一个zip对象。

1 个答案:

答案 0 :(得分:6)

我不知道Tensorflow,但可能optimizer.compute_gradients(loss)会产生(渐变,值)元组。

gradients, v = zip(*optimizer.compute_gradients(loss))

执行转置,创建渐变列表和值列表。

gradients, _ = tf.clip_by_global_norm(gradients, 1.25)

然后剪辑渐变,

optimizer = optimizer.apply_gradients(zip(gradients, v), global_step=global_step)

将渐变和值列表重新压缩回一个可迭代的(渐变,值)元组,然后传递给optimizer.apply_gradients方法。