深度学习day01

一、深度学习的介绍

1. 深度学习与机器学习的区别
image-20240328145555308
  • 特征提取方面
  • 数据量和计算性能要求
  • 算法代表
2. 特征提取方面
  • 机器学习的特征工程步骤是要靠手动完成的(特征提取),而且需要大量领域专业知识
  • 深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型。通过训练大量数据自动得到模型,不需要人工特征提取环节

深度学习算法试图从数据中学习高级功能,这是深度学习的一个非常独特的部分。因此,减少了为每个问题开发新特征提取器的任务。适合用在难提取特征的图像、语音、自然语言处理领域

3. 数据量和计算性能要求

机器学习需要的执行时间远少于深度学习,深度学习参数往往很庞大,需要通过大量数据的多次优化来训练参数

image-20240328153057836
  • 第一,深度学习需要大量的训练数据集
  • 第二,训练深度神经网络需要大量的算力
    可能要花费数天、甚至数周的时间,才能使用数百万张图像的数据集训练出一个深度网络。所以深度学习通常
    • 需要强大的GPU服务器来进行计算
    • 全面管理的分布式训练和预测服务
4. 算法代表
  • 机器学习:朴素贝叶斯,决策树
  • 深度学习:神经网络

二、TensorFlow结构分析(数据流图)

TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段。

构建图阶段,数据与操作的执行步骤被描述成一个图。

  • 流程图,定义数据(张量Tensor)和操作(节点Op)

执行图阶段,使用会话(调用系统资源)执行构建好的图中的操作。

  • 调用各方资源,将定义好的数据和操作运行起来

  • 图和会话:
    • 图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法,数据 + 操作
    • 会话:TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
  • 张量(数据):TensorFlow中的基本数据对象
  • 节点(操作):提供图当中执行的操作

TensorFlow:Tensor:张量、数据 Flow:流动

1. 图结构

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

图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据

2. 图的相关操作

通常TensorFlow会默认帮我们创建一张图。

查看默认图的两种方法:

  • 调用方法
    • 通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
  • 查看属性
    • op、sess都含有graph属性,默认都在一张图中
3. 创建图
  • 可以通过tf.Graph()自定义创建图
  • 如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器
4. TensorBoard可视化学习

TensorFlow有一个亮点就是,我们能看到自己写的程序的可视化效果,这个功能就是Tensorboard。在这里我们先简单介绍一下其基本功能。

实现程序可视化过程:

  • 将图进行数据序列化,为events文件

    • TensorBoard通过读取TensorFlow的事件文件来运行,故需要将图序列化为Summary对象
    • tf.summary.FileWriter(path, graph=sess.graph)
  • 打开终端,启动tensorBoard

    • tensorboard --logdir=path
image-20240429142423367

image-20240429143048997image-20240429150309138

圆圈是因为:在定义a_t和b_t时,使用constant函数,所以按照TensorBoard中的表示为圆圈

圆圈前面的Const和Const_1代表为:指令名称

"Const:0"代表:该操作只有一个输出,若为多个输出则为:0,1,2……

5. OP

数据:Tensor对象

操作:Operation对象,简称:Op


常见Op

类型实例
标量运算add,sub, mul, div,exp, log, greater, less,equal
向量运算concat,slice,splot, constant,rank,shape, shuffle
矩阵运算matmul, matrixinverse,matrixdateminant
带状态的运算Variable, assgin, assginadd
神经网络组件softmax,sigmoid,relu,convolution,max_pool
存储,恢复Save,Restroe
队列及同步运算Enqueue,Dequeue,MutexAcquire,MutexRelease
控制流Merge,Switch, Enter,Leave,Nextlteration
操作函数操作对象
tf.constant(Tensor对象)输入Tensor对象—Const—输出 Tensor对象
tf.add(Tensor对象1,Tensor对象2)输入(Tensor对象1,Tensor对象2) —Add对象—输出 Tensor对象3

image-20240429143048997image-20240429150256907

一个操作对象(Operation)是TensorFlow图中的一个节点,可以接收0个或者多个输入Tensor,并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。

例如:c=tf.matmul(a,b)创建了一个Operation对象,类型为MatMul类型,它将张量a,b作为输入,c作为输出,并且输出数据,打印的时候也是打印的数据。其中tf.matmul()是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象

注意,打印出来的是张量值,可以理解成OP当中包含了这个值。并且每一个OP指令都对应一个唯一的名称,如上面的Const:0,这个在TensorBoard上面也可以显示

请注意,tf.Tensor对象以输出该张量的tf.Operation明确命名。张量名称的形式为“<OP_NAME>:< i >",其中:

  • "<OP_NAME>"是生成该张量的指令的名称
  • "< i >"是一个整数,它表示该张量在指令的输出中的索引

指令名称

tf.Graph对象为其包含的tf.Operation对象定义的一个命名空间。TensorFlow会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。我们可以以以下方式改写指令名称

  • 每个创建新的tf.Operation或返回新的tf.Tensor的API函数可以接受可选的name参数。

例如,tf.constant(42.0,name=”answer")创建了一个名为“answer”的新tf.Operation并返回一个名为answer:0”的tf.Tensor。如果默认图已包含名为“answer”的指令,则TensorFlow会在名称上附加"1"、“2”等字符,以便让名称具有唯一性。

image-20240429151650086image-20240429151700774image-20240429151827037

6. 会话

一个运行TensorFlowoperation的类。会话包含以下两种开启方式:

  • tf.Session:用于完整的程序当中
    • 快速查看张量的值,在会话中调用 对象.eval() 查看
  • tf.InteractiveSession:用于交互式上下文中的TensorFlow,例如shell
    • 直接通过 对象.eval() 查看

TensorFlow使用tf.Session类来表示客户端程序(通常为Python程序,但也提供了使用其他语言的类似接口)与C++运行时之间的连接

tf.Session对象使用分布式TensorFlow运行时提供对本地计算机中的设备和远程设备的访问权限。

会话可能拥有的资源,如tf.Variable,tf.QueueBase和tf.ReaderBase。当这些资源不再需要时,释放这些资源非常重要。因此,需要调用tf.Session.close会话中的方法,或将会话用作上下文管理器。

  1. 会话掌握资源,用完要回收。——上下文管理器 (with …… as …)

  2. 初始化会话对象时的参数

    • tf.Session(target=‘’,graph=None,config=None)
      • target:如果将此参数留空(默认设置),会话将仅使用本地计算机中的设备。可以指定grpc://网址,以便指定TensorFlow服务器的地址,这使得会话可以访问该服务器控制的计算机上的所有设备
      • graph:默认情况下,新的tf.Session将绑定到当前的默认图
      • config:此参数允许您指定一个tf.ConfigProto以便控制会话的行为。例如,ConfigProto协议用于打印设备使用信息
  3. run方法

    只要开启会话(session),运行其中的值(run),才能看到结果

    若不开启会话,只是单纯的去打印,只能看到tensor对象

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

    • 通过使用sess.run()来运行operation

    • fetches:传入单一的operation,或者列表、元组(属于tensorflow的类型)

    • feed_dict:参数运行调用者覆盖图中张量的值,运行时赋值,与tf.placeholder()占位符搭配使用,则会检查值的形式是否与占位符兼容

      注: 使用tf.operation.eval()也可以运行operation,但需要在会话中运行


      feed操作:

      • placeholder提供占位符,run时候通过feed_dict传参

请注意运行时候报的错误error:

RuntimeError:如果这Session是无效状态(例如已关闭)。

TypeError:如果fetches或者feed_dict键的类型不合适。

valueError:如果fetches或feed_dict键无效或引用Tensor不存在的键。

三、张量Tensor

TensorFlow的张量就是一个N维数组,类型为tf.Tensor。

Tensor具有以下两个重要的属性:

  • type:数据类型
  • shape:形状(阶)

标量:一个数字 0阶张量

向量:一维数组 [2,3,4] 1阶张量

矩阵:二维数组 [[2,3,4], 2阶张量

​ [2,3,4]]

……

张量: n维数组 n阶张量

1. 张量的类型

默认:tf.float32

数据类型Python类型描述
DT_FLOATtf.float3232位浮点数.
DT_DOUBLEtf.float6464位浮点数.
DT_INT64tf. int6464位有符号整型.
DT_INT32tf. int3232位有符号整型.
DT_INT16tf.int1616位有符号整型.
DT_INT8tf.int88位有符号整型.
DT_UINT8tf.uint88位无符号整型.
DT_STRINGtf.string可变长度的字节数组.每一个张量元素都是一个字节数组.
DT_BOOLtf.bool布尔型.
DT_COMPLEX64tf.complex64由两个32位浮点数组成的复数:实数和虚数.
DT_QINT32tf.qint32用于量化Ops的32位有符号整型.
DT_QINT8tf.qint8用于量化Ops的8位有符号整型.
DT_QUINT8tf.quint8用于最化Ops的8位无符号整型
2. 张量的阶
数学实例Python例子
0纯量(标量)(只有大小)s = 483
1向量(大小和方向)v = [1.1,2.2,3.3]
2矩阵(数据表)m = [[1,2,3],[4,5.6],[7,8,9]]
33阶张量(数据立体)t = [[[2],[4],[6]],[[8],[10],[12]],[[14],[16],[18]]]
nn阶(自己想想看)

0维:() 1维:(10,) 2维:(3,4) 3维:(3,4,5)

3. 创建张量

创建固定值张量

tf.zeros(shape, dtype=tf.float32,name=None)

创建所有元素设置为零的张量。此操作返回一个dtype具有形状shape和所有元素设置为零的类型的张量。

tf.zeros_like(tensor,dtype=None, name=None)

给tensor定单张量(),此操作返回tensor与所有元素设置为零相同的类型和形状的张量。

tf.ones(shape, dtype=tf.float32, name=None)

创建一个所有元素设置为1的张量。此操作返回一个类型的张量,dtype形状shape和所有元素设置为1。

tf.ones_like(tensor, dtype=None, name=None)

给tensor定单张量(),此操作返回tensor与所有元素设置为1相同的类型和形状的张量。

tf.fill(dims, value, name=None)

创建一个填充了标量值的张量。此操作创建一个张量的形状dims并填充它value.

tf.constant(value, dtype=None,shape=None, name=‘Const’"

创建一个常数张量。


创建随机张量

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None,name=None)

从截断的正态分布中输出随机值,和 tf.random_normal()一样,但是所有数字都不超过两个标准差

tf.random_normal(shape, mean=0.0,stddev=1.0, dtype=tf.float32, seed=None, name=None)

从正态分布中输出随机值,由随机正态分布的数字组成的矩阵


其它特殊的创建张量的OP

  • tf.Variable
  • tf.placeholder
4. 张量的变换
  • 类型改变

    • tf.cast(tensor,dtype)
      • 不会改变原始的tensor
      • 返回新的改变类型后的tensor
  • 形状修改

    • 静态形状
      • 只有在形状没有完全固定下来的情况下,才可以改变/更新静态形状
      • tensor.set_shape(shape)
    • 动态形状
      • tf.reshape(tensor,shape)
      • 不会改变原始的tensor
      • 返回新的改变形状后的tensor
      • 动态创建新张量时,张量的元素个数必须匹配
5. 变量OP

TensorFlow变量是表示程序处理的共享持久状态的最佳方法。变量通过tf.VariableOP类进行操作。变量的特点:

  • 存储持久化

  • 可修改值

  • 可指定被训练


  • 创建变量

    • 变量需要显式初始化,才能运行值
image-20240506174845184
  • 使用tf.variable_scope()修改变量的命名空间
    • 使得结构更加清晰
6. API
  • 基础API

    • tf.app

      • 这个模块相当于为TensorFlow进行的脚本提供一个main函数入口,可以定义脚本运行的flags
    • tf.image

      • TensorFlow的图像处理操作。主要是一些颜色变换、变形和图像的编码和解码
    • tf.gfile

      • 这个模块提供了一组文件操作函数
    • tf.summary

      • 用来生成TensorBoard可用的统计日志,目前Summary主要提供了4种类型:audio、image、histogram、scalar
    • tf.python_io

      • 用来读写TFRecords文件
    • tf.train

      • 这个模块提供了一些训练器,与tf.nn结合起来,实现一些网络的优化计算
    • tf.nn

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

    • tf.keras

      • Kears本来是一个独立的深度学习库,tensorflow将其学习过来,增加这部分模块在于快速构建模型
    • tf.layers

      • 高级API,以便高级的概念层来定义一个模型。类似tf.kears
    • tf.contrib

      • tf.contrib.layers提供够将计算图中的网络层、正则化、摘要操作,是构建计算图的高级操作,但是tf.contrib包含不稳定和实验代码,有可能以后API会改变
    • tf.estimator

      • 一个estimator相当于model + training + evaluate 的合体。在模块中,已经实现了几种简单的分类器和回归其,包括:Baseline,learning 和 DNN。这里的DNN的网络,只是全连接网络,没有提供卷积之类的
image-20240506193810715

四、案例:实现线性回归

1. 线性回归原理

根据数据建立回归模型,w1x1+w2x2+…+b=y,通过真实值与预测值之间建立误差,使用梯度下降优化得到损失最小对应的权重和偏置。最终确定模型的权重和偏置参数。最后可以用这些参数进行预测

  • 构建模型
    • y=w1x1+w2x2++wnxn+b
  • 构造损失函数
    • 均方误差、最小二乘法
  • 优化损失
    • 梯度下降
2. 命令行参数
  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值