学习
实践
活动
专区
工具
TVP
写文章
专栏首页NLP/KGtensorflow语法【shape、tf.trainable_variables()、Optimizer.minimize()】

tensorflow语法【shape、tf.trainable_variables()、Optimizer.minimize()】

相关文章:

【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学

【二】tensorflow调试报错、tensorflow 深度学习强化学习教学

【三】tensorboard安装、使用教学以及遇到的问题

【四】超级快速pytorch安装


trick1---实现tensorflow和pytorch迁移环境教学

  • 张量shape参数理解

shape参数的个数应为维度数,每一个参数的值代表该维度上的长度

shape=(100,784)	
代表该张量有两个维度,第一个维度长度为100,第二个维度长度为784,二维数组100行784列
shape=(2,) 
代表该张量有一个维度,第一个维度长度为2,一维数组1行2列

第几个维度的长度,就是左数第几个中括号组之间的元素总数量

# 例:
[[[1,2,3],[4,5,6]]]
# 第一个维度中只有一个元素[[1,2,3][4,5,6]],所以第一个维度长度为1
# 第二个维度中有两个元素[1,2,3][4,5,6],所以第二个维度长度为2
# 第三个维度中有三个元素“1,2,3”或“4,5,6”,所以第三个维度长度为3
# 那么它的shape参数就是[1,2,3]
 

  • tf.trainable_variables(), tf.global_variables()的使用

tf.trainable_variables():

这个函数可以查看可训练的变量,参数trainable,其默认为True

__init__(
    initial_value=None,
    trainable=True,
    collections=None,
    validate_shape=True,
   ...
)

对于一些我们不需要训练的变量,将trainable设置为False,这时tf.trainable_variables() 就不会打印这些变量。

举个简单的例子,在下图中共定义了4个变量,分别是一个权重矩阵,一个偏置向量,一个学习率和计步器,其中前两项是需要训练的而后两项则不需要。

w1 = tf. Variable (tf. randon_normal ([256, 2000]),'w1' )
b1 = tf.get_ variable('b1', [2000])
learning_ rate = tf. Variable(0.5, trainable=False)
global_ step = tf. Variable(0, trainable=False)
trainable_ params = tf. trainable_ variables()
trainable_ params
[<tf. Variable’Variable:0' shape= (256,2000) dtype=float32_ ref>,
<tf. Variable’ b1:0”shape= (2000,) dtype=float32_ ref>]

另一个问题就是,如果变量定义在scope域中,是否会有不同。实际上,tf.trainable_variables()是可以通过参数选定域名的,如下图所示:

vith tf. variable_ scope(' var' ):
w2 = tf.get. variable('w2' , [3, 3])
w3 = tf.get. variable(' w3',[3, 3])

我们重新声明了两个新变量,其中w2是在‘var’中的,如果我们直接使用tf.trainable_variables(),结果如下

trainable. params = tf.trainable.variables ()
trainable_ params
[<tf. Variable’ vrar/w2:0’shape=(3, 3) dtype=float32_ ref>,
<tf. Variable’w3:0' shape=(3, 3) dtype=float32_ ref>]

如果我们只希望查看‘var’域中的变量,我们可以通过加入scope参数的方式实现:

scope_ parans = tf. trainable_ variables (scope-' var' )
scope par ains
[<tf. Variable ’var/w2:0' shape=(3, 3) dtype=float32_ ref>]

tf.global_variables()

如果我希望查看全部变量,包括我的学习率等信息,可以通过tf.global_variables()来实现。效果如下:

global parans = tf. global variables()
global_ params
[<tf. Variable,Variable:0' shape=(256, 2000) dtype=float32_ ref>,
<tf. Variable ' b1:0' shape= (2000,) dtype-float32_ ref>,
<tf. Variable。Variable_ 1:0’shape=0 dtype=float32_ ref>,
<tf. Variable' Variable_ 2:0’ shape=() dtype=int32_ ref>]

这时候打印出来了4个变量,其中后两个即为trainable=False的学习率和计步器。与tf.trainable_variables()一样,tf.global_variables()也可以通过scope的参数来选定域中的变量。

  • Optimizer.minimize()与Optimizer.compute_gradients()和Optimizer.apply_gradients()的用法

Optimizer.minimize()

minimize()就是compute_gradients()和apply_gradients()这两个方法的简单组合,minimize()的源码如下:

  def minimize(self, loss, global_step=None, var_list=None,
               gate_gradients=GATE_OP, aggregation_method=None,
               colocate_gradients_with_ops=False, name=None,
               grad_loss=None):
    grads_and_vars = self.compute_gradients(
        loss, var_list=var_list, gate_gradients=gate_gradients,
        aggregation_method=aggregation_method,
        colocate_gradients_with_ops=colocate_gradients_with_ops,
        grad_loss=grad_loss)
 
    vars_with_grad = [v for g, v in grads_and_vars if g is not None]
    if not vars_with_grad:
      raise ValueError(
          "No gradients provided for any variable, check your graph for ops"
          " that do not support gradients, between variables %s and loss %s." %
          ([str(v) for _, v in grads_and_vars], loss))
 
    return self.apply_gradients(grads_and_vars, global_step=global_step,
                                name=name)

主要的参数说明:

      loss:  `Tensor` ,需要优化的损失;        var_list: 需要更新的变量(tf.Varialble)组成的列表或者元组,默认值为`GraphKeys.TRAINABLE_VARIABLES`,即tf.trainable_variables()

注意:

1、Optimizer.minimize(loss, var_list)中,计算loss所涉及的变量(假设为var(loss))包含在var_list中,也就是var_list中含有多余的变量,并不 影响程序的运行,而且优化过程中不改变var_list里多出变量的值;

2、若var_list中的变量个数少于var(loss),则优化过程中只会更新var_list中的那些变量的值,var(loss)里多出的变量值 并不会改变,相当于固定了网络的某一部分的参数值。

compute_gradients()和apply_gradients()

compute_gradients(self, loss, var_list=None,
                  gate_gradients=GATE_OP,
                  aggregation_method=None,
                  colocate_gradients_with_ops=False,
                  grad_loss=None):

里面参数的定义与minimizer()函数里面的一致,var_list的默认值也一样。需要特殊说明的是,如果var_list里所包含的变量多于var(loss),则程序会报错。其返回值是(gradient, variable)对所组成的列表,返回的数据格式也都是“tf.Tensor”。我们可以通过变量名称的管理来过滤出里面的部分变量,以及对应的梯度。 apply_gradients()的源码如下:

apply_gradients(self, grads_and_vars, global_step=None, name=None)

grads_and_vars的格式就是compute_gradients()所返回的(gradient, variable)对,当然数据类型也是“tf.Tensor”,作用是,更新grads_and_vars中variable的梯度,不在里面的变量的梯度不变。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.csdn.net/sinat_39620217?type=blog复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Tensorflow加载预训练模型的特殊操作

    在前面的文章【Tensorflow加载预训练模型和保存模型】中介绍了如何保存训练好的模型,已经将预训练好的模型参数加载到当前网络。这些属于常规操作,即预训练的模...

    superhua
  • 【tensorflow2.0】自动微分机制

    神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情。

    西西嘛呦
  • Tensorflow小技巧整理:

    tf.trainable_variables(), tf.all_variables(), tf.global_variables()查看变量

    狼啸风云
  • tensorflow学习笔记(三十):tf.gradients 与 tf.stop_gradient() 与 高阶导数

    gradient tensorflow中有一个计算梯度的函数tf.gradients(ys, xs),要注意的是,xs中的x必须要与ys相关,不相关的话,会报错...

    ke1th
  • TensorFlow2.X学习笔记(1)--TensorFlow核心概念

    TensorFlow™ 是一个采用 数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(e...

    MiChong
  • 一看就懂的Tensorflow实战(TensorBoard高级篇)

    [TensorBoard: 图表可视化]http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/gr...

    AI异构
  • TensorFlow强化学习入门(1.5)——上下文赌博机

    在上一篇文章中我们简要介绍了强化学习并构建了一个简单的agent来解决多臂赌博机问题。在多臂赌博机问题中agent不需要考虑所处环境的状态,只要通过学习确定那一...

    ArrayZoneYour
  • tensorflow: bn层

    可视化 batch normalization 过程中的 tensor演化(以输入一张[1, 4 , 4, 1]的图片为例)

    JNingWei
  • 基于TensorFlow.js的线性回归模型实践

    无监督学习的训练过程中不存在所谓的"正确答案", 因此训练的方式与有监督学习存在显著的区别. 本文不进行深入讨论.

    腾讯IVWEB团队
  • 深度学习入门实战(二)

    导语:上一篇文章我们介绍了MxNet的安装,但MxNet有个缺点,那就是文档不太全,用起来可能是要看源代码才能理解某个方法的含义,所以今天我们就介绍一下Te...

    MelonTeam
  • 解决Keras TensorFlow 混编中 trainable=False设置无效问题

    首先我有一个训练好的模型(例如vgg16),我要对这个模型进行一些改变,例如添加一层全连接层,用于种种原因,我只能用TensorFlow来进行模型优化,tf的优...

    砸漏
  • 【深度学习入门系列】TensorFlow训练线性回归

    作者:董超 来源:腾讯云技术社区「腾云阁」 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理...

    IT派
  • tensorflow实现手写体数字识别

    之前在人工智能课上自己手动搭建过一个BP神经网络实现MNIST数据集的手写体数字识别,使用的是c++,最终准确率的上限在95%至96%左右(毕竟水平有限)。这次...

    luxuantao
  • 深度学习入门实战(二):用TensorFlow训练线性回归

    上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理解某个方法的含义,所以今天我们就介绍一下 Te...

    serena
  • tensorflow编程: Variables

    tf.moving_average_variables tf.global_variables_initializer tf.local_variabl...

    JNingWei
  • Tensorflow 简单数据拟合

    GradientDescentOptimizer_0.01.png

    birdskyws
  • 打印tensorflow恢复模型中所有变量与操作节点方式

    补充知识:TensorFlow:.ckpt文件与.ckpt.meta和.ckpt.index以及.pb文件之间的关系是什么?

    砸漏
  • 基于tensorflow的一元二次方程回归预测

    安装tensorflow命令:pip install tensorflow 下面一段代码能够成功运行,则说明安装tensorflow环境成功。

    潇洒坤
  • VggNet10模型的cifar10深度学习训练

    先放些链接,cifar10的数据集的下载地址:http://www.cs.toronto.edu/~kriz/cifar.html

    全栈程序员站长

扫码关注腾讯云开发者

领取腾讯云代金券