『TensorFlow』网络操作API

时间:2022-05-28 08:37:49

标签:

优化器基类介绍 正常使用流程:

创建优化器对象 -> 指定最小化loss & 可优化参数 -> runminimize实际包含两个操作:首先计算梯度,然后更新可训练参数。

『TensorFlow』网络操作API

 非标准化操作:

希望计算出梯度之后 - > 人工处理梯度 -> 优化参数,

使用两个新的函数取代minimize:

1 # 创建一个optimizer. 2 opt = GradientDescentOptimizer(learning_rate=0.1) 3 4 # 计算<list of variables>相关的梯度 5 grads_and_vars = opt.compute_gradients(loss, <list of variables>) 6 7 # grads_and_vars为tuples (gradient, variable)组成的列表。 8 #对梯度进行想要的处理,比如cap处理 9 capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] 10 11 # 令optimizer运用capped的梯度(gradients) 12 opt.apply_gradients(capped_grads_and_vars)

『TensorFlow』网络操作API

优化器API详解 操作 描述
class tf.train.Optimizer   基本的优化类,该类不常常被直接调用,而较多使用其子类,
比如GradientDescentOptimizer, AdagradOptimizer
或者MomentumOptimizer
 
tf.train.Optimizer.__init__(use_locking, name)   创建一个新的优化器,
该优化器必须被其子类(subclasses)的构造函数调用
 
tf.train.Optimizer.minimize(loss, global_step=None,
var_list=None, gate_gradients=1,
aggregation_method=None, colocate_gradients_with_ops=False,
name=None, grad_loss=None)
  添加操作节点,用于最小化loss,并更新var_list
该函数是简单的合并了compute_gradients()与apply_gradients()函数
返回为一个优化更新后的var_list,如果global_step非None,该操作还会为global_step做自增操作
 
tf.train.Optimizer.compute_gradients(loss,var_list=None, gate_gradients=1,
aggregation_method=None,
colocate_gradients_with_ops=False, grad_loss=None)
  对var_list中的变量计算loss的梯度
该函数为函数minimize()的第一部分,返回一个以元组(gradient, variable)组成的列表
 
tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None)   将计算出的梯度应用到变量上,是函数minimize()的第二部分,返回一个应用指定的梯度的操作Operation,对global_step做自增操作  
tf.train.Optimizer.get_name()   获取名称  
初始化优化器:

『TensorFlow』网络操作API

最小化loss:

『TensorFlow』网络操作API

 计算梯度并返回:

『TensorFlow』网络操作API

 应用梯度更新参数:

『TensorFlow』网络操作API

 并发性参数专栏

minimize()和compute_gradients()的可选参数,

有GATE_NONE,GATE_OP,GATE_GRAPH三个可选选项。

GATE_NONE*别并发,会造成结果不可复现;

GATE_OP每一个节点内部不并发,计算完本节点全部梯度才更新;

GATE_GRAPH最低并发,计算好全部梯度才更新参数,如果想在apply梯度(全梯度)前处理一下,使用这个选项。

『TensorFlow』网络操作API

调试函数(高级API)

一些optimizer的子类,比如 MomentumOptimizer 和 AdagradOptimizer 分配和管理着额外的用于训练的变量。这些变量称之为’Slots’,Slots有相应的名称,可以向optimizer访问的slots名称。有助于在log debug一个训练算法以及报告slots状态。

操作 描述
tf.train.Optimizer.get_slot_names()   返回一个由Optimizer所创建的slots的名称列表  
tf.train.Optimizer.get_slot(var, name)   返回一个name所对应的slot,name是由Optimizer为var所创建
var为用于传入 minimize() 或 apply_gradients()的变量
 

『TensorFlow』网络操作API

『TensorFlow』网络操作API

 优化器子类展示