tensorflow只训练指定变量

本文详细介绍了如何在TensorFlow中通过指定变量列表进行神经网络训练,实现特定scope变量的优化,如finetune操作。通过实例展示了使用Adam优化器计算指定变量梯度,并应用梯度更新变量的过程。

在用tensorflow训练神经网络时,有时我们想固定其中一些变量的取值不变,训练指定scope中的变量,常用的如finetune等。

一种最常用的方法是在用optimizer计算梯度时,指定计算梯度的变量列表(待优化的变量列表)。示例如下:

import tensorflow as tf
import tensorflow.contrib.slim as slim

# 定义优化器
g_optimizer = tf.train.AdamOptimizer(learning_rate = 1e-4)

# 指定待优化的变量列表
g_var_list = tf.get_collection(key=tf.GraphKeys.TRAINING_VARIABLES,scope="generator")

# 根据损失 gen_loss, 计算指定变量的优化梯度,g_gradient中保存了待优化的变量和对应变量的优化梯度。
g_gradient = g_optimizer.compute_gradients(loss = gen_loss, var_list = g_var_list)

# 应用梯度,用计算的变量梯度优化变量列表中的变量
g_opt = g_optimizer.apply_gradient(g_gradient)

更多提取变量列表的方法可参考:Tensorflow 获取model中的变量列表,用于模型加载等

更多冻结变量的方法可参考:tensorflow冻结变量方法(tensorflow freeze variable)

但是我认为,以上就足够了。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值