我是靠谱客的博主 潇洒向日葵,最近开发中收集的这篇文章主要介绍tensorflow框架使用和线性回归的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

深度学习一

    • 深度学习
      • Tensorflow 1.0框架
        • Tensorflow基础
      • TensorFlow进阶
        • 会话
        • 张量
        • 变量
        • 可视化
        • 实现线性回归
        • 模型加载和保存
        • 自定义命令行参数

深度学习

  1. 方向
    • 图像理解
    • 语音识别
    • 自然语言处理
    • 机器自主
  2. 介绍
    • 深度神经网络
    • 卷积神经网络
    • 递归神经网络
  3. 机器学习和深度学习对比
    • 机器学习
      1. 算法
        • 分类:神经网络(简单)
        • 回归
      2. 领域
        • 传统的预测问题
    • 深度学习
      1. 算法
        • 神经网络(深度)
        • 图像: 卷积神经网络
        • 自然语言处理:循环神经网络
      2. 领域
        • 图像等
  4. 框架
    • caffe
    • Tensorflow
    • Torch
    • Theano
    • deeplearning4j
    • CNTK
    • DSSTNE

Tensorflow 1.0框架

  1. 特点
    • 真正的可移植性
    • 多语言支持
    • 高度的灵活性与效率
    • 支持
      • 谷歌支持
  2. 运行速度
    • 数据量大: 特征多(图片)
    • 算法: 设计本身比较复杂
    • 计算: 比较慢,等待很长时间去优化
  3. CPU和GPU
    • CPU
      • 运行操作系统,处理业务 计算能力不是很突出
    • GPU
      • 专门为计算设计的
  4. 使用GPU
    • 只需要添加一行代码
Tensorflow基础
  1. 2.0中使用1.0代码的方法
    import tensorflow.compat.v1 as tf
    tf.disable_v2_behavior()
    
  2. 计算密集型和IO密集型
    • 计算密集型
      • TensorFlow
      • CPU/GPU计算
    • IO密集型
      • 请求比较密集
      • web
      • scrapy
      • Django
      • 请求/磁盘操作

TensorFlow进阶

  • 前端系统:定义程序
  • 后端系统:运算图结构
  1. 图默认已经注册,相当于给程序分配一段内存
  2. 获取
    • tf.get_default_graph()
  3. 创建
    • tf.Graph()
  4. op: 只要使用tensorflow的API定义的函数都是op
  5. tensor:指代的是数据
会话
  1. 运行图结构

  2. 分配资源计算

  3. 掌握资源(变量的资源,队列,线程)

  4. tf.Session

    • 开启图结构
    • 一次只能运行一个图结构
    • 有一个参数graph:可以指定图的结构
  5. sess.run(fetches, feed_dict=None,graph=None)

    • 启动整个图
    • 两个参数
      • fetches:放入一个列表张量/单个张量
      • feed_dict:键和值,实时的提供数据训练,之前先创建一个占位符tf.placeholder()
    • 不是op不能运行
    • 默认会给运算符重载成op类型
      • 当一个普通变量和op类型运算的时候
  6. sess.close()

    • 释放内存
    • 一般直接使用with,上下文管理器管理
  7. 查看会话在哪里运行

    • tf.Session(config=tf.ConfigProto(log_device_placement=True))
  8. 调试的交互式工具

    • 交互式中要开启交互式环境
      • tf.InteractiveSession()
    • a.eval() 只要有会话的环境运行
  9. Feed操作

    • tf.placeholder()
    • 输入时不知道多少数据的时候,一个占位符
张量
  • 和numpy中的数组相似
  1. 张量的阶和数据类型
    • 一种基本的数据格式
    • 一个类型化的N为数组(tf.Tensor)
    • 有三个部分 名字(op类型) 张量形状 张量数据类型
    • 数据类型
      • 一般用
        • tf.float32
        • tf.int32
        • tf.unint8
        • tf.string
        • tf.bool
  2. 张量的属性
    • graph
      • 张量所属的默认图
    • op
      • 张量的操作名
    • name
      • 张量字符串描述
    • shape
      • 张量的形状
      • 形状表示
        • 0维:()
        • 1维:(x) # 一个数字
        • 2维:(5,6) #没有固定的会有?
          • (?,5)
        • 3维:(2,3,4)
  3. 形状
    • 动态形状
      • tf.reshape(张量,改变的形状)
        • 创建一个具有不同动态形状的新张量
      • 注意元素数量要匹配
    • 静态形状(a.set_shape())
      • tf.Tensor.get_shape
        • 获取静态形状
      • tf.Tensor.set_shape([形状])
      • 一旦张量形状固定了就不能再次设置静态形状了
      • 不能跨纬度修改
      • 可以使用动态形状创建一个新的张量
        • 更新对象的静态形状
    • 区别
      • 在于有没有生成一个新的张量数据
  4. 张量的操作(运算API)
    1. 生成张量
      • 固定值张量
        1. tf.zeros(shape,类型)
          • 全为0的
        2. tf.ones()
          • 全部都为1的
        3. tf.constant()
          • 常数
      • 创建随机张量
        • tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
          • 正态分布随机值
          • stddev:标准差
          • mean:平均值
    2. 张量变换
      • 类型转换
        • tf.cast(a,数据类型)
          • 万能的
      • 切片的扩展
        • tf.concat([a,b],axis=0)
          • 按行合并axis=0
变量
  1. 创建
    • 创建一个初始化后并且要运行初始化才能使用这个变量
  2. 初始化
    • tf.global_variables_initializer()
    • 定义的变量中一个参数trainable,这个参数是指定这个变量是否跟着梯度下降一起优化
  3. 作用域
    • tf.variable_scope()
    • 指定名字变量的作用域
可视化

程序图结构 —> web界面

  1. 先将程序图结构产生序列化文件
  2. 产生events事件文件
  3. tensorboard会将这个events事件传递给web界面
    使用:
    1. 使用summary摘要
      • tf.summary.FileWriter("输出文件的路径",graph=图)
    2. 显示可视化程序
      • tensorboard --logdir="路径" --host=127.0.0.1
    3. 显示:
      • “127.0.0.1:6006/”
实现线性回归
  1. 准备好特征和目标值

  2. 建立模型

    • 随机初始化准备偏重w 个一个偏置b
    • y = y_predict = xw + b
      • 使用矩阵相乘
      • (m行,n行)*(n行,1) -> (m行,1) + 偏置
      • 模型的参数必须用变量定义
  3. 求损失函数,误差
    均方误差

  4. 梯度下降去优化损失

    • 指定学习率
  5. API

    • 矩阵运算
      • tf.matmul(x,w)
    • 平方
      • tf.square(error)
    • 均值
      • tf.reduce_mean(error)
    • 梯度下降
      • tf.train.GradientDescentOptimizer(learning_rate)
        • learning_rate:学习率
        • method
        • minimize(loss)
        • return:梯度下降op
  6. 训练参数

    • 变量中一个参数trainable,在训练中是否更新, True/False
  7. 学习率

    • 不能提太高
  8. 梯度爆炸/梯度小时

    • 权重值非常大,以至于移出到时NaN值
    • 解决:
      • 重新设计网络
      • 调整学习率
      • 使用梯度截肢(在训练过程中检查梯度的大小)
      • 使用激活函数
  9. 使用作用域

    • 使用作用域后使后台的代码结构更加的清爽,和模型建立更加的清晰,作用分明
  10. 增加变量显示

    • 收集 tensor, 损失
      • tf.summary.scalar(“losses”, loss)
    • 收集高维度信息
      • tf.summary.histogram(“weigths”, weigth)
模型加载和保存
  1. 定义一个保存模型的实例
    • saver = tf.train.Saver(var_list=None,max_to_keep=5)
      • var_list
        • 保存还原的变量
      • max_to_keep
        • 最近几个检查点
  2. 保存
    • 保存的是sess
      • saver.save(sess,路径(包含模型保存的名字))
  3. 加载
    • saver.restore(sess, 路径(包含模型的名字))
自定义命令行参数
  1. 首先定义有哪些参数(说明),需要在运行的时候指定
  2. 程序当中获取定义的命令行参数
  3. 实例
    • 第一个参数 名字,默认值, 说明

    • 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框架使用和线性回归的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部