本文整理自知乎专栏深度炼丹,转载请征求原作者同意。

本文的全部代码都在原作者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会在图中创建xy变量,同时创建x+y运算,而lazy loading只会创建这两个变量:

  • normal loading 在session中不管做多少次x+y,只需要执行z定义的加法操作就可以了
  • lazy loading在session中每进行一次x+y,就会在图中创建一个加法操作,计算图就会多一个节点。严重影响图的读入速度。

CS20SI-tensorflow for research笔记: Lecture2的更多相关文章

  1. Google TensorFlow深度学习笔记

    Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...

  2. TensorFlow.org教程笔记(二) DataSets 快速入门

    本文翻译自www.tensorflow.org的英文教程. tf.data 模块包含一组类,可以让你轻松加载数据,操作数据并将其输入到模型中.本文通过两个简单的例子来介绍这个API 从内存中的nump ...

  3. CS20SI-tensorflow for research笔记: Lecture3

    本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. Tens ...

  4. CS20SI-tensorflow for research笔记: Lecture1

    本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. 什么是T ...

  5. 『TensorFlow』读书笔记_Inception_V3_下

    极为庞大的网络结构,不过下一节的ResNet也不小 线性的组成,结构大体如下: 常规卷积部分->Inception模块组1->Inception模块组2->Inception模块组3 ...

  6. TensorFlow深度学习笔记 Tensorboard入门

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程: https://ww ...

  7. TensorFlow深度学习笔记 循环神经网络实践

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...

  8. TensorFlow 深度学习笔记 卷积神经网络

    Convolutional Networks 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Is ...

  9. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...

随机推荐

  1. Linux-进程描述(1)—进程控制块

    进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...

  2. python3与mysql交互

    1.安装pymysql模块 pip3 install pymysql3 2.pymysql的简单使用: # /usr/bin/env python3 import pymysql class Mysq ...

  3. Flink on yarn的配置及执行

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink可以自己搭建集群模式已提供为庞大数据的计算.但在实际应用中.都是计算hdfs上的 ...

  4. PHP7.* AES的加密解密

    之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...

  5. The type 'Expression<>' is defined in an assembly that is not referenced.You must add a reference to assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

    在我将一个.net framework 4.0+mvc4+ef5的项目,升级到.net framework 4.6.1+mvc5+ef6之后,解决了所有的升级带来的问题,唯独在razor的cshtml ...

  6. JMeter调试参数是否取值正确,调试正则提取的结果(log.info|log.error|print)

    JMeter调试参数是否取值正确,调试正则提取的结果(log.info | log.error | print) Jmeter的log输出控制(jmeter.log) 1 2 log_level.jm ...

  7. EJS 入门学习

    EJS(Embedded JavaScript templates)是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本.可以说EJS是一个JavaScript库,EJS可以同时运行在客 ...

  8. JS与CSS那些特别小的知识点区别

    1:target与currentTarget的区别 currentTarget指向的事件绑定的元素,target指向的是你点击的元素 2:attr与jprop在jQuery在API当中的区别 2.1: ...

  9. 如何快速求解第一类斯特林数--nlog^2n + nlogn

    目录 参考资料 前言 暴力 nlog^2n的做法 nlogn的做法 代码 参考资料 百度百科 斯特林数 学习笔记-by zhouzhendong 前言 首先是因为这道题,才去研究了这个玩意:[2019 ...

  10. jquery 操作服务端控件,select 控件

    <asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> <se ...