深度学习与Tensorflow

版权声明:本文博主原创,有需要请联系我。 https://blog.csdn.net/myGFZ/article/details/79926395

一、机器学习

机器学习的定义为:如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称为这个程序可以从经验中学习。
无法从数据中学习更好的特征表达,这是传统的机器学习算法一个共同的问题。

二、深度学习

深度学习解决的问题之一是自动的将简单的特征组合成更加复杂的特征,并使用这些组合特征解决问题。深度学习是机器学习的一个分支,他除了可以学习特征和任务之间的关联外,还能自动的从简单特征中提取更加复杂的特征。

传统机器学习流程:输入->人工特征提取->权重学习->预测结果
深度学习算法流程:输入->人工特征提取->多层复杂特征提取->权重学习->预测结果

三、人工智能

人工智能、机器学习、深度学习是非常相关的几个领域。人工智能是一类非常宽泛的问题,机器学习是解决这类问题的重要手段,而深度学习是机器学习的一个分支。

人工智能范围>机器学习范围>深度学习范围

四、深度学习框架简介

这里写图片描述
来源于博客:请点这里

1、TensorFlow
TensorFlow可以用来方便的设计神经网络结构,它通过SWIG实现对多种语言的支持,包括python、R、C++。它有着多平台,多语言的特性。

2、Caffe
Caffe是一个被广泛使用的开源深度学习框架,Caffe的核心概念是Layer,每一个神经网络的木块都是一个Layer。设计网络时,只需把各个Layer拼接在一起构成完整的网络。

五、TensorFlow简介

1、编程模型简介
TensorFlow中的计算可以表示为一个计算图(computation graph),又称有向图(directed graph)。在计算图中每一个运算操作(operation)将作为一个节点(node),节点与节点之间的连接称为边(edge)。计算图的每一个节点可以有任意多个输入和输出,节点可以算是运算操作的实例化(instance).在计算图的edge中流动(flow)的数据称为张量(tensor),故得名tensorflow。

Session是用户使用TensorFlow时的交互式接口,用户可以通过Session的Extend方法创建node和edge,通过run方法执行计算图。在大多数运算,计算图某部分会被重复执行多次,使用Variable可以保存运算过程中tensor至内存或显存中,可用于迭代等操作。

2、TensorFlow主要依赖包
(1)Protocol Buffer
它是google开发的处理结构化数据的工具,此处的结构化数据指的是拥有多重属性的数据。类似的结构化数据处理工具还有XML和JSON。
例如有一段数据:

name:gucheng
id:1996
email:gucheng@cqu.com

使用Protocol Buffer的schema格式定义数据为:

message usr{
    optional string name = gucheng;
    required int32 id = 1996;
    repeated string email  = 3;
}

Protocol Buffer定义数据格式文件一般保存在.proto文件中,每一个message代表了一类结构化数据。Protocol Buffer里属性可以为基本数据类型,也可以为另一个message.(类似于C语言的struct结构体),还可以指定数据的属性为optional(可选)、required(必须的)和repeated(可重复的)。

(2)Bazel
Bazel是google开源的自动化构建工具,相比传统的makefile,Ant,Maner,Bazel在速度、可伸展性、灵活性以及对不同程序语言和平台上的支持都要出色。
Bazel的一个基本概念是工作空间(workspace),一个workspace可以简单的理解为一个文件夹(类似于eclipse中的工程目录),在这个根目录下需要一个WORKSPACE文件,定义了对外部资源的依赖关系。

在一个workspace内,Bazel通过BUIL文件来找到需要编译的目标,BUILD文件指定了每一个编译目标的输入、输出以及编译方式。以python为例,Bazel对python支持的编译方式有三种:py_binary(可执行文件)、py_library(链接库)以及py_test(测试程序)。

BUILD文件是由一系列的编译目标组成,每一个编译目标第一行指定编译方式,例如示例中的py_library和py_binary。每一条编译目标的主体是编译的具体信息,通过name、srcs、deps等属性完成。其中:

name #是一个编译目标的名称
srcs #编译所需的源码
deps #编译所需的依赖关系

例如,在BUILD中定义两个编译目标:

#第一个
py_binary(
    name = "hello_lib",
    srcs = [
        "hello_lib.py",
    ],
    deps=[
        ":hello_lib",
    ],
)


#第二个
py_library(
    name = "hello_lib",
    srcs = [
        "hello_lib.py",
    ]
)

3、TensorFlow测试用例
基于python编写一个简单的测试用例:实现两个向量求和。

import tensorflow as tf

#定义两个常量
a = tf.constant([1.0,2.0],name='a')
b = tf.constant([2.0,4.0],name='b')

#向量加法
result = a+b

#生成一个会话,在会话中执行
less = tf.Session()
print(sets.run(result)) 

参考资料

1、https://blog.csdn.net/column/details/18067.html

猜你喜欢

转载自blog.csdn.net/myGFZ/article/details/79926395