前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《白话深度学习与Tensorflow》学习笔记(1)

《白话深度学习与Tensorflow》学习笔记(1)

作者头像
微风、掠过
发布2018-04-10 14:45:39
9320
发布2018-04-10 14:45:39
举报

刚入手一本《白话深度学习与Tensorflow》,哈哈,一直看深度学习很火,其实自己一知半解,都没有对这个领域进行一点系统的学习,现在准备看看这本书,开始入门。毕竟深度学习是大趋势,个个都说是个坑,个个都往里跳。。。趁着有时间,了解了解也无妨。

初步感觉这本书比周志华老师的《机器学习》稍微好懂一点,讲实例和大比方居多,当然也有公式支撑。整体还不错,讲了基本神经网络、CNN、RNN、LSTM、HMM、Deep Residual Network(深度残差网络)这些耳熟能详的模型。

所以,一边看,一边做做笔记,也比较随意。

首先,相信很多人都还不知道tensor是什么,百度翻译出来的是张量,张肌,其实,这里的tensor就是向量的意思,tensorflow就是向量流、数据流的意思。tensorflow是谷歌的深度学习开源框架,用于训练神经网络的。

几个深度学习框架的比较如下:

Theano、Torch是两个最具有扩展性的深度学习框架,无论在支持的各种网络层种类数量上,或者是在支持的各种库上。symbolic differentiation是Theano中对于 非标准深度网络架构(non-standard deep architecture) 提供的最有用的特性。

Torch正在补上这个空缺,可以参考这个博客:

https://blog.twitter.com/2015/autograd-for-torch在CPU上training以及deploy,对于任何的网络模型,Torch的性能都最优,其次是Theano,Neon的在CPU上的性能最差在GPU上deploy已经训练好的卷积和全连接网络(也就是 前向传播过程),Torch也是最适合的,其次是Theano在GPU上training卷积和全连接网络,Theano在小网络模型(LeNet)的表现最好,在大网络模型(AlexNet)上,Torch性能最佳。Neon在大网络模型上也非常有优势Torch受益于它众多的扩展库及文档(这个确实,Torch的文档阅读性很强,Theano也不错),还有Torch的错误调试工具也很有优势。

TensorFlow是非常具有扩展性的一个深度学习框架,尤其是在不同情况的各种设备上,进行深度学习框架部署时,更方便稳定。但是在单机上,它的表现就不具有那么强的竞争力了。

Tensor Flow:

TensorFlow是一款开源的数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(tensor)之间的交互。TensorFlow灵活的架构可以部署在一个或多个CPU、GPU的台式以及服务器中,或者使用单一的API应用在移动设备中。TensorFlow最初是由研究人员和Google Brain团队针对机器学习和深度神经网络进行研究所开发的,目前开源之后可以在几乎各种领域适用。

Data Flow Graph:使用有向图的节点和边共同描述数学计算。graph中的nodes代表数学操作,也可以表示数据输入输出的端点。边表示节点之间的关系,传递操作之间互相使用的多位数组(tensors),tensor在graph中流动——这也就是TensorFlow名字的由来。一旦节点相连的边传来了数据流,节点就被分配到计算设备上异步的(节点间)、并行的(节点内)执行。

机动性: TensorFlow并不只是一个规则的neural network库,事实上如果你可以将你的计算表示成data flow graph的形式,就可以使用TensorFlow。用户构建graph,写内层循环代码驱动计算,TensorFlow可以帮助装配子图。定义新的操作只需要写一个Python函数,如果缺少底层的数据操作,需要写一些C++代码定义操作。

可适性强:可以应用在不同设备上,cpus,gpu,移动设备,云平台等

自动差分:TensorFlow的自动差分能力对很多基于Graph的机器学习算法有益

多种编程语言可选:TensorFlow很容易使用,有python接口和C++接口。其他语言可以使用SWIG工具使用接口。(SWIG—Simplified Wrapper and Interface Generator, 是一个非常优秀的开源工具,支持将C/C++代码与任何主流脚本语言相集成。)

最优化表现:充分利用硬件资源,TensorFlow可以将graph的不同计算单元分配到不同设备执行,使用TensorFlow处理副本。

(其他几大框架介绍见:

https://www.leiphone.com/news/201608/5kCJ4Vim3wMjpBPU.html)

下面正式来谈本书的内容:

一、牛顿法解方程:

在函数上随机取一个点(x0,f(x0))作这个点的切线,得到与x轴的交点,,得到一次近似点x1,然后在函数上找到对应的(x1,f(x1))同样作切线,得到二次近似点x2,这样就不断逼近方程的解。

二、梯度下降法:

这里主要就一个x的更新公式:

每次都根据这个公式进行迭代,直到达到停止条件或者收敛条件。

三、VC维:如果样本数是3,分类方式是分为2类,那么这三个样本可以被完全分开。

2维空间的线性分类器的VC维就是3.对于神经网络而言,我们可以认为其VC维很高,即能把很多很多样本都能完全分开。丰富的VC维也可能使得网络陷入过拟合状态。

四、CNN:

卷积神经网络:

卷积:通过函数f和g生成第三个函数的一种数学算子,表征了函数f与g经过翻转和平移的重叠部分的面积。

卷积核:

F(x)=wx+b 即对原有的像素点进行相乘(*w)最后再加上b就是最终一次卷积的结果。其中,w是一组向量。

卷积层参数:

padding填充:通常是填充0,其作用是:保护边界信息;弥补尺寸差异。

Stride步幅:即每次卷积核滑动的单位。Stride会影响计算的次数和时间,以及下一层的参数数目。

卷积层已经提取过一次特征。

池化层:max-pool与mean-pool,仍然有stride这个参数。

如果在上一层传过来的数据如下所示,并使用stride=2,2*2的核去max-pooling:

池化层又对特征进行了一次提取,进一步获取更抽象的信息;防止过拟合。

保持不变性,容忍图像的少量平移,旋转以及缩放。

局部感知野:

权值共享:

在全局图像中选定一个8*8的小样本,并且用这个小样本学习到一些特征,之后可以利用这些学到的特征应用到全局图像的其他位置上,卷积,可以得到这些特征在图像所有区域的不同响应值,得到卷积后的新图像。 不同的卷积核可以提取不同的如边缘信息、梯度信息等

下采样:

取最大值和平均值分别为最大池化和平均池化。池化的区域不发生重叠,但是权值共享可能重叠。

下采样的方法降低了特征的维度大小。

CNN的典型模型:VGG-16(visual geometry group)其中有16个带有参数的网络层。

激励函数:

1、Sigmoid

y=1/1+e(-z)  z=wTx

2、Softmax

信息熵:信息的杂乱程度或意外程度的量化。熵越小越容易分类。

Softmax使用的损失函数叫做:交叉熵

好像在做逻辑回归,对于每一种分类都是伯努利分布

信息熵:事件越不可能发生,信息量越大。

五、独热编码:one-hot encoding

在一个维度上有着大小关系,在这样设定表示对象的过程的中这种关系被强给了这些对象。

[1,0,0,0,0]这样的形式,可以形成正交的维度。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档