tensorflow知识点小总结2

本文介绍了TensorFlow中梯度更新的不同方法,包括一次性更新和分步骤更新的方式;探讨了GPU资源的有效管理和分配策略;解析了tf.Graph()的使用场景;区分了tf.shape(a)与a.get_shape()的功能与适用场合;并指出了使用glob模块时需注意的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 梯度更新
正常的梯度更新:

optm = tf.train.AdamOptimizer(learning_rate).minimize(loss)
实际 上 tf.train.AdamOptimizer 进行了两部运算,第一步计算梯度,第二步更新梯度。另一种更新方式就是先计算梯度,再更新我们需要更新的变量。如下,第一种方式,一步计算:
t_vars = tf.trainable_variables() #获取所有变量名
G_vars=[var for var in t_vars if 'generator' in var.name] #获取需要的变量名
g_optm = tf.train.AdamOptimizer(learning_rate=0.00001).minimize(g_loss,var_list=G_vars)
第二种方式,分步计算:
t_vars = tf.trainable_variables()
G_vars=[var for var in t_vars if 'generator' in var.name]
gradient_all =tf.train.GradientDescentOptimizer(0.01).compute_gradients(loss,var_list=G_vars) #对应变量名的梯度计算,这是第一步
optm = tf.train.GradientDescentOptimizer(0.01).apply_gradients(gradient_all) #更新计算出来的梯度,这是第二步
另外,还有两个函数,不常用到,了解一下即可:
tf.gradients(ys, xs, grad_ys=None, name=’gradients’, colocate_gradients_with_ops=False, gate_gradients=False, aggregation_method=None)
该函数计算ys在xs方向上的梯度,需要注意与train.compute_gradients所不同的地方是,该函数返回一组dydx的列表,而不是梯度-权值对
tf.stop_gradient(input, name=None)
该函数告知整个graph图中,对input不进行梯度计算,将其伪装成一个constant常量


2 GPU内存的使用
在tensorflow代码中 

with tf.device('/gpu:0'):

可以使用这一条代码指定某段程序在某一个GPU上运算,但仍然会默认占用所有GPU资源。不过不和其他人公用GPU时也不会有影响,下面介绍两种限定GPU占用的方法:

(1)在tensorflow中定义session时作如下设置,该设置会启用最少的GPU显存来运行程序

config = tf.ConfigProto() 
config.gpu_options.allow_growth = True 
session = tf.Session(config=config) 
(2)在tensorflow中定义session时作如下设置,该设置会强制程序只占用指定比例的GPU显存

config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.4 # 占用GPU40%的显存 
session = tf.Session(config=config)

3 tf.Graph()
这里主要引用 谢小小xh 的博客内容,博客地址: http://blog.youkuaiyun.com/xierhacker/article/details/53860379

4 tf.shape(a) 和 a.get_shape() 的区别
相同点:都可以得到tensor a的尺寸
不同点:tf.shape(a)中a 数据的类型可以是tensor, list, array 
                a.get_shape()中a的数据类型只能是tensor,且返回的是一个元组(tuple)
另外,a.get_shape() 得到的tuple可以利用 a.get_shape().as_list  转成列表,从而对维度进行调用. 


5 glob注意事项
from glob import glob
在linux下glob得到的列表是乱序的,需要用sort重新排序。windows下glob的到的列表顺序和文件夹显示的顺序一致。由于这一错误导致我在Linux下训练的模型在windows下测试,准确率为0的bug,困惑了很久,这里特别提出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值