• Stars
    star
    183
  • Rank 210,154 (Top 5 %)
  • Language
    Python
  • Created almost 7 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

✨✨开始迈向人工智能、机器学习、深度学习,学习主流的深度学习框架Tensorflow之旅

DeepLearn-Tensorflow

开始迈向人工智能,学习主流的深度学习框架Tensorflow

概念

人工智能、机器学习、深度学习都什么区别?

一、按照提出时间顺序分

  1. 1956年,几个计算机科学家相聚在达特茅斯会议(Dartmouth Conferences),提出了“人工智能(Artificial Intelligence 简称AI)”的概念。简单解释为机器赋予人的智能;

  2. Langley(1996) 定义的机器学习是“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能; ----机器学习是实现人工智能的一种方法

  3. 深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本;深度学习——一种实现机器学习的技术,深度学习使得机器学习能够实现众多的应用,并拓展了人工智能的领域范围。

Tensorflow (Google深度学习框架)

  1. 安装

    官方文档

  2. python3

    学习地址

  3. TensorFlow中两个重要的工具

    • ProTocol Buffer:谷歌开发的处理结构化数据的工具。它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

    • Bazel :谷歌开元的自动化构建工具,相比MakeFile、Ant、Maven,Bazel在速度、可伸缩性、灵活性、以及对不同程序语言和平台的支持都要更出色,Tensorflow本身就是由Bazel来编译的 Bazel 对python支持的遍历方式三种,py_binary,py_library,py_test,分别是编译成可执行文件,函数库,测试程序

  4. TensorFlow入门开始

      1. TensorFlow 计算模型--计算图 TensorFlow Tensor和Flow组成,Tensor是张量的意思,Flow是流的意思,TensorFlow是一个通过计算图的形式来表述计算的编译系统。每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。
      1. TensorFlow程序一般可以分为两个阶段 在第一个阶段需要定义的计算图中所有的计算,第二个阶段就是执行计算
      1. TensorFlow数据模型--张量 张量是TensorFlow管理数据的形式,在TensorFlow 中所有数据都是通过张量的形式来表示,张量可以简单的理解成多维数组

        import tensorflow as tf
        a = tf.constant([1.0,2.0],name="a") #constant是一个计算,计算结果为一个张量,保存在变量a中
        b = tf.constant([2.0,3.0],name="b")
        result = tf.add(a,b,name="add")
        print result
        
        输出结果 Tensor("add:0",shape=(2,),dtype=float32)
        

        Tensorflow 计算结果不是一个值,而是一个张量的结构;上面打印结果表示这个张量的名字为”add:0“(这是张量的唯一标识符),shape表示维度信息,上面表示的则就是1维数组,长度是2,第三个属性也就是类型,每个张量会有唯一类型,不同类型不能直接操作

        例如:

        import tensorflow as tf
        a = tf.constant([1,2],name="a")
        b = tf.constant([2.0,3.0],name="b")
        result = a + b
        ## 这里程序就会报错
        指定类型避免报错
        a = tf.constant([1,2],name="a",dtype=tf.float32) 这样子就不报错了
        
      1. 张量的使用 1 保存中间结果,增加可读性

        2 当计算图构造完成之后,张量可以用来获取计算结果,也就是得到真实数据,虽然张量本身没有存储具体的数字,但是可以通过会话就可以得到这些具体的数字了

        比如上面的代码就可以使用 tf.Session().run(result)语句来计算结果

      1. TensorFlow运行模型-- 会话 前面介绍了TensorFlow是如何组织数据和运算的。接下来我们需要通过tensorFlow中的会话来执行定义好的运算

        ** 会话拥有并管理TensorFlow运行时的所有资源,当所有计算完之后必须关闭,否者,就会出现内存泄露的问题

        ** 会话的种类一般分为两种

        • 需要明确的调用会话的生成函数和关闭函数 形式如:
        sess = tf.Session()
        sess.run(...)
        sess.close()
        

        ** 上面如果在执行过程中发现了异常,就会到时sess.close()不会被执行,所以python中可以用with语句来管理,这样也就不需要手动调用close,python会自动调用

        with tf.Session() as sess:
              sess.run(...)
        
      1. TensorFlow实现神经网络 提取特征向量 卡迪尔坐标系

        • 1.所谓神经网络结构就是指不同神经元之间连接的结构
        • 2.一个神经元可以有多个输入,但只有一个输出,一个神经元的输出可以作为下一个神经元的输入
        • 3.前向传播算法
        • 4.全连接神经网络前向传播算法:相邻两层之间任意两个节点都有链接
        • 5.除了输入层之外的节点都代表了一个神经元的结构,一个神经元也叫一个节点,每一个节点的取值都是输入层取值的加权和(X1W1+X2W2..)
        • 6.前向传播算法可以理解为向量的乘法      
        • 前向传播算法计算图解
        • 矩阵和方程转换详解

        变量的声明:tf.Variable(tf.random_normal([2,3],stddev=2))//生成变量,必须初始值 初始值得方法有很多,这里使用随机数生成函数,产生一个2x3矩阵,均值为0(mean可以指定均值,默认0),标准差2

      1. 通过TensorFlow训练神经网络模型

        1.监督式学习:监督式学习的重要思想就是,在已知答案的标注数据集上,模型给出的数据结果要尽量接近真实答案.通过调整神经网络中的参数对训练数据的拟合,可以使得模型对未知数据样本达到预测能力

        2.神经网络优化算法中,反向传播算法是最常用的方式

        总结:训练神经网络需要3个步骤

        • 1定义神经网络结构和前向传播的结果
        • 2定义损失函数以及反向传播优化算法
        • 3生成会话,并在训练数据上反复运行反向传播优化算法
  5. 优化神经网络(更好的对未知样本预测)

    1. 深度学习:
      • 线性模型的局限性,生活中大多数问题是不能线性的解决

      • 线性函数与非线性函数:指的就是一次函数y= ax+b,其他x非一次幂的函数都是非线性的函数,曲线

      • 深度学习:一类通过多层非线性变换对高复杂性数据建模算法的集合,因为深层神经网络是实现“多层非线性变化的常用方法”,所以在实际当中,可以认为深度学习就是深层神经网络的代名词

      • 深度学习的特性:多层和非线性

      • 激活函数去实现非线性化: 前面神经元的输出都是所有输入的加权和,导致整个神经网络是个线性模型,如果每隔神经元的输出通过一个非线性函数,name整个神经网络的模型也就不再是线性的了,这个非线性的函数就是激活函数。

      • 偏置项: 偏置项是神经网络中非常常用的一种结构。偏执项可以表达为输入项永远为1的节点

      • Tensorflow 中提供7种激活函数:常用的分别是tf.nn.relu tf.sigmoid tf.tanh,也支持使用自定义激活函数

             a = tf.nn.relu(tf.matmul(x,w1) + b1)
             y = tf.nn.relu(tf.matmul(a,w2) + b2)
        
    1. 合理设定神经网络优化目标(也就是定损函数)、常用定损函数
    • 分类问题和回归问题是监督学习的两大种类
    • 分类问题一般有多个结果,回归问题一般就一个结果
    • 分类问题最长用的损失函数交叉熵计算
    • 回归问题最长用的损失函数均方差
    • 交叉熵:计算概率分布的距离
    • 有一个三分类问题:某样例正确答案是(1,0,0),预测答案是(0.5,0.4,0.1)

    交叉熵的计算

    • Tensorflow交叉熵的计算

        cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y,1e-10,1.0)))
        其中这里包含四个不同的Tensorflow运算
        第一步:
        tf.clip_by_value可以将一个张量的数值限制一个范围,也就是矩阵中的数值做限制,避免出现log0这种问题
        例如v = tf.constant([[ 1.0,2.0,3.0],[4.0,5.0,6.0]])
        print (tf.clip_by_value(v,2.5,4.5).eval())
        #输出 [[2.5,2.5.3.0],[4.0,4.5,4.5]]
        第二步:计算tf.log
        第三步:两个矩阵通过“*”不是矩阵的乘法,而是矩阵元素之间相乘
        v1 = tf.constant([[1.0,2.0],[3.0,4.0]])
        v2 = tf.constant([[5.0,6.0],[7.0,8.0]])
        print(v1*b2).eval()
        # 输出[[5.0,12.0][21.0,32.0]]
        前三步结果:nxm的二维矩阵,其中n为一个batch中的样例数量,m为分类的类别数量
        第四步:求取nxm的每一行交叉熵,然后对n行取平局值
        print (tf.reduce_mean(v).eval())
      
    • 自定义损失函数

      • 自定义损失函数使得神经网络结果更趋向与真实值

代码

More Repositories

1

DataStructure

💋💋数据结构、算法总结、学习算法的时间复杂度、空间复杂度、分析算法特点以及应用、Java面试难题、Android面试难题
Java
1,110
star
2

S-MVP

🔥🔥优化版MVP,使用注解泛型简化代码编写,使用模块化协议方便维护,APT过程使用注解解析器利用JavaPoet🌝完成重复模块的编写,利用ASpect+GradlePlugin 完成横向AOP编程+Javassist动态字节码注入+Tinker实现热修复+Retrofit实现优雅网络操作+RxJava轻松玩转数据处理
Java
1,084
star
3

GradlePluginDevelop

💍Gradle 执行流程、什么叫DSL、领域专用语言、Gradle常见用法、Gradle高级插件用法、Gradle对Android优化、结合Javassist使用给上一层楼以及Gradle开发中的遇到的问题
Groovy
465
star
4

RecordVoiceView

🍭自定义声音波纹,适合作录音应用的开发,模仿iPhone录音效果,模仿小米录音效果,其他录音效果录音效果
Java
302
star
5

Relax

☘☘Relax 基于Kotlin语言编写的一套组件化框架,不紧整体组件化、内部也高度组件化🎋你可配置MVP、MVVM的开发模式、也可以配置所需要的业务组件🍁🍁
Kotlin
242
star
6

ComputerBookShare

📚📚计算机电子图书分享🐬,欢迎大家分享自己的电子书到这里来,让大家寻找资源不那么苦恼🐳,让大家共同成长学习💥,资源长期有效
164
star
7

KAdapter

封装Kotlin版本RecyclerView Adapter,使用DSL创建Adapter,体验不一样的简单
Kotlin
44
star
8

KotlinNote

Kotlin 学习笔记
Kotlin
6
star
9

AndroidPluginFramework

Android插件化开发框架、DexClassLoader
Java
5
star
10

JNI_NDK

JNI技术、NDK技术、HOOK技术、视频直播技术
C
5
star
11

EventDriver

发送事件,不需要关心接收者的生命周期
Kotlin
4
star
12

ComponentDevelopment

组件化开发框架
Java
3
star
13

JavaPoetSample

JavaPoet的一个简单例子
Java
1
star
14

CameraTextureView

通过TextureView 自定义相机
Kotlin
1
star
15

VolleyOKhttp

Java
1
star
16

TechBox

upload Techbox
Java
1
star
17

DoubleProcessKeep

双进程保护
Java
1
star
18

AndroidService

Service apk开发
Java
1
star