深度学习笔记

1深度学习介绍

1.1深度学习与机器学习的区别

在这里插入图片描述
1.1.1特征提取方面
机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识
深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型。通过训练大量数据自动得出模型,不需要人工特征提取环节。
深度学习算法试图从数据中学习高级功能,这是深度学习的一个非常独特的部分。因此,减少了为每个问题开发新特征提取器的任务。

适合用在难提取特征的图像、语音、自然语言处理领域。

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

第一、深度学习需要大量的训练数据集

第二、训练深度神经网络需要大量的算力

可能要花费数天、甚至数周的时间,才能使用数百万张图像的数据集训练出一个深度网络。所以深度学习通常

需要强大的GPU服务器来进行计算
全面管理的分布式训练与预测服务――比如谷歌TensorFlow云机器学习平台
1.1.3 算法代表
机器学习
朴素贝叶斯
决策树等
深度学习
神经网络

Tensorflow结构分析

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

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

在执行阶段,使用会话执行构建好的图中的操作。

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

import tensorflow.compat.v1 as tf                  #2.0版本不兼容
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
tf.compat.v1.disable_eager_execution()             #2.0版本不兼容

def tensorflow_demo():
    """
    TensorFlow的基本结构
    :return:
    """
    # 原生python加法运算
    a = 2
    b = 3
    c = a + b
    print("普通加法运算的结果:\n", c)

    # TensorFlow实现加法运算,构建阶段,数据和操作的执行步骤被描述成一个图
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算的结果:\n", c_t)

    # 开启会话,在执行阶段,使用会话执行构建好的图中的操作。
    
    with tf.Session() as sess:
        c_t_value = sess.run(c_t)
        print("c_t_value:\n", c_t_value)

    return None

if __name__ == "__main__":
    tensorflow_demo()

在这里插入图片描述

2.1.2 数据流图介绍
在这里插入图片描述

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

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源框架。 节点(Operation)在图中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor) 。

2.2 图与TensorBoard

2.2.1 什么是图结构
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代赛的计算单元之间流动的数据。

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

2.2.2 图相关操作
1 默认图
通常TensorFlow会默认帮我们创建一张图。

查看默认图的两种方法:

①通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
②op、sess都含有graph属性,默认都在一张图中
上面我们的代码有了一个加法运算,明明已经有了数据和对应的操作,但是图在哪里呢?

代码

def graph_demo():
    """
    图的演示
    :return:
    """
    # TensorFlow实现加法运算
    a_t = tf.constant(2, name="a_t")
    b_t = tf.constant(3, name="a_t")
    c_t = tf.add(a_t, b_t, name="c_t")
    # 方法1: 调用方法
    default_g = tf.get_default_graph()
    print(default_g)

    # 方法2 : 查看属性
    print('a_t的图属性:\n', a_t.graph)
    print('b_t的图属性:\n', b_t.graph)
    print('c_t的图属性:\n', c_t.graph)

    with tf.Session() as sess:
        c_t_value = sess.run(c_t)
        print('c_t_value\n', c_t_value)
        print('sess的图属性:\n', sess.graph)


graph_demo()

在这里插入图片描述

2 创建图

可以通过tf.Graph()自定义创建图
如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器
代码

def graph_demo():
    """
    图的演示
    :return:
    """
    # TensorFlow实现加法运算
    a_t = tf.constant(2, name="a_t")
    b_t = tf.constant(3, name="b_t")
    c_t = tf.add(a_t, b_t, name="c_t")
    # 方法1: 调用方法
    default_g = tf.get_default_graph()
    print(default_g)

    # 方法2 : 查看属性
    print('a_t的图属性:\n', a_t.graph)
    print('b_t的图属性:\n', b_t.graph)
    print('c_t的图属性:\n', c_t.graph)

    with tf.Session() as sess:
        c_t_value = sess.run(c_t)
        print('c_t_value:\n', c_t_value)
        print('sess的图属性:\n', sess.graph)

    new_g = tf.Graph()
    # 在自几的途中定义数据和操作
    with new_g.as_default():
        a_new = tf.constant(20)
        b_new = tf.constant(30)
        c_new = tf.add(a_new,b_new)
        print("c_new:\n",c_new,c_new.graph)

graph_demo()

在这里插入图片描述

2.2.3 可视化

实现程序可视化过程

1、 把图写入本地生成events 文件
tf.summary.FileWriter("./tmp/summary", graph=sess.graph)
2、这将在指定目录中生成一个event文件
3、到文件目录,终端输入tensorboard --logdir=“tmp/summary” (也可以自己修改端口号)
4、在浏览器中打开TensorBoard的图页面127.0.0.1:6006

2.2.4op(operation对象)

类型实例
标量运算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

操作函数和操作对象:
eg
操作函数:tf.constant(Tensor对象)
操作对象:const
例如: **c = tf.matmul(a, b)**创建了一个Operation对象,类型为 MatMul类型,它将张量a, b作为输入,c作为输出,并且输出数据,打印的时候也是打印的数据。其中tf.matmul)是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象
所以在上面的加法运算中,打印的是张量值,可以理解成op中包含了这个值,并且每一个op指令都对应一个唯一的名称
在这里插入图片描述
2指令名称
一张图 —— 一个命名空间
tf.Graph对象为其包含的 tf.Operation对象定义的一个命名空间。TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。我们可以以以下方式改写指令名称

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

当修改好之后,我们在Tensorboard显示的名字也会被修改

a = tf.constant(1)
b = tf.constant(2, name='b')
print('a=', a)
print('b=', b)
a= Tensor("Const:0", shape=(), dtype=int32) # 这个我们没有指定指令名称,他是通过contant函数创建的,就叫const:0
b= Tensor("b:0", shape=(), dtype=int32)  # 这个叫b:0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都要学习呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值