TensorFlow 1.8学习记录

一、安装

cpu版:

conda install tensorflow==1.8 -i https://mirrors.aliyun.com/pypi/simple

https://www.cnblogs.com/liuhuacai/p/11684666.html
安装 cudatoolkit10.0.130 cudnn7.6.5
更新numpy: install numpy==1.16.0

二、框架介绍

2.1 TF数据流图

构建图阶段:

图:tensorflow将计算表示为指令之间的依赖关系
可以理解为流程图,定义了数据(张量Tensor)和操作(节点Op)

执行图阶段

会话:跨一个或多个本地或远程设备运行数据流图的机制
让之前定义好的数据和操作运行

节点:提供图当中执行的操作

2.2 图与TensorBoard

2.2.1 什么是图结构

图结构:数据(Tensor)+操作(Operation)

2.2.2 图相关操作

1. 默认图

通常TensorFlow会默认帮助创建一张图

  1. 调用方法
tf.get_default_graph()
  1. 查看属性
.gragh

2.创建图

new_g = tf.graph()
with new_g.as_default():
	定义数据和操作

2.2.3 TensorBoard:可视化学习

1.数据序列化-events文件

将图数据序列化后写入到文件中

tf.summary.FileWriter(path, graph=sess.graph)

2.启动TensorBoard

tensorboard --logdir="./tmp/summary"

127.0.0.1:6006

2.2.4 OP

数据:Tensor对象
操作:Operation对象 - OP

1 常见OP

在这里插入图片描述

扫描二维码关注公众号,回复: 12555407 查看本文章
操作函数 操作对象
tf.constant(Tensor对象) 输入Tensor对象 - Const - 输出 Tensor对象
tf.add(Tensor对象1, Tensor对象2) 输入Tensor对象1,Tensor对象2 - Add对象 - 输出 Tensor对象3

在调用操作函数的过程中会生成操作对象
一个操作对象(Operation)是TensorFlow图中的一个节点,可以接受0个或者多个输入Tensor,并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。
在这里插入图片描述

2 指令名称

一张图一个命名空间

2.3 会话

2.3.1 会话

tf.Session:用于完整的程序当中
tf.InteractiveSession:用于交互式上下文中的TensorFlow,例如shell

1 init(target=’’, graph=None, config=None)

会话是拥有资源的对象,如tf.Variable,tf.QueueBase和tf.ReaderBase。当这些资源不再需要时,必须要释放这些资源。tf.Session.close 使用上下文管理器
target:用于指定TensorFlow服务器的地址
config:可通过tf.ConfigProto打印设备使用信息(操作都运行在哪个设备上)

2 会话的run()

run(fetches,feed_dict=None,options=None,run_metadata=None)
fetches:单一的operation,或者列表、元祖(其它不属于tensorflow的类型不行)

a = tf.constant(5.0)
b = tf,cibstabt(6.0)
c = a * b

# 创建会话
sess = tf.Session()

# 计算C的值
print(sess.run(c))
print(c.eval(session=sess))

feed_dict:与tf.placeholder搭配使用,检查值得形状是否与占位符兼容 。placeholder提供占位符,run时通过feed_dict指定参数
使用场景:在定义张量时不确定具体值(可理解为张量类型的变量)

运行时报的错误error:
RuntimeError: Session是无效状态(如已关闭)
TypeError: fetches或者feed_dict键的类型不合适
ValueError: fetches或feed_dict键无效或引用Tensor不存在的键。

2.4 张量

TensorFlow的张量就是一个n维数组,类型为tf.Tensor。有两个重要属性:type:数据类型,shape:形状(阶)

2.4.1 张量

标量 一个数字
向量 一维数组 [2,3,4]
矩阵 二维数组 [[2,3,4],[2,3,4]]
。。。。 。。。。
张量 n维数组

1 张量的类型

在这里插入图片描述

2 张量的阶

在这里插入图片描述

2.4.2 创建张量的指令

固定值张量

tf.zeros(shape, dtype=tf.float32, name=None)
tf.ones(shape, dtype=tf.float32, name=None)
tf.constant(shape, dtype=tf.float32, name=None)
# tf.ones(shape=[3, 4])
.eval()

####随机值张量

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32)
# mean:均值   stddev:标准差

2.4.3 张量的变换

ndarray属性的修改:
类型的修改:1)ndarray.astype(type) 2)ndarray.tostring()
形状的修改:1)ndarray.reshape(shape) -1自动计算形状 返回新数组 2)ndarray.resize(shape) 直接修改原来的数组

1 类型改变

tf.cast(tensor, dtype, name=None)
不会改变原始的tensor,返回新的改变类型后的tensor

2 形状改变

静态形状 - 开始创建张量时的形状
1)如何改变静态形状
只有在形状没有完全固定下来的情况下才能改变、更新静态形状
tensor.set_shape(shape)
2) 如何改变动态形状(可改变阶数)
tf.reshape(tensor, shape)
不会改变原始的tensor,返回新的改变类型后的tensor
必须保证张量的元素个数必须匹配(如:2,3改为3,2)

2.4.4 张量的数学运算

算术运算符
基本数学函数
矩阵运算
reduce 操作
序列索引操作

2.5 变量OP

TensorFlow里特有的 - 变量,特点:存储持久化、可修改值、可指定被训练
可以理解为是为存储模型参数设计的

2.5.1 创建变量

tf.Variable(initial_value=None, trainable=True, collections=None,name=None)
initial_value:初始化的值
trainable:是否被训练
注:变量需要显式初始化,才能运行值

2.5.2 使用tf.variable_scope()修改变量的命名空间

使结构更加清晰

2.6 高级API

2.6.1 基础API

1 tf.app

为TensorFlow运行的脚本提供一个main函数入口

2 tf.image

3 tf.gfile

4 tf.summary

用于生成TensorFlow可用的统计日志,目前主要提供了4种类型:audio, image, histogram, scalar

2 tf.python_io

2 tf.train

2 tf.nn

提供了一些构建神经网络的底层函数。TensorFlow构建网络的核心模块。其中包含了添加各种层的函数,如添加卷积层、池化层等。

2.6.2 高级API

2 tf.keras

2 tf.layers

2 tf.contrib

2 tf.estimator

在这里插入图片描述

2.7 案例:线性回归

2.7.1 原理

1)构建模型
2)构造损失函数 均方误差
3)优化损失 梯度下降

2.7.2 案例实现

1 案例确定

100样本

2 API

矩阵乘 tf.matmul(x, w)
平方tf.square(error)
均值 tf.reduce_mean(eooro)
梯度下降优化 tf.train.GradientDescentOptimizer(learning_rate)

5 学习率的设置、步数的设置与梯度爆炸

梯度爆炸:在极端情况下,权重的值变得非常大,以至于溢出,导致NaN值

6 变量的trainable设置观察

指定变量是否训练

2.7.3 增加其他功能

1 TensorBoard增加变量显示

1、收集变量
tf.summary.scalar(name="",tensor) 标量
tf.summary.histogram(name=’’,tensor)收集高维度的变量参数
tf.summary.image(name=’’,tensor)图片
2、合并变量写入事件文件
merged = tf.summary.merge_all()
运行合并:summary=sess.run(merged),每次迭代都需运行
添加:FileWriter.add_summary(summary, i) i表示第几次的值

  1. 创建事件文件
  2. 收集变量
  3. 合并变量
  4. 每次迭代运行一次合并变量
  5. 每次迭代将summary对象写入事件文件

2 增加命名空间

3 模型的保存与加载

tf.train.Saver(var_list=None, max_to_keep=5)
var_list:指定将要保存和还原的变量。
max_to_keep:指示要保留的最近检查点文件的最大数量。
1)实例化Saver
2)保存
saver.save(sess, path)
3)加载
saver.restore(sess, path)

4 命令行参数使用

1、tf.app.flags
支持应用从命令行接受参数,可以用来指定集群配置等。
tf.app.flags.DEFINE_integer(“max_step”, 0, “训练模型的步数”) 参数名,默认值,变量说明
tf.app.flags.DEFINE_string(“model_dir”, “”, “模型保存的路径+模型名字”)
2、FLAGS = tf.app.flags.FLAGS
通过FLAGS.max_step调用命令行中传过来的参数
3、通过tf.app.run()启动main(argv)函数

猜你喜欢

转载自blog.csdn.net/Saker__/article/details/107486474
今日推荐