当前位置: 首页 > 面试题库 >

如何在Tensorflow中设置分层学习率?

梁俊智
2023-03-14
问题内容

我想知道是否有一种方法可以对Caffe中的不同层使用不同的学习率。我正在尝试修改预训练的模型,并将其用于其他任务。我想要的是加快对新添加的层的培训,并使受过培训的层保持较低的学习率,以防止它们变形。例如,我有一个5转换层的预训练模型。现在,我添加一个新的转换层并对其进行微调。前5层的学习率为0.00001,后5层的学习率为0.001。任何想法如何实现这一目标?


问题答案:

使用2个优化器可以很容易地实现它:

var_list1 = [variables from first 5 layers]
var_list2 = [the rest of variables]
train_op1 = GradientDescentOptimizer(0.00001).minimize(loss, var_list=var_list1)
train_op2 = GradientDescentOptimizer(0.0001).minimize(loss, var_list=var_list2)
train_op = tf.group(train_op1, train_op2)

此实现的一个缺点是,它在优化器内部两次计算tf.gradients(。),因此就执行速度而言可能不是最佳的。可以通过显式调用tf.gradients(。),将列表分成2个并将相应的梯度传递给两个优化器来缓解这种情况。

编辑:添加了更有效但更长的实现:

var_list1 = [variables from first 5 layers]
var_list2 = [the rest of variables]
opt1 = tf.train.GradientDescentOptimizer(0.00001)
opt2 = tf.train.GradientDescentOptimizer(0.0001)
grads = tf.gradients(loss, var_list1 + var_list2)
grads1 = grads[:len(var_list1)]
grads2 = grads[len(var_list1):]
tran_op1 = opt1.apply_gradients(zip(grads1, var_list1))
train_op2 = opt2.apply_gradients(zip(grads2, var_list2))
train_op = tf.group(train_op1, train_op2)

您可以tf.trainable_variables()用来获取所有训练变量并决定从中选择。不同之处在于,在第一个实现tf.gradients(.)中,优化器内部被两次调用。这可能会导致执行一些冗余操作(例如,第一层上的渐变可以将某些计算重新用于后续层的渐变)。



 类似资料:
  • 多层感知器定义了人工神经网络最复杂的架构,它基本上由多层感知器构成。多层感知器学习的图示如下所示 - MLP网络通常用于监督学习格式。MLP网络的典型学习算法也称为反向传播算法。现在,我们将专注于使用MLP实现图像分类问题。 上面的代码行生成以下输出 -

  • 我在tensorflow上使用Keras API用python制作了一个CNN,我想用JavaScript实现这个CNN。但是在tf for js API0.15.3中,我找不到为卷积层添加步幅和填充的选项。 我的Python代码如下所示。 如果useBias为True,则创建一个偏置向量并将其添加到输出中。 如果激活不是null,它也会应用于输出。 当使用该层作为模型中的第一层时,提供关键字参数

  • 问题内容: 我正在使用TensorFlow训练神经网络。这就是我初始化的方式: 这里的问题是,我不知道如何为学习速率设置更新规则或为它设置衰减值。 在这里如何使用自适应学习率? 问题答案: 首先,旨在对所有步骤中的所有变量使用恒定的学习率。TensorFlow还提供了开箱即用的自适应优化器,包括和,这些可以用作即插即用的替代品。 但是,如果您希望通过原始的梯度下降来控制学习速率,则可以利用以下事实

  • TensorFlow安装 初识Tensorboard SKflow 觉得我的文章对您有帮助的话,就给个star吧~ 土豪可以打赏支持,一分也是爱

  • TensorFlow 是一种表示计算的方式,直到请求时才实际执行。 从这个意义上讲,它是一种延迟计算形式,它能够极大改善代码的运行。 翻译自:https://learningtensorflow.com/

  • 深度学习的总体来讲分三层,输入层,隐藏层和输出层。如下图: 但是中间的隐藏层可以是多层,所以叫深度神经网络,中间的隐藏层可以有多种形式,就构成了各种不同的神经网络模型。这部分主要介绍各种常见的神经网络层。在熟悉这些常见的层后,一个神经网络其实就是各种不同层的组合。后边介绍主要基于keras的文档进行组织介绍。