登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 579|回复: 0

大家都可以做深度学习应用:入门篇

[复制链接]

173

主题

173

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2019-2-5 09:41:57 来自手机 | 显示全部楼层 |阅读模式 来自 江苏徐州
大家都可以做深度学习应用:入门篇

启示云Tuscloud 2019-01-29 11:12:37
一、人工智能和新科技革命
2017年围棋界发生了一件比力紧张事,Master(Alphago)以60连胜横扫天下,击败各路天下冠军,人工智能以气魄如虹的姿态出如今我们人类的眼前。围棋曾经一度被称为“人类聪明的堡垒”,现在,这座堡垒也随之成为已往。从2016年三月份AlphaGo击败李世石开始,AI全面进入我们大众的视野,对于它的讨论变得更为火热起来,整个业界广泛以为,它很大概带来下一次科技革命,而且,在将来可预见的10多年里,深刻得改变我们的生存。
OM00W181bNBY4yA4.jpg


实在,AI除了可以做我们熟知的人脸、语音等辨认之外,它可以做蛮多风趣的事变。
比方,让AI学习大量古诗之后写古诗,而且可以写出质量非常不错的古诗。
g9md3m97Y07gdYmw.jpg


又大概,将两部计划造型差别的汽车举行融合,形玉成新一种计划风格的新汽车造型。
XpRVnny25n77VpBo.jpg


另有,之前各人在朋侪圈里大概看过的,将相片转换成对应的艺术风格的画作。
ttOOOygJbEJPg87S.jpg


当前,人工智能已经在图像、语音等多个范畴的技能上,取得了全面的突破。与此同时,别的一个题目随之而来,假如这一轮的AI海潮真的将会掀起新的科技革命,那么在可预见的将来,我们整个互联网都将发生翻天覆地的变革,深刻影响我们的生存。那么作为平凡业务开辟工程师的我,又应该以何种态度和方式应对这场期间洪流的打击呢?
在答复这个题目之前,我们先一起看看上一轮由盘算机信息技能引领的科技革掷中,已往30多年中国步伐员的脚色变革:
Y8U5zl88j4BUoXSZ.jpg


通过上图可以简总结:编程技能在不停地发展而且走向遍及,从最开始把握在科学家和专家学者手中的技能,渐渐发展为一门大众技能。换而言之,我们公司内许多资深的工程师,假如带着本日对编程和盘算机的明白和理念回到1980年,那么他无疑就是谁人期间的盘算机专家。
假如这一轮AI海潮真的会带来新的一轮科技革命,那么我们信赖,它也会遵照雷同的发展轨迹,渐渐发展和走向遍及。假如基于这个明白,大概,我们可以通过积极学习,夺取成为第一代AI工程师。
二、深度学习技能
这一轮AI的技能突破,重要源于深度学习技能,而关于AI和深度学习的发展汗青我们这里不重复报告,可自行查阅。我用了一个多月的业务时间,去相识和学习了深度学习技能,在这里,我实验以一名业务开辟工程师的视角,以只管轻易让各人明白的方式一起探究下深度学习的原理,只管,受限于我个人的技能程度和把握水平,未必完全正确。
1. 人的智能和神经元
人类智能最紧张的部门是大脑,大脑固然复杂,它的构成单位却是相对简朴的,大脑皮层以及整个神经体系,是由神经元细胞构成的。而一个神经元细胞,由树突和轴突构成,它们分别代表输入和输出。连在细胞膜上的分叉布局叫树突,是输入,那根长长的“尾巴”叫轴突,是输出。神经元输出的有电信号和化学信号,最重要的是沿着轴突细胞膜外貌流传的一个电脉冲。忽略掉各种细节,神经元,就是一个积聚了充足的输入,就产生一次输出(高兴)的相对简朴的装置。
jL397wTZ9Ww3VWx7.jpg


树突和轴突都有大量的分支,轴突的末了通常毗连到其他细胞的树突上,毗连点上是一个叫“突触”的布局。一个神经元的输出通过突触通报给成千上万个卑鄙的神经元,神经元可以调解突触的联合强度,而且,有的突触是促进卑鄙细胞的高兴,有的是则是克制。一个神经元有成千上万个上游神经元,积聚它们的输入,产生输出。
d5b75e7E5OZOO8E4.jpg


人脑有1000亿个神经元,1000万亿个突触,它们构成人脑中巨大的神经网络,终极产生的效果便是人的智能。
2. 人工神经元和神经网络
一个神经元的布局相对来说是比力简朴的,于是,科学家们就思索,我们的AI是否可以从中得到鉴戒?神经元担当鼓励,输出一个相应的方式,同盘算机中的输入输出非常雷同,看起来简直就是量身定做的,刚好可以用一个函数来模仿。
Iku6jMBJ65BbXKYk.jpg


通过鉴戒和参考神经元的机制,科学家们模仿出了人工神经元和人工神经网络。固然,通过上述这个抽象的形貌和图,比力难让各人明白它的机制和原理。我们以“房屋代价测算”作为例子,一起来看看:
一套房子的代价,会受到许多因素的影响,比方地段、朝向、房龄、面积、银行利率等等,这些因素假如细分,大概会有几十个。一样平常在深度学习模子里,这些影响效果的因素我们称之为特性。我们先假设一种极度的场景,比方影响代价的特性只有一种,就是房子面积。于是我们网络一批相干的数据,比方,50平米50万、93平米95万等一系列样本数据,假如将这些样本数据放到而为坐标里看,则如下图:
nUO6V8Vu1VBXej1o.jpg


然后,正如我们前面所说的,我们实验用一个“函数”去拟合这个输入(面积x)和输出(代价y),简而言之,我们就是要通过一条直线大概曲线将这些点“拟合”起来。
假设环境也比力极度,这些点刚好可以用一条“直线”拟合(真实环境通常不会是直线),如下图:
W0OBN2y2D2D0dDBB.jpg


那么我们的函数是一个一次元方程f(x) = ax +b,固然,假如是曲线的话,我们得到的将是多次元方程。我们得到这个f(x) = ax +b的函数之后,接下来就可以做房价“猜测”,比方,我们可以盘算一个我们从未瞥见的面积案例81.5平方米,它毕竟是多少钱?
这个新的样本案例,可以通过直线找到对应的点(黄色的点),如图下:
f5C59cBh66Q165Q0.jpg


大略的明白,上面就是AI的概括性的运作方式。这统统好像显得过于简朴了?固然不会,由于,我们前面提到,影响房价实在远不止一个特性,而是有几十个,如许题目就比力复杂了,接下来,这里则要继承先容深度学习模子的练习方式。这部门内容相对复杂一点,我只管以业务工程师的视角来做一个大略而简朴的论述。
3. 深度学习模子的练习方式
当有好几十个特性共同影响代价的时间,天然就会涉及权重分配的题目,比方有一些对房价是重要正权重的,比方地段、面积等,也有一些是负权重的,比方房龄等。
(1)初始化权重盘算
那么,第一个步实在是给这些特性加一个权重值,但是,最开始我们根本不知道这些权重值是多少?怎么办呢?不管那么多了,先给它们随机赋值吧。随机赋值,终极盘算出来的估算房价肯定是禁绝确的,比方,它大概将代价100万的房子,盘算成了10万。
(2)丧失函数
由于如今模子的估值和现实估值差距比力大,于是,我们必要引入一个评估“禁绝确”水平的权衡脚色,也就是丧失(loss)函数,它是权衡模子估算值和真实值差距的尺度,丧失函数越小,则模子的估算值和真实值的察觉越小,而我们的根本目标,就是低落这个丧失函数。让刚刚的房子特性的模子估算值,迫近100万的估算效果。
(3)模子调解
通过梯度降落和反向流传,盘算出朝着低落丧失函数的方向调解权重参数。举一个不适当的比喻,我们给面积增长一些权重,然后给房子朝向淘汰一些权重(现实盘算方式,并非针对单个个例特性的调解),然后丧失函数就变小了。
(4)循环迭代
调解了模子的权重之后,就可以又重新取一批新的样本数据,重复前面的步调,颠末几十万次乃至更多的练习次数,终极估算模子的估算值迫近了真实值效果,这个模子的则是我们要的“函数”。
O3f84NW9QA81mTT1.jpg


为了让各人更轻易明白和直观,接纳的例子比力大略,而且报告深度学习模子的练习过程,中心省略了比力多的细节。讲完了原理,那么我们就开始讲讲怎样学习和搭建demo。
三、深度学习情况搭建
在2个月前,人工智能对我来说,只是一个高大上的概念。但是,颠末一个多月的业余时间的认真学习,我发现照旧可以或许学到一些东西,而且跑一些demo和应用出来的。
1. 学习的提前预备
(1)部门数学内容的复习,高中数学、概率、线性代数等部门内容。(累计耗费了10个小时,挑了关键的点看了下,实在照旧不太够,只能让本身看公式的时间,相对没有那么懵)
(2)Python底子语法学习。(耗费了3个小时左右,我从前从未写过Python,由于背面Google的TensorFlow框架的利用是基于Python的)
(3)Google的TensorFlow深度学习开源框架。(耗费了10多个小时去看)
数学底子好大概前期先不关注原理的同砚,数学部门不看也可以开始做,全凭个人选择。
2. Google的TensorFlow开源深度学习框架
深度学习框架,我们可以大略的明白为是一个“数学函数”聚集和AI练习学习的实行框架。通过它,我们可以或许更好的将AI的模子运行和维护起来。
深度学习的框架有各种各样的版本(Caffe、Torch、Theano等等),我只打仗了Google的TensorFlow,因此,背面的内容都是基于TensorFlow睁开的,它的具体先容这里不睁开报告,发起直接进入官网检察。非常令人光荣的是TensorFlow比力早就有中文社区了,只管内里的内容有一点老,搭建情况方面有一些坑,但是已经属于为数不多的中文文档了,各人且看且爱惜。
TensorFlow 的中文社区
TensorFlow 的英文社区
3. TensorFlow情况搭建
情况搭建自己并不复杂,重要办理相干的依靠。但是,底子库的依靠可以带来许多题目,因此,发起只管一步到位,会简朴许多。
(1)操纵体系
我搭建情况利用的呆板是腾讯云上的呆板,软件情况如下:
操纵体系:CentOS 7.2 64位(GCC 4.8.5)
由于这个框架依靠于python2.7和glibc 2.17。比力旧的版本的CentOS一样平常都是python2.6以及版本比力低的glibc,会产生比力的多底子库依靠题目。而且,glibc作为Linux的底层库,牵一发动满身,直接对它升级是比力复杂,很大概会带来更多的情况非常题目。
(2)软件情况
我现在安装的Python版本是python-2.7.5,发起可以接纳yum install python的方式安装相干的原来软件。然后,再安装 python内的组件包管理器pip,安装好pip之后,接下来的其他软件的安装就相对比力简朴了。
比方安装TensorFlow,可通过如下一句下令完成(它会主动帮助办理一些库依靠题目):
pip install -U tensorflow
这里必要特殊留意的是,不要按照TensorFlow的中文社区的指引去安装,由于它会安装一个非常老的版本(0.5.0),用这个版本跑许多demo都会碰到题目的。而现实上,现在通过上述提供的下令安装,是tensorflow (1.0.0)的版本了。
FzJ9jJ9zk65kKW15.jpg


Python(2.7.5)下的其他必要安装的关键组件:

  • tensorflow (0.12.1),深度学习的焦点框架image (1.5.5),图像处置惩罚相干,部门例子会用到PIL (1.1.7),图像处置惩罚相干,部门例子会用到
除此之后,固然另有别的的一些依靠组件,通过pip list下令可以检察我们安装的python组件:

  • appdirs (1.4.0)backports.ssl-match-hostname (3.4.0.2)chardet (2.2.1)configobj (4.7.2)decorator (3.4.0)Django (1.10.4)funcsigs (1.0.2)image (1.5.5)iniparse (0.4)kitchen (1.1.1)langtable (0.0.31)mock (2.0.0)numpy (1.12.0)packaging (16.8)pbr (1.10.0)perf (0.1)PIL (1.1.7)Pillow (3.4.2)pip (9.0.1)protobuf (3.2.0)pycurl (7.19.0)pygobject (3.14.0)pygpgme (0.3)pyliblzma (0.5.3)pyparsing (2.1.10)python-augeas (0.5.0)python-dmidecode (3.10.13)pyudev (0.15)pyxattr (0.5.1)setuptools (34.2.0)six (1.10.0)slip (0.4.0)slip.dbus (0.4.0)tensorflow (1.0.0)urlgrabber (3.10)wheel (0.29.0)yum-langpacks (0.4.2)yum-metadata-parser (1.1.4)
按照上述提供的来搭建体系,可以规避不少的情况题目。
搭建情况的过程中,我碰到不少题目。比方:在跑官方的例子时的某个报错,AttributeError: 'module' object has no attribute 'gfile',就是由于安装的TensorFlow的版本比力老,缺少gfile模块导致的。而且,另有各种各样的。(不要问我是怎么知道的,说多了都是泪啊~)
更具体的安装阐明:Installing TensorFlow on Ubuntu
(3)TensorFlow情况测试运行
测试是否安装乐成,可以接纳官方的提供的一个短小的例子,demo天生了一些三维数据, 然后用一个平面拟合它们(官网的例子接纳的初始化变量的函数是initialize_all_variables,该函数在新版本里已经被废弃了):
#!/usr/bin/python
#coding=utf-8

import tensorflow as tf
import numpy as np

# 利用 NumPy 天生假数据(phony data), 统共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 构造一个线性模子
#
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# 初始化变量,旧函数(initialize_all_variables)已经被废弃,更换为新函数
init = tf.global_variables_initializer()

# 启动图 (graph)
sess = tf.Session()
sess.run(init)

# 拟合平面
for step in xrange(0, 201):
sess.run(train)
if step % 20 == 0:
print step, sess.run(W), sess.run(b)

# 得到最佳拟合效果 W: [[0.100 0.200]], b: [0.300]
运行的效果雷同如下:
xSJbfSSsK8KkfKKz.jpg


颠末200次的练习,模子的参数渐渐迫近最佳拟合的效果(W: [[0.100 0.200]], b: [0.300]),别的,我们也可以从代码的“风格”中,相识到框架样本练习的根本运行方式。固然,官方的教程后续会涉及越来越多更复杂的例子,但从团体上看,也是雷同的模式。
ILeF4DfJ6bbx86u0.jpg


步调分别

  • 预备数据:得到有标签的样本数据(带标签的练习数据称为有监视学习);设置模子:先构建好必要利用的练习模子,可供选择的呆板学习方法实在也挺多的,换而言之就是一堆数学函数的聚集; 丧失函数和优化方式:权衡模子盘算效果和真实标签值的差距;真实练习运算:练习之前构造好的模子,让步伐通过循环练习和学习,得到终极我们必要的效果“参数”;验证效果:接纳之前模子没有练习过的测试集数据,去验证模子的正确率。
此中,TensorFlow为了基于python实现高效的数学盘算,通常会利用到一些底子的函数库,比方Numpy(接纳外部底层语言实现),但是,从外部盘算切回到python也是存在开销的,尤其是在几万几十万次的练习过程。因此,Tensorflow不但独地运行单一的函数盘算,而是先用图形貌一系列可交互的盘算操纵流程,然后全部一次性提交到外部运行(在其他呆板学习的库里,也是雷同的实现)。
以是,上述流程图中,蓝色部门都只是设置了“盘算操纵流程”,而绿色部门开始才是真正的提交数据给到底层库举行现实运算,而且,每次练习一样平常是批量实行一批数据的。
本文转自知乎腾讯云社区,http://zhuanlan.zhihu.com/TencentCloudCommunity




上一篇:百度开源项目OpenRASP快速上手指南
下一篇:2018网站服务器类文章归档
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-5 00:50 , Processed in 0.059059 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表