(第一章第五部分)TensorFlow框架之变量OP
系列博客链接:
(一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html
(二)TensorFlow框架之图与TensorBoard:https://www.cnblogs.com/kongweisi/p/11038517.html
(三)TensorFlow框架之会话:https://www.cnblogs.com/kongweisi/p/11038550.html
(四)TensorFlow框架之张量:https://www.cnblogs.com/kongweisi/p/11039237.html
本文概述:
- 说明变量op的特殊作用
- 说明变量op的trainable参数的作用
- 应用global_variables_initializer实现变量op的初始化
1、变量
TensorFlow变量是表示程序处理的共享持久状态的最佳方法。变量通过 tf.Variable OP类以及tf.get_variable()类进行操作。
变量的特点:
- 存储持久化
- 可修改值
- 可指定被训练
1.1 创建变量
- tf.Variable(initial_value=None, trainable=True, collections=None, name=None)
- initial_value:初始化的值
- trainable:是否被训练
- collections:新变量将添加到列出的图的集合中collections,默认为[GraphKeys.GLOBAL_VARIABLES],如果trainable是True变量也被添加到图形集合 GraphKeys.TRAINABLE_VARIABLES
# 特殊的创建张量OP
# 1、必须手动初始化
var = tf.Variable(tf.random_normal([2, 2], mean=0.0, stddev=1.0), name="var", trainable=True) with tf.Session() as sess:
sess.run(var)
- 变量需要显示初始化,才能运行值
# 添加一个初始化变量的OP
# 1、变量显示初始化
init_op = tf.global_variables_initializer() with tf.Session() as sess:
# 2、运行初始化变量的OP
sess.run(init_op)
# 或者直接这么做 sess.run(tf.global_variables_initializer())
1.2 变量OP的方法
给变量赋值一个新的值,返回一个新的变量
- new_var = assign(value) 原变量变化
- new_var = assign_add(delta) 原变量不变
var = tf.Variable(tf.random_normal([2, 2], mean=0.0, stddev=1.0), name="var", trainable=True)
# 给变量赋值一个新的值
var1 = var.assign([[2, 3], [4, 5]])
# 初始化变量OP
init_op = tf.global_variables_initializer()
# 给变量在原值的基础上,加上新的值
va = var.assign_add([[1, 3], [4, 5]])
with tf.Session() as sess:
# 运行初始化op
sess.run(init_op)
print(sess.run(va))
print(sess.run(var))
关于变量的被训练,我会在后面的线性回归案例当中介绍
2、命名空间与共享变量
共享变量的主要用途在一些网络当中的参数共享, 由于在TensorFlow当中,只要我们定义的不同OP, 即使name参数指定一样,但实际上也并不是同一个变量。
如果想要达到重复利用变量的效果,我们就要使用tf.variable_scope()结合tf.get_variable()一起使用
2.1 定义一个相同名字的变量
var = tf.Variable(name='var', initial_value=[4], dtype=tf.float32)
var_double = tf.Variable(name='var', initial_value=[4], dtype=tf.float32) <tf.Variable 'var:0' shape=() dtype=float32_ref>
<tf.Variable 'var_1:0' shape=() dtype=float32_ref>
2.2 使用tf.variable_scope()修改OP命名空间
会在OP的名字前面增加命名空间的指定名字
with tf.variable_scope("name"):
var = tf.Variable(name='var', initial_value=[4], dtype=tf.float32)
var_double = tf.Variable(name='var', initial_value=[4], dtype=tf.float32)
<tf.Variable 'name/var:0' shape=() dtype=float32_ref>
<tf.Variable 'name/var_1:0' shape=() dtype=float32_ref>
2.2 tf.get_variable共享变量
通过tf.get_variable的初始化与Variable参数一样, 但是要是实现共享需要打开 tf.variable_scope("name")中的reuse = tf.AUTO_REUSE参数
# 打开共享参数
# 或者
# with tf.variable_scope("name") as scope:
# 在需要使用共享变量的前面定义: scope.reuse_variables()
with tf.variable_scope("name", reuse=tf.AUTO_REUSE):
var = tf.Variable(initial_value=4.0, name="var", dtype=tf.float32)
var_double = tf.Variable(initial_value=4.0, name="var", dtype=tf.float32) var1 = tf.get_variable(initializer=tf.random_normal([2, 2], mean=0.0, stddev=1.0),
name="var1",
dtype=tf.float32)
var1_double = tf.get_variable(initializer=tf.random_normal([2, 2], mean=0.0, stddev=1.0),
name="var1",
dtype=tf.float32) with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(var1)
print(var1_double)
注意:TensorFlow和python不同, 它是维护一个所有OP名字的列表,不是以取的最前面的名字(自定义的接收结果,python变量)区分。
共享变量就相当于全局变量。
(第一章第五部分)TensorFlow框架之变量OP的更多相关文章
- (第一章第二部分)TensorFlow框架之图与TensorBoard
系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html 本文概述: 说明图的基本使用 应用tf.Grap ...
- (第二章第二部分)TensorFlow框架之读取图片数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...
- NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...
- 第一章-第五题(你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?阅读有关软件工程和计算机科学的区别的文章,谈谈你的看法。)--By 侯伟婷
我所在的本科学校和研究生学校都有计算机科学专业和软件工程专业.具体的教学计划无从得到,所以此情况无从对比,但是我从本科教务处网站找到了计算机科学专业和软件工程专业有关专业方面的课程,现列表如下. 表格 ...
- tensorflow2.0学习笔记第一章第五节
1.5简单神经网络实现过程全览
- 04373 C++程序设计 2019版 第一章习题五、程序设计题
题目: 1.编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中.在输入字符串之前,先输入n的值.要求,数组A需要动态申请空间,程序运行结束前再释放掉. #include <iostre ...
- (第一章第六部分)TensorFlow框架之实现线性回归小案例
系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...
- (第二章第四部分)TensorFlow框架之TFRecords数据的存储与读取
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
- (第二章第三部分)TensorFlow框架之读取二进制数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
随机推荐
- linux搭建本地和网络yum源
[mirrors.163.com] name=mirrors.163.com baseurl=http://mirrors.163.com/centos/7/os/x86_64/ enabled=1 ...
- Fiddler初学笔记
Fiddler简介 Fiddller官网: www.fiddler2.com Fiddler是客户端与服务器端的http代理,是目前最常用的http抓包工具之一. Fiddler能够监听客户端和服务器 ...
- 常见线程池之 newCacheThreadPool 缓存线程池 简单使用
package com.aaa.threaddemo; import java.util.concurrent.BlockingQueue; import java.util.concurrent.E ...
- Mac系统如何显示隐藏文件
Command+Shift+. 可以显示隐藏文件.文件夹,再按一次,恢复隐藏:finder下使用Command+Shift+G 可以前往任何文件夹,包括隐藏文件夹.
- Android动态加载布局之LayoutInflater【转】
万分感谢大佬:https://www.jianshu.com/p/6a235ba5ee17 深入了解View<一>之Android LayoutInfalter原理分析 下文为:Layou ...
- HTC组件介绍及应用 HTML
转载请注明来源:https://www.cnblogs.com/hookjc/ HTML组件封装了HTML内容,并可以插入到别的HTML文档中.在HTML组件出现以前,在HMTL文档中使用自定义控制唯 ...
- UIImageView的frame设置
- (void)viewDidLoad { [super viewDidLoad]; /* // 设置frame的方式 // 方式一 UIImageView *imageView = [[UIImag ...
- Linux发行版·常见Linux系统下载
本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...
- Ansible 自动化运维管理工具
Ansible 自动化运维管理工具 1.Ansible概述 2.Ansible部署 3.Ansible模块 1.Ansible概述: Ansible是一个基于Python开发的配置管理和应用部署工具, ...
- 巧用python进行接口自动化测试
一.接口自动化测试的流程 1.需求分析 1.1请求(url,方法.数据) 2.挑选需要做自动化测试的接口 3.设计自动化测试用例 4.搭建自动化测试环境 5.设计自动化执行框架(报告.参数化. 用例执 ...