挺长的~超出估计值了~预计阅读时间20分钟。

从helloworld开始

mkdir 1.helloworld

cd 1.helloworldvim

helloworld.py

代码:

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

# 引入 TensorFlow 库

import tensorflow as tf

# 设置了gpu加速提示信息太多了,设置日志等级屏蔽一些

import os

os.environ['TF_CPP_MIN_LOG_LEVEL']='3'

# 创建一个常量 Operation (操作)

hw = tf.constant("Hello World! Mtianyan love TensorFlow!")

# 启动一个 TensorFlow 的 Session (会话)

sess = tf.Session()

# 运行 Graph (计算图)

print (sess.run(hw))

# 关闭 Session(会话)

sess.close()

TensorFlow的编程模式

mark

命令式编程

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

mark

符号式编程

涉及较多的嵌入和优化,运行速度有同比提升

mark

计算流图。c和d是可以共用内存的。有一定优化。

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

# 引入 TensorFlow 库

import tensorflow as tf

# 设置了gpu加速提示信息太多了,设置日志等级屏蔽一些

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'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))

mark

TensorFlow的计算流图,符号式编程的范式。有节点有边,边是计算结果在节点中流动。

TensorFlow的基础结构

Tensor 在 计算流图中流动(flow)

mark

这张图简化一下,取其中一部分。

mark

边就是Tensor(张量)在流动

mark

节点就是一个operation操作,数学计算或后面的激励函数等的操作。

节点的输入与输出都是Tensor张量。

边和节点共同构成了Graph 也就是数据流图。

数据流图会被放进session会话中进行运行。会话可以在不同的设备上去运行,比如cpu和GPU。

图的基本构成

数据流图:

  • Tensor (张量) 边里流动的数据

  • Operation(操作)

mark

Tensor 会作为operation的输入,operation输出的依然是Tensor。

TensorFlow的基础模型

数据模型  - Tensor(张量)

张量是TensorFlow中最重要的结构。

计算模型 - Graph(图)

运行模型 - Session(会话)

mark

图与会话

mark

计算流图,也是TensorFlow的基本架构,表明了图正在运行的状态。

黑色的线不断流动, 其中流动的就是Tensor,一个一个的节点就是它的操作。

数据流图的结构

mark

mark

烧杯中进行的化学反应就是操作,其中流动的就是张量。

mark

什么是会话

火狐打开一个浏览器就是打开了一个会话。

mark

使用x,y,z三行构建了一个图,构建了一个实验仪器。

TensorFlow使用了客户端和服务端的经典架构。

客户端是我们编写的程序,程序请求服务端(C++)的运行时。

创建一个会话,使用会话中的run方法。

session的作用

静态的图。数据流图。如何让某一部分动起来?需要点燃酒精灯。

mark

要让这一部分运行起来。就得run

mark

TensorFlow程序的流程

  1. 定义算法的计算图(Graph)的结构 静态

  2. 使用会话(Session) 执行计算

Python常用库numpy

TensorFlow和numpy有一定联系,有很多类似的概念和api

介绍Tensor时,有很多api名称很相似

numpy官网,科学计算。n阶数组对象。

numpy速度是非常快的,比原生快很多。

因为numpy的许多函数是用c语言来实现的。还使用了一些优化,甚至比你自己用c实现快很多.

scipy 是一个开源软件。Matplotlib。pandas。jupyter notebook

numpy的操作对象是一个多维的数组。类似Tensor

ndarray ndim shape size dtype(同一类型元素).

import numpy as np
vector = np.array([1,2,3])
vector.shape
vector.size
vector.ndim
type(vector)# 创建二维数组(矩阵)matrix = np.array([[1, 2],[3, 4]])
matrix.shape
matrix.size
matrix.ndim

type(matrix)

对于矩阵进行转置

one = np.arange(12)# 0 - 11one.reshape((3,4))
two = one.reshape((3,4))

two.shape
two.size

two.ndim

什么是Tensor(张量)

不断流动的东西就是张量。节点就是operation计算:

mark

TensorFlow里的数据都是Tensor,所以它可以说是一个张量的流图

mark

张量的维度(秩):rank/order dimension

mark

维度是0的话,是一个标量(Scalar)

vector & Matrix

numpy中的基础要素就是array,和Tensor 差不多的一种表述。

import numpy as np
zeros = np.zeros((3,4))
zeros

ones = np.ones((5,6))

ones# 对角矩阵: 必须是一个方阵.对角线是1,其他都是0的方阵ident = np.eye(4)

mark

一个张量里面的元素类型都是一样的。

mark

Tensor的属性

因为一个tensor 只能包含一种数据类型。dtype

TensorFlow.datatype list

https://www.tensorflow.org/api_docs/python/tf/DType

mark

TensorFlow数据类型有很多。

其他属性:

https://www.baohuayule.com /api_docs/python/tf/Tensor

可以通过搜索Tensor 查看到它的其他属性。

A Tensor是一个输出的符号句柄 Operation。它不包含该操作输出的值,而是提供了在TensorFlow中计算这些值的方法tf.Session。

device,在哪个设备上被计算出来的。

Graph 这个Tensor 所属的一个图;name 是我们可以给张量起的名字;op 是产生这个Tensor 的一个操作。

几种Tensor

  • Constant

  • Variable

  • Placeholder

  • SparseTensor

constant(常量)

值不能改变的一种Tensor

但取这个Tensor值有可能还是会变

定义在tf.constant类

tf.constant(
   value,
   dtype=None,
   shape=None,
   name='Const',

verify_shape=False)

数值:标量,向量,矩阵;verify_shape 验证形状

官网例子:

# Constant 1-D Tensor populated with value list.

tensor = tf.constant([www.feifanyule.cn1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]

# Constant 2-D tensor populated with scalar value -1.

tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.]

[-1. -1. -1.]]

我们的代码

const = tf.constant(3)
const

# 输出const:0 shape=() dtype=int32

run之后才能得到具体的数。与普通的变量常量是不一样的。

variable变量

值可以改变的一种tensor

定义在tf.Variable. 注意这个v是大写的,和constant是不一样的。

属性: initial_value

__init__www.cnzhaotai.com(
   initial_value=None,
   trainable=True,
   collections=None,
   validate_shape=True,
   caching_device=None,
   name=None,
   variable_def=None,
   dtype=None,
   expected_shape=None,
   import_scope=None,

constraint=None)

定义一个变量的张量。

var = tf.Variable(3)

var

# 不会输出真实值,只会输出数据类型等特征量

我们可以在创建变量的时候指定好它的数据类型

var1 = tf.Variable(4, dtype=tf.int64)
var1# 默认系统给的变量名会自动递增

PlaceHolder(占位符)

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

mark

例子: 图书馆占座

tf.placeholder

https://www.tensorflow.org/api_docs/python/tf/placeholder

tf.placeholder(
   dtype,
   shape=None,

name=None)

属性少。没有值。形状。赋值的机制用到了python中字典的机制

x = tf.placeholder(tf.float32, shape=(1024, 1024))

y = tf.matmul(x,www.thd178.com/   x)

with tf.Session(www.120xh.cn ) as sess:

print(sess.run(y))  # ERROR: will fail because xwww.tkcyl1.com/  was not fed.

rand_array = np.random.rand(1024, 1024)

print(sess.run(y, feed_dict={x: www.yongshiyule.cn rand_array}))  # Will succeed.

feed_dict 真正运行时才通过feed_dict关键字以字典形式向里面传值。

sparse Tensor(稀疏张量)

一种"稀疏"的Tensor,类似线性代数里面的稀疏矩阵的概念

tf.SparseTensor

在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。 定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。

定义稀疏矩阵,只需要定义非0的数,其他为0的数会自动的填充。

SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])

指定坐标,对应坐标的值,以及它的形状。

[[1, 0, 0, 0]
[0, 0, 2, 0]

[0, 0, 0, 0]]

Tensor表示法

Tensor("MUL:0", shape=(www.leyouzaixan.cn ),dtype=float32)

类型 : tf.Variable
名字: MUL
0表示索引

你是operation产生的第几个张量

shape 就是形状 dtype 数据类型

定义一个有名字的Variable

named_var = tf.Variable([5,6], name="named_var")

named_var

自动生成的会以数据类型为名字。

图和会话原理及案例

Graph(图)的形象比喻

mark

每个节点可以想象成一个仪器,在对我们的实验品进行操作。

mark

仪器中被操作,以及在各个仪器中流动的是tensor。

TensorFlow程序的流程

  1. 定义算法的计算图(Graph)结构

把实验的器材等组装好

  1. 使用会话(Session)执行图的一部分(计算)

开始点燃酒精灯等操作

Graph tf.Graph

https://www.tensorflow.org/api_docs/python/tf/Graph

如果你没有显式的去创建图,它其实已经帮你注册了一个默认的图。

默认Graph总是已注册,并可通过调用访问 tf.get_default_graph。

mark

没有输出值是因为我们还没有用会话运行这一部分。

创建sess对象

我们可以看一下Session这个类

https://www.tensorflow.org/api_docs/python/tf/Session

一个Session对象封装了Operation 执行对象的环境,并对Tensor对象进行评估。例如:

OPeration是图上的节点,输入张量,产生张量。

mark

run(
   fetches,
   feed_dict=None,
   options=None,

run_metadata=None

)

mark

run返回的结果就是一个张量。

>>> tf.get_default_graph()
<tensorflow.python.framework.ops.Graph object at 0x000001EC0C5EE160>
>>> if c.graph is tf.get_default_graph():...     print("The Graph of c is the default graph")
...

The Graph of c is the default graph

可以看到c所属的图确实是默认图。

程序小例子

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

# 引入

tensorflowimport tensorflow as tf

# 设置了gpu加速提示信息太多了,设置日志等级屏蔽一些

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

# 创建两个常量 Tensor.第一个为1行2列,第二个为二行一列。

# 也就是矩阵乘法必须满足,列等于行。

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

# 矩阵乘法运算matrix mul tf.add()

multiple = tf.matmul(const1, const2)

# 尝试用print输出multiple的值, 不会输出真实值。因为没运行

print(multiple)

# 创建了 Session (会话) 对象

sess = tf.Session()

# 用Session的run方法来实际运行multiple这个矩阵乘法操作

# 并把操作执行的结果赋值给

resultresult = sess.run(multiple)

# 用print打印矩阵乘法的结果

print(result)

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

# 关闭已用完的Session(会话)

sess.close()

# 第二种方法来创建和关闭Session,更安全

with tf.Session() as sess:
   result2 = sess.run(multiple)

print("Multiple的结果是 %s " % result2)

mark

用显示的close和with上下文管理器两种方式实现.

可视化利器Tensorboard

展示构建的计算图和节点等信息在浏览器里。

人工智能的黑盒

mark

mark

输入手写4等相关4的图片。输出这是4

mark

输入狗狗图片,输出可能是狗狗

mark

输入历史的股票曲线,预测出未来这一年的市值。

Tensorboard的作用

mark

打开黑盒,照亮。方便调参等操作。

节点和操作。

上层节点可以打开,看到下层节点。

之后可能会加入debug功能,目前还只是一种展示。

用TensorFlow保存图的信息到日志中

# 第一个参数为指定的保存路径,第二个参数为要保存的图

tf.summary.FileWriter("日志保存路径", sess.graph)

https://www.tensorflow.org/api_docs/python/tf/summary?hl=zh-cn

注意我们这里的summary是小写的summary。

张量摘要用于导出关于模型的信息。

官网的develop 中的get Started 里面有关于TensorBoard的信息。

开源的github源代码。

使用Tensorboard读取并展示日志
tensorboard --logdir=日志所在路径

Tensorflow安装之后,会默认安装有TensorBoard

summary(总结,概览)

上一节的代码中自行添加一行

# 第一个参数为指定的保存路径,第二个参数为要保存的图

tf.summary.FileWriter("./", sess.graph)

  • 用于导出关于模型的精简信息的方法

  • 可以使用TensorBoard等工具访问这些信息

打开浏览器会有一系列菜单。

mark

6006端口打开。

TensorFlow应用实战 | TensorFlow基础知识的更多相关文章

  1. 微信小程序入门到实战(1)-基础知识

    1.微信小程序介绍 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. 1.1. 为什么是微信 ...

  2. 实战nginx 基础知识总结(一)1.1

    squid Squid是一个缓存Internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后S ...

  3. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  4. TensorFlow 基础知识

    参考资料: 深度学习笔记目录 向机器智能的TensorFlow实践 TensorFlow机器学习实战指南 Nick的博客 TensorFlow 采用数据流图进行数值计算.节点代表计算图中的数学操作,计 ...

  5. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

  6. Tensorflow基础知识

    基本知识 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  7. Reading | 《TensorFlow:实战Google深度学习框架》

    目录 三.TensorFlow入门 1. TensorFlow计算模型--计算图 I. 计算图的概念 II. 计算图的使用 2.TensorFlow数据类型--张量 I. 张量的概念 II. 张量的使 ...

  8. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  9. FaceRank,最有趣的 TensorFlow 入门实战项目

    FaceRank,最有趣的 TensorFlow 入门实战项目 TensorFlow 从观望到入门! https://github.com/fendouai/FaceRank 最有趣? 机器学习是不是 ...

随机推荐

  1. 基于asp.net MVC 的服务器和客户端的交互(一)

    架构思想 三层架构 提出了一种基于ASP.NET开发方式的三层架构的Web应用系统构造思想.其基本内容是:将面向对象的UML建模与Web应用系统开发 相结合,将整个系统分成适合ASP.NET开发方式的 ...

  2. tcl之string操作-length/index/range/replace

  3. POJ :3614-Sunscreen

    传送门:http://poj.org/problem?id=3614 Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...

  4. 1,Python常用库之一:Numpy

    Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! Numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,Numpy的速度比Python列表的速度 ...

  5. Android onConfigurationChanged 收不到回调

    我返现,90度横屏 旋转到270度横屏onConfigurationChanged 是收不到回掉的.尽管清单里面声明了什么: android:configChanges="orientati ...

  6. JavaScript 仿ios滑动选择器

    从git上找了一个,不过不是我想要的,更改了许多.到了我想要的效果: roller_selector_0_9.js 首先上js: "use strict"; /* * Author ...

  7. Div处理滚动条问题

    1,用div做容器现在已经十分普遍,下面是最基本的代码 <div style="width:50px;height:50px;background-color:blue"&g ...

  8. CSS的z-index & 绝对定位与相对定位

    1.在有些情况下,需要仔细地控制元素在网页中堆叠顺序.z-index样式属性让你能够设置元素的堆叠顺序. 堆叠元素时,z-index值较大的元素在z-index值较小的下面. 2.z-index值仅在 ...

  9. Eclipse 修改字符集---Eclipse教程第02课

    默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: 在菜单栏选择 Window ...

  10. JQuery方法总结

    JQuery方法总结 Dom: Attribute:(属性) $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img"). ...