干货| Tensorflow for research 学习笔记[二]

2017 年 9 月 28 日 机器学习研究会

Tensorflow for research系列笔记

干货|还怕Tensorflow学习没有资料吗?来看最新开的Tensorflow课程学习笔记


1
TensorBoard 可视化


tensorflow不仅仅是一个计算图软件,其还包含了tensorboard可视化工具,安装tensorflow的时候会默认安装,使用方法非常简单,使用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,可以得到下面的结果。




2
 常数类型(Constant types)



能够通过下面这个方式创造一个常数

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(dims, value, name=None)
tf
.fill([2, 3], 8)
>> [[8, 8, 8], [8, 8, 8]]


也有和numpy类似的序列创建


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, dtype=None, name='range')
tf
.range(3, limit=18, delta=3)
>> [3, 6, 9, 12, 15]


这和numpy最大的区别在于其不能迭代,即


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
.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None,name=None)
tf
.random_shuffle(value, seed=None, name=None)
tf
.random_crop(value, size, seed=None, name=None)
tf
.multinomial(logits, num_samples, seed=None, name=None)
tf
.random_gamma(shape, alpha, beta=None, dtype=tf.float32, seed=None, name=None)


另外tensorflow和numpy的数据类型可以通用,也就是说


tf.ones([2, 2], np.float32)
>> [[1.0, 1.0], [1.0, 1.0]]


最好不要使用python自带的数据类型,同时在使用numpy数据类型的时候要小心,因为未来可能tensorflow的数据类型和numpy不再兼容。



3
 变量(Variable)




使用常量会存在什么问题呢?常量会存在计算图的定义当中,如果常量过多,这会使得加载计算图变得非常慢,同时常量的值不可改变,所以引入了变量。


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.variable_initializer([a, b], name='init_ab')with tf.Session() as sess:
    sess.run(init_ab)


或者是对某一个变量进行初始化


w = tf.Variable(tf.zeros([784, 10]))
with tf.Session() as sess:    sess.run(w.initializer)


如果我们想取出变量的值,有两种方法


w = tf.Variable(tf.truncated_normal([10, 10], name='normal'))
with tf.Session() as sess:    sess.run(w.initializer)    print(w.eval()) # 方法一    print(sess.run(w)) # 方法二


下面看看这个小程序


w = tf.Variable(10)w.assign(100)
with tf.Session() as sess:    sess.run(w.initializer)    print(w.eval())
>> 10

上面这个程度会得到10,这是因为我们虽然定义了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


另外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()


你也可以根据一个变量来定义一个变量


w = tf.Variable(tf.truncated_normal([700, 10]))
u
= tf.Variable(w * 2)


4
占位符(Placeholders)



tensorflow中一般有两步,第一步是定义图,第二步是在session中进行图中的计算。对于图中我们暂时不知道值的量,我们可以定义为占位符,之后再用`feed_dict`去赋值。

定义占位符的方式非常简单。

tf.placeholder(dtype, shape=None, name=None)

dtype是必须要指定的参数,shape如果是None,说明任何大小的tensor都能够接受,使用shape=None很容易定义好图,但是在debug的时候这将成为噩梦,所以最好是指定好shape。


转自:机器学习算法与自然语言处理


完整内容请点击“阅读原文“””

登录查看更多
2

相关内容

TensorBoard是深度学习框架TensorFlow的一个可视化工具,能够有效地展示Tensorflow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的数据信息。
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
TensorFlow 2.0 学习资源汇总
专知会员服务
66+阅读 · 2019年10月9日
【初学者系列】tensorboard学习笔记
专知
7+阅读 · 2019年10月4日
PyTorch 学习笔记(一):让PyTorch读取你的数据集
极市平台
16+阅读 · 2019年4月24日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
【干货】基于Keras的注意力机制实战
专知
58+阅读 · 2018年5月4日
tensorflow项目学习路径
北京思腾合力科技有限公司
10+阅读 · 2017年11月23日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
Neural Architecture Optimization
Arxiv
8+阅读 · 2018年9月5日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
5+阅读 · 2018年6月12日
Arxiv
3+阅读 · 2018年2月24日
Arxiv
4+阅读 · 2018年1月29日
VIP会员
相关资讯
【初学者系列】tensorboard学习笔记
专知
7+阅读 · 2019年10月4日
PyTorch 学习笔记(一):让PyTorch读取你的数据集
极市平台
16+阅读 · 2019年4月24日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
【干货】基于Keras的注意力机制实战
专知
58+阅读 · 2018年5月4日
tensorflow项目学习路径
北京思腾合力科技有限公司
10+阅读 · 2017年11月23日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
相关论文
Top
微信扫码咨询专知VIP会员