概述
深度学习一
- 深度学习
- Tensorflow 1.0框架
- Tensorflow基础
- TensorFlow进阶
- 图
- 会话
- 张量
- 变量
- 可视化
- 实现线性回归
- 模型加载和保存
- 自定义命令行参数
深度学习
- 方向
- 图像理解
- 语音识别
- 自然语言处理
- 机器自主
- 介绍
- 深度神经网络
- 卷积神经网络
- 递归神经网络
- 机器学习和深度学习对比
- 机器学习
- 算法
- 分类:神经网络(简单)
- 回归
- 领域
- 传统的预测问题
- 算法
- 深度学习
- 算法
- 神经网络(深度)
- 图像: 卷积神经网络
- 自然语言处理:循环神经网络
- 领域
- 图像等
- 算法
- 机器学习
- 框架
- caffe
- Tensorflow
- Torch
- Theano
- deeplearning4j
- CNTK
- DSSTNE
Tensorflow 1.0框架
- 特点
- 真正的可移植性
- 多语言支持
- 高度的灵活性与效率
- 支持
- 谷歌支持
- 运行速度
- 数据量大: 特征多(图片)
- 算法: 设计本身比较复杂
- 计算: 比较慢,等待很长时间去优化
- CPU和GPU
- CPU
- 运行操作系统,处理业务 计算能力不是很突出
- GPU
- 专门为计算设计的
- CPU
- 使用GPU
- 只需要添加一行代码
Tensorflow基础
- 2.0中使用1.0代码的方法
import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
- 计算密集型和IO密集型
- 计算密集型
- TensorFlow
- CPU/GPU计算
- IO密集型
- 请求比较密集
- web
- scrapy
- Django
- 请求/磁盘操作
- 计算密集型
TensorFlow进阶
- 前端系统:定义程序
- 后端系统:运算图结构
图
- 图默认已经注册,相当于给程序分配一段内存
- 获取
tf.get_default_graph()
- 创建
tf.Graph()
- op: 只要使用tensorflow的API定义的函数都是op
- tensor:指代的是数据
会话
-
运行图结构
-
分配资源计算
-
掌握资源(变量的资源,队列,线程)
-
tf.Session
- 开启图结构
- 一次只能运行一个图结构
- 有一个参数
graph
:可以指定图的结构
-
sess.run(fetches, feed_dict=None,graph=None)
- 启动整个图
- 两个参数
- fetches:放入一个列表张量/单个张量
- feed_dict:键和值,实时的提供数据训练,之前先创建一个占位符
tf.placeholder()
- 不是op不能运行
- 默认会给运算符重载成op类型
- 当一个普通变量和op类型运算的时候
-
sess.close()
- 释放内存
- 一般直接使用with,上下文管理器管理
-
查看会话在哪里运行
tf.Session(config=tf.ConfigProto(log_device_placement=True))
-
调试的交互式工具
- 交互式中要开启交互式环境
tf.InteractiveSession()
- a.eval() 只要有会话的环境运行
- 交互式中要开启交互式环境
-
Feed操作
- tf.placeholder()
- 输入时不知道多少数据的时候,一个占位符
张量
- 和numpy中的数组相似
- 张量的阶和数据类型
- 一种基本的数据格式
- 一个类型化的N为数组(tf.Tensor)
- 有三个部分 名字(op类型) 张量形状 张量数据类型
- 数据类型
- 一般用
- tf.float32
- tf.int32
- tf.unint8
- tf.string
- tf.bool
- 一般用
- 张量的属性
- graph
- 张量所属的默认图
- op
- 张量的操作名
- name
- 张量字符串描述
- shape
- 张量的形状
- 形状表示
- 0维:()
- 1维:(x) # 一个数字
- 2维:(5,6) #没有固定的会有?
- (?,5)
- 3维:(2,3,4)
- graph
- 形状
- 动态形状
- tf.reshape(张量,改变的形状)
- 创建一个具有不同动态形状的新张量
- 注意元素数量要匹配
- tf.reshape(张量,改变的形状)
- 静态形状(a.set_shape())
- tf.Tensor.get_shape
- 获取静态形状
- tf.Tensor.set_shape([形状])
- 一旦张量形状固定了就不能再次设置静态形状了
- 不能跨纬度修改
- 可以使用动态形状创建一个新的张量
- 更新对象的静态形状
- tf.Tensor.get_shape
- 区别
- 在于有没有生成一个新的张量数据
- 动态形状
- 张量的操作(运算API)
- 生成张量
- 固定值张量
- tf.zeros(shape,类型)
- 全为0的
- tf.ones()
- 全部都为1的
- tf.constant()
- 常数
- tf.zeros(shape,类型)
- 创建随机张量
- tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
- 正态分布随机值
- stddev:标准差
- mean:平均值
- tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
- 固定值张量
- 张量变换
- 类型转换
- tf.cast(a,数据类型)
- 万能的
- tf.cast(a,数据类型)
- 切片的扩展
- tf.concat([a,b],axis=0)
- 按行合并axis=0
- tf.concat([a,b],axis=0)
- 类型转换
- 生成张量
变量
- 创建
- 创建一个初始化后并且要运行初始化才能使用这个变量
- 初始化
tf.global_variables_initializer()
- 定义的变量中一个参数trainable,这个参数是指定这个变量是否跟着梯度下降一起优化
- 作用域
- tf.variable_scope()
- 指定名字变量的作用域
可视化
程序图结构 —> web界面
- 先将程序图结构产生序列化文件
- 产生events事件文件
- tensorboard会将这个events事件传递给web界面
使用:- 使用summary摘要
tf.summary.FileWriter("输出文件的路径",graph=图)
- 显示可视化程序
tensorboard --logdir="路径" --host=127.0.0.1
- 显示:
- “127.0.0.1:6006/”
- 使用summary摘要
实现线性回归
-
准备好特征和目标值
-
建立模型
- 随机初始化准备偏重w 个一个偏置b
- y = y_predict = xw + b
- 使用矩阵相乘
- (m行,n行)*(n行,1) -> (m行,1) + 偏置
- 模型的参数必须用变量定义
-
求损失函数,误差
均方误差 -
梯度下降去优化损失
- 指定学习率
-
API
- 矩阵运算
- tf.matmul(x,w)
- 平方
- tf.square(error)
- 均值
- tf.reduce_mean(error)
- 梯度下降
- tf.train.GradientDescentOptimizer(learning_rate)
- learning_rate:学习率
- method
- minimize(loss)
- return:梯度下降op
- tf.train.GradientDescentOptimizer(learning_rate)
- 矩阵运算
-
训练参数
- 变量中一个参数trainable,在训练中是否更新, True/False
-
学习率
- 不能提太高
-
梯度爆炸/梯度小时
- 权重值非常大,以至于移出到时NaN值
- 解决:
- 重新设计网络
- 调整学习率
- 使用梯度截肢(在训练过程中检查梯度的大小)
- 使用激活函数
-
使用作用域
- 使用作用域后使后台的代码结构更加的清爽,和模型建立更加的清晰,作用分明
-
增加变量显示
- 收集 tensor, 损失
- tf.summary.scalar(“losses”, loss)
- 收集高维度信息
- tf.summary.histogram(“weigths”, weigth)
- 收集 tensor, 损失
模型加载和保存
- 定义一个保存模型的实例
- saver = tf.train.Saver(var_list=None,max_to_keep=5)
- var_list
- 保存还原的变量
- max_to_keep
- 最近几个检查点
- var_list
- saver = tf.train.Saver(var_list=None,max_to_keep=5)
- 保存
- 保存的是sess
- saver.save(sess,路径(包含模型保存的名字))
- 保存的是sess
- 加载
- saver.restore(sess, 路径(包含模型的名字))
自定义命令行参数
- 首先定义有哪些参数(说明),需要在运行的时候指定
- 程序当中获取定义的命令行参数
- 实例
-
第一个参数 名字,默认值, 说明
-
tf.app.flags.DEFINE_integer(“max_step”, 100, “模型训练的步数”)
tf.app.flags.DEFINE_string(“model_dir”,"", “模型的加载路径”) -
定义获取命令行参数的名字
-
FLAGS = tf.app.flags.FLAGS
-
使用:
- python t03_线性回归实现.py --max_step=50 --model_dir="…/file/tf_model/SGD/model"
-
最后
以上就是潇洒向日葵为你收集整理的tensorflow框架使用和线性回归的实现的全部内容,希望文章能够帮你解决tensorflow框架使用和线性回归的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复