CS20SI-tensorflow for research笔记: Lecture2
本文整理自知乎专栏深度炼丹,转载请征求原作者同意。
本文的全部代码都在原作者GitHub仓库github
CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程。
TensorBoard可视化
安装TensorFlow的时候TensorBoard自动安装,使用writer=tf.summary.FileWriter('./graph',sess.graph)
创建一个文件写入器,./graph
是文件路径,sess.graph
表示读入的图结构
简单的例子:
import tensorflow as tf
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a,b)
with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs',sess.graph)
print(sess.run(x))
writer.close() # close the writer when you're done using it
打开终端运行程序,输入tensorboard --logdir="./graphs"
,在网页输入http://localhost:6006/
,进入tensorboard
常数类型
创建一个常数:
tf.constant(value, dtype=None, shape=None, name='const', verify_shape=False)
比如建立一维向量和矩阵,然后相乘:
a = tf.constant([2,2], name='a')
b = tf.constant([[0,1],[2,3]], name='b')
x = tf.multiply(a, b, name='dot_production')
with tf.Session() as sess:
print(sess.run(x))
>> [[0,2]
[4,6]]
类似numpy的创建
特殊值常量创建:
tf.zeros(shape, dtype=tf.float32, name=None)
tf.zeros_like(input_tensor, dtype=None, name=None, optimize=True)
tf.ones(shape, dtype=tf.float32,name=None)
tf.ones_like(input_tensor, dtype=None, name=None, optimize=True)
tf.fill([2,3],8)
>> [[8,8,8],[8,8,8]]
序列创建:
tf.linspace(start, stop, num, name=None)
tf.linspace(10.0, 13.0, 4)
>> [10.0, 11.0, 12.0, 13.0]
tf.range(start, limit=None, delta=1, dtyde=None, name='range')
tf.range(3, limit=18, delta=3)
>> [3,6,9,12,15]
与numpy不同,tf不能迭代,即
for _ in tf.range(4): #TypeError
产生随机数
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
tf目前与numpy数据类型通用:
tf.ones([2,2],np.float32)
>> [[1.0,1.0],[1.0,1.0]]
变量
常量定义保存在计算图中,常量过多使得计算图加载缓慢。
a = tf.Variable(2, name='scalar')
b = tf.Variable([2,3], name='vector')
c = tf.Variable([[0,1][2,3]],name='matrix')
w = tf.Variable(tf.zeros([784,10]),name='weight')
变量的几个操作
x = tf.Variable()
x.initializer # 初始化
x.eval() # 读取里面的值
x.assign() #分配值给该变量
使用变量前必须初始化,初始化可以看作是一种变量的分配值操作
变量的初始化
一次性全部初始化:
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
一部分初始化:
init_ab = tf.variables_initializer([a,b],name='init_ab')
with tf.Session() as sess:
sess.run(init_ab)
某个变量的初始化:
w = tf.Variables(tf.zeros([10,10]))
with tf.Session() as sess:
sess.run(w.initializer)
注意下面这个例程:
w = tf.Variable(10)
w.assign(100)
with tf.Session() as sess:
sess.run(w.initializer)
print(w.eval())
>> 10
得到的答案是10
而不是100
的原因是:虽然定义了assign
操作,但是tensorflow实在session
中执行操作,所以我们需要执行assign
操作:
w = tf.Variable(10)
assign_op = w.assign(100)
with tf.Session() as sess:
sess.run(w.initializer)
sess.run(assign_op) # 赋值作为运算
print(w.eval())
>> 100
用变量定义变量
w = tf.Variable(tf.truncated_normal([700, 10]))
u = tf.Variable(w * 2)
Session独立
tensorflow的session
相互独立。
W = tf.Variable(10)
sess1 = tf.Session()
sess2 = tf.Session()
sess1.run(W.initializer)
sess2.run(W.initializer)
print(sess1.run(W.assign_add(10))) # >> 20
print(sess2.run(W.assign_sub(2))) # >> 8
print(sess1.run(W.assign_add(100))) # >> 120
print(sess2.run(W.assign_sub(50))) # >> -42
sess1.close()
sess2.close()
占位符(Placeholders)
tensorflow有两步,第一步定义图,第二步进行计算。对于图中暂时不知道值的量,可以定义为占位符,之后再用feed_dict
赋值
定义占位符
tf.placeholder(dtype, shape=None, name=None)
最好指定shape,容易Debug
例程:
a = tf.placeholder(tf.float32, shape=[3])
b = tf.constant([5, 5, 5], tf.float32)
c = a + b
with tf.Session() as sess:
print(sess.run(c, feed_dict={a: [1, 2, 3]}))
也可以给tensorflow的运算进行feed操作
a = tf.add(2, 3)
b = tf.multiply(a, 3)
with tf.Session() as sess:
print(sess.run(b, feed_dict={a: 2}))
>> 6
lazy loading
azy loading是指你推迟变量的创建直到你必须要使用他的时候。下面我们看看一般的loading和lazy loading的区别。
# normal loading
x = tf.Variable(10, name='x')
y = tf.Variable(20, name='y')
z = tf.add(x, y)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(10):
sess.run(z)
# lazy loading
x = tf.Variable(10, name='x')
y = tf.Variable(20, name='y')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(10):
sess.run(tf.add(x, y))
normal loading会在图中创建x
和y
变量,同时创建x+y
运算,而lazy loading只会创建这两个变量:
- normal loading 在
session
中不管做多少次x+y
,只需要执行z
定义的加法操作就可以了 - lazy loading在
session
中每进行一次x+y
,就会在图中创建一个加法操作,计算图就会多一个节点。严重影响图的读入速度。
CS20SI-tensorflow for research笔记: Lecture2的更多相关文章
- Google TensorFlow深度学习笔记
Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...
- TensorFlow.org教程笔记(二) DataSets 快速入门
本文翻译自www.tensorflow.org的英文教程. tf.data 模块包含一组类,可以让你轻松加载数据,操作数据并将其输入到模型中.本文通过两个简单的例子来介绍这个API 从内存中的nump ...
- CS20SI-tensorflow for research笔记: Lecture3
本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. Tens ...
- CS20SI-tensorflow for research笔记: Lecture1
本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. 什么是T ...
- 『TensorFlow』读书笔记_Inception_V3_下
极为庞大的网络结构,不过下一节的ResNet也不小 线性的组成,结构大体如下: 常规卷积部分->Inception模块组1->Inception模块组2->Inception模块组3 ...
- TensorFlow深度学习笔记 Tensorboard入门
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程: https://ww ...
- TensorFlow深度学习笔记 循环神经网络实践
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...
- TensorFlow 深度学习笔记 卷积神经网络
Convolutional Networks 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Is ...
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...
随机推荐
- SQL语句完整的执行顺序(02)
这是对SQL语句完整的执行顺序(01)的补充: 数据库是mysql,使用的数据库表名称是my_student. 表的完整数据信息是: 完整语法是: Select [select选项] 字段列表[字段别 ...
- 01-Linux操作系统+指令
一.Linux操作系统 操作系统定义:操作系统直接运行在计算机上的系统软件, 它是与硬件打交道和控制软件运行的计算机程序. 虚拟机:就是模拟一个真实的计算机,好比一个虚拟的电 ...
- Keil相关问题
1.keil重选则器件 2. 移植FREERTOS出错 .\Objects\RTOSDemo.axf: Error: L6406E: No space in execution regions wit ...
- Ansible-Zabbix-基础agent批量装机
ansible 批量装机-Zabbix篇 ############################# 小错误区:特此警示,问题要全面化,不要单纯想着你这边的问题,有可能也是对面的问题,反则亦此,学会深 ...
- nginx 10054报错问题解决方案
使用nginx代理,端口8000.tomcat用于后端服务器,端口8080.nginx的error.log中报如下错误: 2018/09/21 09:08:06 [error] 12488#11600 ...
- buaaoo_first_assignment
四周之前,我不懂面向对象是什么:四周之后,我依然不懂面向对象是什么. 一.第一次作业 (1)实现 说起来,本次作业是最惨烈的一次. 虽然它很简单,但由于未熟悉正则表达式的应用,导致判断wrong fo ...
- mysql的if用法解决同一张数据表里面两个字段是否相等统计数据量。
MySQL的使用用法如下所示:格式:if(Condition,A,B)意义:当Condition为true时,返回A:当Condition为false时,返回B.作用:作为条件语句使用.mysql的i ...
- Python数据可视化之Matplotlib实现各种图表
数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图.柱状图.线图等图表制作是一个数据分析师必备的技能.Python有两个比较出色的图表制作框架,分别是Matplotlib和 ...
- haproxy5-ssl
配置实例: https://andyleonard.com/2011/02/01/haproxy-and-keepalived-example-configuration 配置haproxy支持htt ...
- Django--post提交表单内容
本节目标:①.提交表单内容②.通过客户端提交表单新增一篇文章③.通过Django的forms组件来完成新增一篇文章 =======提交表单内容======== 1.前端html:login.html ...