1、tf.get_variable()

tf.get_variable()用来创建变量时,和tf.Variable()函数的功能基本等价。

v = tf.get_variable("v", shape=[1], initializer=tf.ones_initializer(1.0))
v = tf.Variable(tf.constant(1.0, shape=[1]), name="v")

tf.get_variable函数调用时提供的维度(shape)信息以及初始化方法(initializer)的参数和tf.Variable函数调用时提供的初始化过程中的参数类似。

tf.get_variable函数与tf.Variable函数最大的区别在于指定变量名称的参数。对于tf.Variable函数,函数名称是一个可选的参数,通过name=“v”的形式给出。但是对于tf.get_variable函数,变量名称是一个必填的参数。

tf.get_variable只能创建新的参数,如果创建的参数已经存在,则会报错。如果想要通过tf.get_variable函数获取一个已经创建的变量,需要通过tf.variable_scope函数来生成一个上下文管理器,并明确指定在这个上下文管理器中,tf.get_variable将直接获取已经生成的变量。

2、tf.variable_scope()

tf.variable_scope可以控制tf.get_variable函数的语义。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf# 在名字为foo的命名空间内创建名字为v的变量
with tf.variable_scope("foo"):v = tf.get_variable('v', [1], initializer=tf.constant_initializer(1.0))# 因为在命名空间foo已经存在名为v的变量,所以以下代码将会报错:
# Variable foo/v already exists, disallowed. Did you mean tu set reuse=True in Varscope?
with tf.variable_scope("foo"):v = tf.get_variable('v', [1])# 在生成上下文管理器时,将参数reuse设置为True。这样tf.get_variable函数将直接获取已经声明的变量
with tf.variable_scope("foo", reuse=True):v1 = tf.get_variable('v', [1], initializer=tf.constant_initializer(1.0))print(v == v1)     # 输出为True,代表v,v1代表的是相同的TensorFlow中变量#  将参数reuse设置为True时,tf.variable_scope将只能获取已经创建过的变量。因为在命名空间bar中还没有v变量,
# 所以以下代码会报错:
# Variable bar/v dose not exist, disallowed. Did you mean tu set reuse=None in Varscope?
with tf.variable_scope("bar", reuse=True):v = tf.get_variable('v', [1])

上边例子说明当tf.variable_scope函数使用参数reuse=True生成上下文管理器时,这个上下文管理器内所有的tf.get_variable函数会直接获取已经创建的变量。如果变量不存在,则tf.get_variable函数将会报错;

相反,如果tf.variable_scope函数使用参数reuse=None或reuse=False创建上下文管理器,tf.get_variable操作将创建新的变量。如果同名的变量已经存在,则会报错。

3、tf.variable_scope() 函数嵌套

TensorFlow中tf.variable_scope函数是可以嵌套的,下边的程序来说明当tf.variable_scope函数嵌套时,reuse参数的取值是如何确定的。

import tensorflow as tfwith tf.variable_scope("root"):# 可以通过tf.get_variable_scope().reuse函数来获取当前上下文管理器中reuse参数的取值print(tf.get_variable_scope().reuse)  # 输出False,即最外层reuse是Falsewith tf.variable_scope("foo", reuse=True):  #新建一个嵌套的上下文管理器,并指定reuse为Trueprint(tf.get_variable_scope().reuse)  # 输出Truewith tf.variable_scope("bar"):   # 新建一个嵌套的上下文管理器,不指定reuse,这时reuse的取值与外面一层保持一致print(tf.get_variable_scope().reuse)  # 输出Trueprint(tf.get_variable_scope().reuse)  # 输出False。5退出reuse设置为True的上下文管理器之后,reuse的值又回到了False

TensorFlow基础篇(二)——tf.get_variable()和tf.get_variable_scope()相关推荐

  1. TensorFlow基础篇(六)——tf.nn.max_pool()和tf.nn.avg_pool()

    tf.nn.max_pool()和tf.nn.avg_pool()是TensorFlow中实现最大池化和平均池化的函数,在卷积神经网络中比较核心的方法. 有些和卷积很相似,可以参考TensorFlow ...

  2. TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()

    scope 命名方法 对于一个复杂的 tensorflow 模型会有很多个变量, tf.variable_scope() :提供了简单的命名空间技术以避免冲突: tf.get_variable():从 ...

  3. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

  4. tf.Variable、tf.get_variable、tf.variable_scope、tf.name_scope、random、initializer

    转自:tensorflow学习笔记(二十三):variable与get_variable TF.VARIABLE.TF.GET_VARIABLE.TF.VARIABLE_SCOPE以及TF.NAME_ ...

  5. tf.get_variable与tf.variable_scope

    一.tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将 ...

  6. tf.Variable() 和 tf.get_variable(),tf.name_scope() 和 tf.variable_scope()

    在gpu并行训练网络时,往往需要共享已创建的变量,tensorflow中为了使这些变量名和操作名唯一并且不重复,用了几个函数来应对这种情况.于是就有了tf.Variable(), tf.get_var ...

  7. tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope

    tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量 ...

  8. mysql 基础篇(二) 账号、权限管理

    mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...

  9. 用Kotlin撸一个图片压缩插件-插件基础篇(二)

    简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...

  10. vue实战入门基础篇二:从零开始仿门户网站实例-开发框架搭建

    上一篇:vue实战入门基础篇一:从零开始仿门户网站实例-前期准备工作 vue实战入门基础篇二:从零开始仿门户网-2022-2-23 21:00:27 一.目录 第一篇:前期准备工作 第二篇:开发框架搭 ...

最新文章

  1. (译+原)std::shared_ptr及std::unique_ptr使用数组
  2. if test 多条件_if函数进阶篇 嵌套+多条件判断
  3. [导入]创建一个ASP通用分页类代码部分
  4. 激活函数详解/为什么要用激活函数
  5. 半年全球网络安全入侵事件近千起,超19亿数据受影响
  6. linux中screen命令的用法
  7. 连载:面向对象葵花宝典:思想、技巧与实践(32) - LSP原则
  8. Linux快速入门教程
  9. android切图的公式,APP的切图原理
  10. 欢迎空心字怎么写_春节快乐空心字怎么写
  11. Excel2013制作甘特图
  12. 解决Vue history模式下路由跳转时页面404问题
  13. 为什么php-fpm会使用内存一直增加_百度输入法重大BUG:内存占用随用户词库增大而暴涨...
  14. 【Windows无法修复问题】“启动修复”无法修复你的电脑解决方法
  15. 自己动手刷原生android系统
  16. 4.8 IFFT/FFT
  17. 数据结构-顺序表(动态分配存储空间)
  18. 数仓经典案例-各个视频平均完播率、平均播放进度
  19. sail.js学习 - 一些问题
  20. 谷粒商城十elasticsearch搜索服务及商品上架

热门文章

  1. RSA加解密用途简介及java示例
  2. [MyBatis]诡异的Invalid bound statement (not found)错误
  3. Tomcat的安装、配置常见问题
  4. 发的楷体怎么写_孩子作业实在写不完,父母该怎么办?我直接给老师发信息
  5. 北理计算机未来,2021北理计算机专硕889考研经验分享
  6. ISE与Notepad++关联
  7. C#分析URL参数获取参数和值得对应列表(一)
  8. Asp.net Web Api 路由 和 异常处理
  9. LeetCode-179:数组自动排序工具Arrays.sort(),比较器Comparator的正确打开方式
  10. redhat 5.4 yum配置