model9 = tf.nn.relu(tf.matmul(x1,w9)+b)
model10 = tf.nn.sigmoid(tf.matmul(model9,w10)+b)
error = tf.reduce_mean(tf.square(model10-y))
train = tf.train.AdamOptimizer(learning_rate=0.001).minimize(error)
张量流真的如此聪明,它会“迭代”。通过所有层并检查激活功能并根据激活函数导数应用梯度体面?
如果我认为模型9的学习率应该是0.01,该怎么办?我如何在网络上配置呢?
答案 0 :(得分:1)
张量流是否真的如此聪明,它会“迭代”。通过所有层并检查激活功能并根据激活函数导数应用梯度体面?
是。这是使用Tensorflow的重点。
答案 1 :(得分:1)
是的,您的代码正在构建一个TensorFlow计算图,该图包含表示操作和变量的节点。由于TensorFlow知道每个操作的梯度(即操作相对于其每个输入的梯度),它可以使用反向传播算法在梯度下降期间更新变量,应用正确的导数每个激活功能一路走来。看到这种关于反向传播的优秀解释:http://cs224d.stanford.edu/lecture_notes/notes3.pdf
关于为每一层使用不同的学习率,这不是那么简单,但你可以通过将最小化调用分成两个组成部分来实现这样的目的:compute_gradients和apply_gradients然后修改渐变以有效地改变你的学习率。像这样:
model9 = tf.nn.relu(tf.matmul(x1,w9)+b)
model10 = tf.nn.sigmoid(tf.matmul(model9,w10)+b)
error = tf.reduce_mean(tf.square(model10-y))
optimiser = tf.train.AdamOptimizer(learning_rate=0.001)
gradients = optimiser.compute_gradients(error, [w9, w10]) # Compute the gradients of error with respect to w9 and w10
# gradients is a list of tuples [(gradient, variable)]
gradients[0][0] *= 10 # Multiply the gradient of w9 by 10 to increase the learning rate
train = optimiser.apply_gradients(gradients) # New train op