深度学习笔记

1深度学习介绍

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张图片

2.1.2 数据流图介绍
深度学习笔记_第3张图片

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()

深度学习笔记_第4张图片

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()

深度学习笔记_第5张图片

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指令都对应一个唯一的名称
深度学习笔记_第6张图片
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

你可能感兴趣的:(python,深度学习,tensorflow,机器学习)