【发布时间】:2016-11-24 09:25:57
【问题描述】:
我有一个具有三个隐藏层的神经网络,可以使用“纯”梯度下降或一些更复杂的技术对其进行训练。我还注意到,在我的问题中,基于动量的优化方法(adam、adadelta、动量)效果更好。
现在到有趣的部分。按照设计,我想在 NN 的第一层禁用动量。这意味着,我想在第二层和第三层使用 Adam 更新权重,但在第一层使用简单的梯度下降。
当然,我总是可以编写自己的优化器:用tf.gradients(loss, tf.trainable_variables()) 计算梯度,然后自己做动量技巧。但是如果可以选择在每一层中使用特殊的优化器参数,那就太好了。有人听说过这样做的方法吗?
【问题讨论】:
-
如何定义网络中的层?
-
没什么特别的,我认为
W_1 = tf.Variable( tf.truncated_normal([HIDDEN_0_SIZE, HIDDEN_1_SIZE], stddev=1/np.sqrt(HIDDEN_0_SIZE)), name='W') b_1 = tf.Variable(tf.zeros([HIDDEN_1_SIZE]), name='b') hidden_1 = tf.matmul(activation_0_drop, W_1) + b_1 activation_1 = tf.nn.relu(hidden_1, name='activation') activation_1_drop = tf.nn.dropout(activation_1, keep_prob)不知道为什么,markdown 会删除所有新行:( -
它只是不适用于 cmets,如果您编辑帖子,新行将在那里:)
标签: machine-learning tensorflow gradient-descent