TensorFlow实战学习:3-TensorFlow基础知识

上一篇:2-TensorFlow简介及环境搭建

下一篇:4-梯度下降解决线性回归【综合小练习】

1 从 Hello World 开始

开发工具看大家心情,笔者使用Pycharm

  • 新建 helloworld.py 文件
# -*- coding: utf-8 -*-

import tensorflow as tf
import os

# 忽略一些警告信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# 创建一个常量 Operation(操作)
hw = tf.constant("Hello World!I Love TensorFlow !")

# 启动一个 TensorFlow 的 Session(会话)
sess = tf.Session()

# 运行 Graph(计算图)
print(sess.run(hw))

# 关闭Session
sess.close()

# 运行结果
Hello World! I Love tensorFlow !

2 TensorFlow编程模式

一般的编程模式

image.png
2-1 命令式编程

容易理解,命令式语句基本没有优化:C,Java,C++,Python

# 命令式编程
a = 2
b = 3
c = a * b
d = c + 1
print (d)
2-2 符号式编程
  • TensorFlow 属于符号式编程
  • 涉及较多的嵌入和优化,运行速度有同比提升

之前的公式会用计算流图表示,c和d公用内存

image.png
# 符号式编程
import tensorflow as tf

a = tf.constant(2)
b = tf.constant(3)
c  = tf.multiply(a, b)
d = tf.add(c, 1)

with tf.Session() as sess:
     print (sess.run(d))

3 TensorFlow 基础结构

计算流图
image.png
3-1 图(Graph) 的基本构成
image.png
3-2 TensorFlow基础模型
image.png
  • Graph (图) 的形象比喻
    化学实验中,一些节点的加热,提纯等,就相当于数据流图中的 操作(Operation),在连接各节点的导管中流动的化学试剂,就相当于数据流图中的数据,即 张量(Tensor)
image.png
3-3 什么是会话 (Session)

例如打开一个浏览器,就是一个会话

TensorFlow 是C/S架构,客户端是我们自己构建的程序,服务端是C++运行时,通过会话去运行我们的程序,返回结果

image.png
* Session 的作用

1 启动图的会话作用
2 可以只run静态数据流图中的某一部分,就像化学实验流程中,只加热其中一个烧杯等。

image.png
3-4 TensorFlow 程序的流程

1. 定义算法的 计算图(Graph)结构
2. 使用 会话(Session)执行计算

3-5 什么是 Tensor(张量)

计算流图中,流动的数据就是Tensor

数据流图

数据 流图

张量 流图 (TensorFlow)

张量 流图

张量的维度(秩):Rank / Order
三维数组称之为 张量

58568642-56B6-4008-AA01-2A86B3E61C5C.png
三维表示
  • Tensor 的属性
525099F1-77A8-488F-A915-676516404355.png
  • 几种常见的 Tensor
FFBEF5E5-FC19-4A39-9163-C4AB9FCD3C68.png
  • 1 Constant (常量)

值不能改变的Tensor,定义在 tf.constant, 属性如下图

image.png
import tensorflow as tf

tensor = tf.constant([1,2,3,4,5,6,7])
print (tensor)
# 创建一个会话并run tensor,才能输出里面的值
print (tf.Session().run(tensor))

# result
<tf.Tensor 'Const:0' shape=(7,) dtype=int32>
[1 2 3 4 5 6 7]
  • 2 Variable (变量)
    值可以改变的tensor
image.png
import tensorflow as tf

tensor = tf.Variable([1,2,3,4,5,6,7])
print (tensor)
tensor1 = tf.Variable([1,2,3], dtype=tf.int64)
print (tensor)

# result
<tf.Variable 'Variable:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_1:0' shape=(3,) dtype=int64_ref>
  • 3 Placeholder (占位符)

先占住一个固定的位置,等着你之后往里面添加值的一种Tensor

image.png
image.png
  • 4 SparseTensor (稀疏张量)
    一种 “稀疏” 的Tensor,类似线性代数里的稀疏矩阵的概念

只需要定义非零的元素,其余默认为0

image.png
稀疏矩阵示意图
  • Tensor 表示法
76926C83-0323-4221-A293-3FB60FB499D8.png
3-6 再来看一下图 graph
image.png
# -*- coding: utf-8 -*-

import tensorflow as tf
import os

# 忽略一些警告信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

const1 = tf.constant([[2, 2]])
const2 = tf.constant([[4],
                      [4]])

multiple = tf.matmul(const1, const2)

# 尝试print 输出multiple的值
print (multiple)

# 创建了 Session(会话)对象
sess = tf.Session()
result = sess.run(multiple)
print (result)

if const1.graph is tf.get_default_graph():
    print ("const1所在的图(Graph)是当前上下文默认的图")

# 结果:
Tensor("MatMul:0", shape=(1, 1), dtype=int32)
[[16]]
const1所在的图(Graph)是当前上下文默认的图

4 可视化利器 TesonBoard

人工智能好比黑盒,接收输入,产生输出, TensorBoard的作用就是打开黑盒,看到里面构建的神经网络,可以帮你更好的构建和调参

image.png
image.png
  • 用法
# 在代码中保存TensorFlow日志
tf.summary.FileWrite("日志保存路径", sess.graph)
$  tensorboard --logdir=日志所在路径

符号的含义

image.png

TensorBoard 使用示例

# -*- coding: UTF-8 -*-

import tensorflow as tf

# 用一个线性方程例子
# y = W * x + b

W= tf.Variable(2.0, dtype=tf.float32, name="Weight")  # 权重
b = tf.Variable(1.0, dtype=tf.float32, name="Bias")   # 偏差
x = tf.placeholder(dtype=tf.float32, name="Input")    # 输入

with tf.name_scope("Output"):       # 输出的命名空间
    y = W * x + b

# 定义保存日志的路径
path = "./log"

# 创建用于初始化所有变量(Variable)的操作
init = tf.global_variables_initializer()

# 创建Session(会话)
with tf.Session() as sess:
    sess.run(init)  # 初始化变量
    writer = tf.summary.FileWriter(path, sess.graph)
    result = sess.run(y, {x: 3.0})
    print("y = {}".format(result))

运行以上代码,会在当前目录创建log文件夹,并保存日志
在终端使用如下命令,启动tensorboard服务

tensorboard --logdir=./log

在浏览器输入 : localhost:6006

image.png

5 酷炫模拟游乐园 PlayGround

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

推荐阅读更多精彩内容