如何在TensorFlow中微调特定层中的权重?

如何在TensorFlow中微调特定层中的权重?,tensorflow,Tensorflow,我正在尝试实现,在本文中,作者应用迁移学习来利用先前学习的知识来训练当前的强化学习代理。2个问题: 如何锁定某些层,使这些层的权重和偏差无法更新 我如何在训练期间只训练特定的层 这是我的密码: def\u创建网络(自): 使用tf.variable_scope('inputs'): self.inputs=tf.placeholder(shape=[-1,80,80,4],dtype=tf.float32,name='input\u data') 使用tf.variable_作用域(“网络”):

我正在尝试实现,在本文中,作者应用迁移学习来利用先前学习的知识来训练当前的强化学习代理。2个问题:

  • 如何锁定某些层,使这些层的权重和偏差无法更新
  • 我如何在训练期间只训练特定的层
  • 这是我的密码:

    def\u创建网络(自):
    使用tf.variable_scope('inputs'):
    self.inputs=tf.placeholder(shape=[-1,80,80,4],dtype=tf.float32,name='input\u data')
    使用tf.variable_作用域(“网络”):
    使用tf.variable_scope('conv_1'):
    self.conv_1=slim.conv2d(激活=tf.nn.relu,输入=self.inputs,num_输出=32,
    内核大小=[8,8],步幅=4,填充='SAME')
    使用tf.variable_scope('conv_2'):
    self.conv_2=slim.conv2d(激活=tf.nn.relu,输入=self.conv_1,输出=64,
    内核大小=[4,4],步幅=2,填充='SAME')
    使用tf.variable_scope('conv_3'):
    self.conv_3=slim.conv2d(激活=tf.nn.relu,输入=self.conv_2,输出=64,
    内核大小=[3,3],步幅=1,填充='SAME')
    使用tf.variable_scope('fc'):
    self.fc=slim.fully_connected(slim.flatten(self.conv_3),512,activation_fn=tf.nn.elu)
    

    我想锁定
    conv_1
    conv_2
    conv_3
    ,并在恢复检查点数据后只训练
    fc

    锁定某些变量有点复杂,有几种方法。这涵盖了它,与你的问题非常相似

    简单的解决方法是执行以下操作:

    fc_vars=tf.get_集合(tf.GraphKeys.TRAINABLE_变量,scope='fc'))
    列车运行=选择最小化(损失、变量列表=fc变量)