一、张量

1、张量的概念

在TensorFlow中,所有的数据都通过张量的形式来表示。从功能的角度,张量可以简单理解为多维数组,零阶张量表示标量(scalar),也就是一个数;一阶张量为向量(vector),也就是一维数组;n阶张量可以理解为一个n维数组。需要注意的是,张量并没有真正保存数字,它保存的是计算过程。

2、张量的属性

以张量Tensor("Add:0", shape=(), dtype=float32) 为例:

(1)名字(Name)

属性的第一项就是名字,一般形式为“node:src_output”,node表示节点名称,src_output 来自节点的第几个输出。

(2)形状(Shape)

属性的第二项是维度,张量的维度可以用三个术语来描述:阶(Rank)、形状(Shape)、维数(Dimension Number)。一般表示形式如表1所示。

形状

维数

例子

0

()

0-D

4

1

(D0)

1-D

[2,3,5]

2

(D0,D1)

2-D

[[2,3],[3,4]]

3

(D0,D1,D2)

3-D

[[[7],[3]],[[2],[4]]]

N

(D0,D1,…,Dn-1)

N-D

形为(D0,D1,…,Dn-1)的张量

表3-1 张量的维度表示

(3)类型(Type)

每一个张量会有一个唯一的类型,TensorFlow在进行运算的时候会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错.

TensorFlow支持14种不同的类型:

实数 tf.float32, tf.float64

整数 tf.int8, tf.int16, tf.int32, tf.int64, tf.uint8

布尔 tf.bool

复数 tf.complex64, tf.complex128

默认类型:不带小数点的数会被默认为int32,带小数点的会被默认为float32。

二、常量与变量

1、常量 Constant

常量指在运行过程中不会改变的值,在TensorFlow中无需进行初始化操作。

创建语句:

Constant_name = tf.constant(value)

常量在TensorFlow中一般被用于设置训练步数、训练步长和训练轮数等超参数,此类参数在程序执行过程中一般不需要被改变,所以一般被设置为常量。

2、变量 Variable

变量是指在运行过程中会改变的值,在TensorFlow中需要进行初始化操作。

创建语句:

name_variable = tf.Variable(value, name)

注意:V是大写字母

个别变量初始化:

init_op = name_variable.initializer()

使用TensorFlow编写一个简单的神经网络一般会用到几十个变量,若编写大型的神经网络,往往会使用到成千上万个变量。若每个变量定义完都要初始化未免太过繁琐,所以TensorFlow有提供所有变量初始化的语句。 所有变量初始化:

init_op = tf.global_variables_initializer()

# 一个简单计算图
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
node3 = tf.add(node1, node2)
print(node3)

# 建立对话并显示运行结果
sess = tf.Session()

print("运行sess.run(node1)的结果:", sess.run(node1))
# 更新变量并返回计算结果
print("运行sess.run(node3)的结果:", sess.run(node3))

# 关闭session
sess.close()

三、会话

# 定义计算图
tens1 = tf.constant([1,2,3])

# 创建一个会话
sess = tf.Session()
try:
#使用这个创建好的会话来得到关心的运算的结果。比如可以调用 sess.run(result)
#来得到张量result的取值
print(sess.run(tens1))
except:
print("Exception!")
finally:
#关闭会话使得本次运行中使用到的资源可以被释放
sess.close()
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
result = tf.add(node1, node2)

#创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
#使用这创建好的会话来计算关心的结果
print(sess.run(result))

# 不需要再调用 Session.close() 函数来关闭会话
# 当上下文退出时会话关闭和资源释放也自动完成了

四、变量的赋值

与传统的编程不同,在TensorFlow中变量定义和初始化后,一般无需人工进行赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值。这部分的内容在后面我们使用TensorFlow实现机器学习的一些算法的时候会更加有体会。

TensorFlow中的变量可以通过设置trainable参数来确定在训练的时候是否更新其值,如前面提到训练轮数一般设置为常量,但如果设置为变量,可以设置trainable=False,同样可以达到程序执行过程中不改变其值的目的。前面提到的训练轮数可以用以下语句进行变量赋值:

epoch = tf.Variable(0,name='epoch',trainable=False)。

但是当TensorFlow中有特殊情况需要对变量进行人工更新,也是可以用变量的更新语句的,例如:

update_op = tf.assign(variable_to_be_updated, new_value)。

import tensorflow as tf

value = tf.Variable(0, name="value")
one = tf.constant(1)
new_value = tf.add(value, one)
update_value = tf.assign(value, new_value)

init = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init)
for _ in range(10):
sess.run(update_value)
print(sess.run(value))

五、占位符

前文提到,TensorFlow中的Variable变量类型,在定义时需要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才由外部输入,比如训练数据,这时候需要用到占位符。

占位符,是TensorFlow中特有的一种数据结构,类似动态变量,函数的参数、或者C语言或者Python语言中格式化输出时的“%”占位符。

TensorFlow中的占位符虽然定义完之后不需要对其值进行初始化,但是需要确定其数据的Type和Shape。占位符的函数接口如下:

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

    1、Feed提交数据

在TensorFlow中如果构建了一个包含placeholder操作的计算图,在程序执行当在session中调用run方法时,placeholder占用的变量必须通过feed_dict参数传递进去,否则报错。图12提供了一个Feed的样例。

    注:多个操作可以通过一次Feed完成执行

    2、 Fetch提取数据

会话运行完成之后,如果我们想查看会话运行的结果,就需要使用fetch来实现,feed、fetch一般搭配起来使用

import tensorflow as tf
a = tf.placeholder(tf.float32, name='a')
b = tf.placeholder(tf.float32, name='b')
c = tf.multiply(a, b, name='c') init = tf.global_variables_initializer() with tf.Session() as sess:
# sess.run(init)
# 通过feed_dict的参数传值,按字典格式
result = sess.run(c, feed_dict={a:10.0, b:3.5}) print(result)
import tensorflow as tf
a = tf.placeholder(tf.float32, name='a')
b = tf.placeholder(tf.float32, name='b')
c = tf.multiply(a, b, name='c')
d = tf.subtract(a, b, name='d')
with tf.Session() as sess:
#返回的两个值分别赋给两个变量
rc,rd = sess.run([c,d], feed_dict={a:[8.0,2.0,3.5], b:[1.5,2.0,4.]})
print("value of c=",rc,"value of d=",rd)

六、tensorboard可视化

1、 在TensorBoard中查看图结构

图3-15 在TensorBoard中查看图结构

上图代码中的Logdir指定的目录为运行后产生日志文件的目录,如图16所示我们可以打开文件管理器进行查看。

图 3-16 日志目录

2、启动TensorBoard

TensorBoard不需要额外安装,在TensorFlow安装时已自动完成,在Anaconda Prompt中先进入日志存放的目录(注:非常重要),再运行TensorBoard,并将日志的地址指向程序日志输出的地址。

命令:tensorboard --logdir=/path/log (/path/log为产生日志文件的目录)

启动服务的端口默认为6006;使用 --port 参数可以改编启动服务的端口。

TensorBoard是一个在本地启动的服务,启动完成后在浏览器网址:http://localhost:6006即可进行访问。

3、TensorBoard常用API

API

描述

tf.summary.FileWrite()

创建FileWriter和事件文件,会在logdir中创建一个新的事件文件

tf.summary.FileWriter.add_summary()

将摘要添加到事件文件

tf.summary.FileWriter.add_event()

向事件文件添加一个事件

tf.summary.FileWriter.add_graph()

向事件文件添加一个图

tf.summary.FileWriter.get_logdir()

获取事件文件的路径

tf.summary.FileWriter.flush()

将所有事件都写入磁盘

tf.summary.FileWriter.close()

将事件写入磁盘,并关闭文件操作符

tf.summary.scalar()

输出包含单个标量值的摘要

tf.summary.histogram()

输出包含直方图的摘要

tf.summary.audio()

输出包含音频的摘要

tf.summary.image()

输出包含图片的摘要

tf.summary.merge()

合并摘要,包含所有输入摘要的值

表3-2 TensorBoard常用API

import tensorflow as tf
#清除default graph和不断增加的节点
tf.reset_default_graph() # logdir改为自己机器上的合适路径
logdir='D:/log' #定义一个简单的计算图,实现向量加法的操作
input1 = tf.constant([1.0, 2.0, 3.0], name="input1")
input2 = tf.Variable(tf.random_uniform([3]), name="input2")
output = tf.add_n([input1, input2], name="add") #生成一个写日志的writer,并将当前的TensorFlow计算图写入日志。
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()

tensorflow(一):基础的更多相关文章

  1. 第六节,TensorFlow编程基础案例-保存和恢复模型(中)

    在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...

  2. 第五节,TensorFlow编程基础案例-session使用(上)

    在第一节中我们已经介绍了一些TensorFlow的编程技巧;第一节,TensorFlow基本用法,但是内容过于偏少,对于TensorFlow的讲解并不多,这一节对之前的内容进行补充,并更加深入了解讲解 ...

  3. 第七节,TensorFlow编程基础案例-TensorBoard以及常用函数、共享变量、图操作(下)

    这一节主要来介绍TesorFlow的可视化工具TensorBoard,以及TensorFlow基础类型定义.函数操作,后面又介绍到了共享变量和图操作. 一 TesnorBoard可视化操作 Tenso ...

  4. TensorFlow使用基础-Tensor

    使用 TensorFlow 之前你需要了解关于 TensorFlow 的以下基础知识 :• 使用图 (graphs) 来表示计算 .• 在会话 ( Session ) 中执行图 .• 使用张量 (te ...

  5. Tensorflow编程基础之Mnist手写识别实验+关于cross_entropy的理解

    好久没有静下心来写点东西了,最近好像又回到了高中时候的状态,休息不好,无法全心学习,恶性循环,现在终于调整的好一点了,听着纯音乐突然非常伤感,那些曾经快乐的大学时光啊,突然又慢慢的一下子出现在了眼前, ...

  6. TensorFlow——tensorflow编程基础

    0.tensorflow中的模型运行基础 tensorflow的运行机制属于定义和运行相分离,在操作层面可以抽象成两种:模型构建和模型运行. 在模型构建中的常见概念: 张量(tensor):数据,即某 ...

  7. tensorflow(1) 基础: 神经网络基本框架

    1.tensorflow 的计算得到的是计算图graph import tensorflow as tf a=tf.constant([1.0,2.0]) b=tf.constant([3.0,4.0 ...

  8. python_Tensorflow学习(三):TensorFlow学习基础

    一.矩阵的基本操作 import tensorflow as tf   # 1.1矩阵操作 sess = tf.InteractiveSession() x = tf.ones([2, 3], &qu ...

  9. Tensorflow的基础用法

    简介 Tensorflow是一个深度学习框架,它使用图(graph)来表示计算任务,使用tensor(张量)表示数据,图中的节点称为OP,在一个会话(Session)的上下文中执行运算,最终产生ten ...

  10. TensorFlow 编程基础

    1.TensorFlow 安装:https://www.cnblogs.com/pam-sh/p/12239387.html https://www.cnblogs.com/pam-sh/p/1224 ...

随机推荐

  1. 企业网站SEO如何选择关键词

    http://www.wocaoseo.com/thread-17-1-1.html       企业网站的关键词应该如何去选择?有很多的企业老板在网上某某企业在网上做了一个网站,一天盈利多少后,觉得 ...

  2. 什么类型网站不利于seo优化

    http://www.wocaoseo.com/thread-3-1-1.html     什么样的网站不利于优化?如何让别人找到你的产品或者服务?很多人以为只要做个网站放在网上就行,但是后来发现,网 ...

  3. 模拟IIC总线多设备挂载(12864OLED屏幕+GY30光照传感器)

    最终效果展示 OLED屏幕和GY30光照传感器(BH1750FVI)都连接在一个IIC(I2C)总线上,所以只需要接4根线即可.获取到的光照强度可以在OLED上实时显示并通过串口打印.IIC是IO模拟 ...

  4. 【Go语言入门系列】(七)如何使用Go的方法?

    [Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...

  5. Android开发禁止首次进入activity弹出软键盘,限制屏幕只能竖屏或者横屏展示

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 只需在在Manifest.xml中设定activity的属性为: android:windowSoft ...

  6. 关于SpringBoot集成JDBCTemplate的RowMapper问题

    JdbcTemplate 是Spring提供的一套JDBC模板框架,利用AOP 技术来解决直接使用JDBC时大量重复代码的问题.JdbcTemplate虽然没有MyBatis 那么灵活,但是直接使用J ...

  7. Fitness - 07.23 - Congratulation!

    倒计时161天 运动54分钟,共计5组半,5.8公里.拉伸5分钟. 每组跑步10分钟(6.5KM/h),走路1分钟(5.5KM/h). 终于突破了耐力跑的一天,可喜可贺! 差一点就到6公里了,觉得自己 ...

  8. 在一张id连续的表中找出缺失的id

    有这样一张表: create table tb_lostid( id number(6,0) primary key not null, name nvarchar2(20) not null ) 可 ...

  9. 开发一个渐进式Web应用程序(PWA)前都需要了解什么?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/how-to-build-a-progres ...

  10. python格式化输出当前时间

    import time def get_now_time(): now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.tim ...