Tensorflow知识点小结

写在前面
最近在学习Tensorflow的一些知识。做一些记录方便自己查阅,如果有可能也希望能帮大家更好的学习。文中有不当的地方请私信我或留言,大家共同进步。

一、相关资源

(1)官网
最关键的资源是tensorflow的官网.注意tensorflow中国站不是org结尾的网站,而是以cn结尾的站点。不用翻墙也能访问。
https://tensorflow.google.cn/
(2)github
Google在github上有一个tensorflow仓库,里面特别需要关注的是research文件夹。有很多功能有已经有相关实现。
https://github.com/tensorflow/tensorflow

二、基础知识

根据例子来讲解可能效果会更好,下面给出一个例子,原文来自
https://www.jianshu.com/p/ce213e6b2dc0
当然类似的例子官网里也有,有兴趣的同学可以去看看。

import tensorflow as tf 
import numpy as np 

x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3 
### create tensorflow structure start 
### #定义变量 
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)) 
biases = tf.Variable(tf.zeros([1])) 
#如何计算预测值 
y = Weights * x_data + biases 
# loss function 
loss = tf.reduce_mean(tf.square(y-y_data)) 
#梯度下降优化器,定义learning rate 
optimizer = tf.train.GradientDescentOptimizer(0.5) #训练目标是loss最小化 
train = optimizer.minimize(loss) 
#初始化变量,即初始化 Weights 和 biases 
init = tf.global_variables_initializer() 
#创建session,进行参数初始化 
sess = tf.Session() 
sess.run(init) 
#开始训练200步,每隔20步输出一下两个参数 
for step in range(201): 
    sess.run(train) 
    if step % 20 == 0:
       print(step,sess.run(Weights),sess.run(biases)) ### create tensorflow structure end ###

上面的代码很简单,输入是100个二维坐标点(x,y)这些点均落在y=0.1x+0.3这条线上。
假设我们只知道100个点的坐标,我们能否根据这些点找到y=0.1
x+0.3“这条线”?
显然是可以的。
现在我们根据上述代码,来引出tensorflow的一些基本知识。

(一)tf.Variable

这里我们已经知道这“可能是”一个线性函数。所以要拟合线性函数,就是确定斜率和偏置。

Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))

关于Variable的介绍,可以参考官网的API文档
https://tensorflow.google.cn/api_docs/python/tf/Variable
原文是这么说的:

A variable maintains state in the graph across calls to run(). You add a variable to the graph by constructing an instance of the class Variable.

这句话的大概意思就是说就像数据结构里的图,variable就像图上的节点。需要注意的是和python里可以“肆意”赋值,自动完成类型转换不同。Variable若需修改类型需要显示声明,在次不再赘述。

(二)tf.reduce_mean

先来看看函数原型:

tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

这个函数的含义是:

Computes the mean of elements across dimensions of a tensor.

又引用了一次API……这个函数是用来计算沿某一维度向量元素的均值的。
比如给出一个3*2的tensor,怎么计算均值?六个数相加除6,还是三三分组,两两分组?所以得要指定一下沿哪个维度计算均值。
回到上面的代码,似乎也没指定维度axis啊。

loss = tf.reduce_mean(tf.square(y-y_data))

其实在这种情况下,整个tensor所有元素求和再平均。
下面再看个例子可能更好懂。仔细观察一下维度0和1分别是什么方向?

# 'x' is [[1., 1.]
#         [2., 2.]]
tf.reduce_mean(x) ==> 1.5
tf.reduce_mean(x, 0) ==> [1.5, 1.5]
tf.reduce_mean(x, 1) ==> [1.,  2.]

我们可以发现reduction_indices=1时,每个二维向量“内部求和”。下面有张图可以说明一下这个问题。其实也就二维的情况容易混淆,其它情况(三维或更多维)沿哪个维度压缩应当是清晰的。


image.png

(三)tf.train

我们再看看一个相当重要的部分train。

#梯度下降优化器,定义learning rate 
optimizer = tf.train.GradientDescentOptimizer(0.5) #训练目标是loss最小化 
train = optimizer.minimize(loss) 

这部分的内容其实比较多,建议看看training的文档。
https://tensorflow.google.cn/versions/master/api_guides/python/train
下面我们理一理,这个train的用途。

1、Optimizers(优化器)
2、Gradient Computation(计算梯度)
3、Gradient Clipping(梯度裁剪)
4、Decaying the learning rate(学习率衰减)
5、Moving Averages(滑动平均)
6、Coordinator and QueueRunner
7、Distributed execution
8、Reading Summaries from Event Files
9、Training Hooks
10、Training Utilities

列举了很多但是不一定会都用到,碰到哪个讲哪儿吧!今天先说说Optimizers。
Optimizers

The Optimizer base class provides methods to compute gradients for a loss and apply gradients to variables. A collection of subclasses implement classic optimization algorithms such as GradientDescent and Adagrad.

Optimizer就是用来计算loss的梯度,怎么计算呢?
以GradientDescentOptimizer为例,我们注意到
先是定义了一个optimizer,再将loss传递给optimizer。

train = optimizer.minimize(loss) 

minimize是什么呢?从字面看最小化loss。
其实我们知道,怎么去实现一个BP算法最小化loss?至少需要两个过程吧?一是计算梯度,二是将梯度赋值。不断重复两个过程。minimize就是这两个过程的合并。它把一些细节性的东西,比如每算完一轮梯度赋值,总轮数加一等等这些事情都做了。我们只要抽象的理解成经过这一步骤出来的loss是“足够小的”。其它优化器类似。

剩下的部分建议参考
https://www.jianshu.com/p/ce213e6b2dc0
写的很好,本文不再赘述。祝您学习愉快!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容