[翻译5.3] Common Layers (上)





2017年8月19日星期六整理第五章部分

此处给出本节的代码:https://github.com/Leechen2014/TensorFlow-for-Machine-Intelligence

相关的文件描述在github中给出。

PS:翻译来源:

http://shop.oreilly.com/product/9781939902351.do




PS: 我发现:  最近发现,短文比较好一些。 如果按照章节来上传文章,会导致文章太长。 我也没有写摘要。而且在翻译的时候我会有一些自己的想发。

于是决定:从5.3 以后的每个章节会给出自己的写的摘要,同时会以PS的方式给出自己对作者这句话的理解。文中有翻译不恰当的地方,请大家多多批评指教。另外给出我的邮箱。如果有想要一起翻译并研读机器学习的同学请发邮件给我: zhen_2016@qq.com;   多谢了


摘要:

5.3Common Layers 会 以上下两部分发布。

上部分主要涉及  tf的卷积以及 激活函数 的操作与实现

下部分 主要涉及 池化层的实现以及 Normalization 和High Level Layers



对于要被认为是CNN的神经网络架构而言,它需要至少一个卷积层(tf.nn.conv2d)。才能称为CNN。单层的CNN有着实际应用(边缘检测),而对于图像的识别和分类,通常使用的是不同类型的layer来支持卷积层的。这些layers会有助于减少过拟合、加速训练、降低对内存使用。

本章中涵盖的层次集中在CNN架构中常用的layer上。这些layer不限于仅应用于CNN,他们还可以为其他的网络架构设计的层混合使用。

Convolution Layers(tf.nn.conv2d)

tf.nn.conv2d是卷积层的一种类型,它在前面的章节中已被详细描述。但是对于高水平的用户还是有一些有用的notes。Tensorflow中的卷积层并不会做完全的卷积,详细的内容可以到Tensorflow

API 说明文档中找到。在实践中,性能是tensorflow的操作和卷积的差异。TensorFlow使用一种技术来加速所有不同类型的卷积层的卷积运算。

每种类型的卷积层都有用例,但是tf.nn.conv2d是一个很好的起点。其他类型的卷积在构建能够进行对象识别和分类的网络中是有用的但不是必需的。包括每个的简要摘要。


tf.nn.depthwise_conv2d

当需要一个卷积的输出作为另一个卷积的输入的时候,可以使用这种卷积。这里有一个使用该卷积按照inception 结构来创建网络结构的高级用例。


tf.nn.separable_conv2d

这个卷积类的作用和tf.nn.conv2d相似,但是并不可以替代tf.nn.conv2d。对于较大的模型,我们可以用它来替代tf.nn.conv2d却不牺牲精度。对于小型模型,它将会以差的精度快速收敛。


tf.nn.conv2d_transpose

这将内核应用于新功能图(特征图,feature map),其中每个部分都填充与内核相同的值。随着内核跨越新的图像,任何重叠的部分都被合并在一起。Stanford’s

CS231n Winter 2016: Lecture 13中有关于如何tf.nn.conv2d_transpose对可学习的上采样(upsampling)有何作用的例子。




Activation Functions


这些函数(function)与其他层的输出结合使用可以生成特征图(feature map)。它们可用于平滑或可微(smooth or differentiate:PS这里涉及一点点高数的知识:函数如果可导的充要条件是函数的图像是光滑的)某些操作的结果。其目的是为了将非线性引入神经网络中。非线性意味着输入的是曲线而不再是直线。(PS:如果是直线的话,我们可以近似的看做离散值或者直接映射成输入即可)。曲线能够表示更复杂的输入变化。例如,非线性输入能够描述在大多数时间内保持较小的输入,但是周期性地具有极端的单个点。在神经网络中引用非线性可以使得网络通过训练在数据中发现复杂的模式(patterns)。

TensorFlow具有多种激活函数(TensorFlowhasmultiple activation functionsavailable)。在CNN中主要使用的是tf.nn.relu,这是因为它可以通过丢失必要的信息来提升性能。当开始学的时候(When starting out),建议使用tf.nn.relu,但高级用户可能会创建自己的激活函数。这个时候需要考虑激活功能是否可用(),有几个主要的考虑因素。


这些函数(function)与其他层的输出结合使用可以生成特征图(feature map)。它们可用于平滑或可微(smooth or differentiate:PS这里涉及一点点高数的知识:函数如果可导的充要条件是函数的图像是光滑的)某些操作的结果。其目的是为了将非线性引入神经网络中。非线性意味着输入的是曲线而不再是直线。(PS:如果是直线的话,我们可以近似的看做离散值或者直接映射成输入即可)。曲线能够表示更复杂的输入变化。例如,非线性输入能够描述在大多数时间内保持较小的输入,但是周期性地具有极端的单个点。在神经网络中引用非线性可以使得网络通过训练在数据中发现复杂的模式(patterns)。

TensorFlow具有多种激活函数(TensorFlowhasmultiple activation functionsavailable)。在CNN中主要使用的是tf.nn.relu,这是因为它可以通过丢失必要的信息来提升性能。当开始学的时候(When starting out),建议使用tf.nn.relu,但高级用户可能会创建自己的激活函数。这个时候需要考虑激活功能是否可用(),有几个主要的考虑因素。

1.该函数应该是单调(monotonic)的,因此其输出应随着输入的增加而逐渐增加。这个性质可以使得梯度下降优化来搜索局部最小值。

2.该函数应该是可导(differentiable)的,所以在函数域中的任何一点必须有一个导数。这使得梯度下降优化使用此类型的激活函数的时候可以正常输出。

能满足以上条件的函数都可以考虑成为激活函数。在TensorFlow中不值得一提,毕竟是CNN架构中常见的内容。每个的简要摘要都包含在一个小示例代码中,说明其用法。


tf.nn.relu

rectifier (rectified linear unit ),在一些文档中被叫做斜坡函数(a ramp

function),当绘制时看起来像一个滑板坡道。ReLu保持输入的任何正数都是有线性的输出而设置的所有负面的数字是0。他的优点不会受到梯度消失(gradientvanishing),并且就有[ 0,正无穷]的输出范围。ReLu的缺点是当使用较大的学习率时,它可能遭受神经元饱和。


在这个示例中,代码执行的输出结果是:


在这个例子中,输入中的整数值[-2,3]之间的一个张量(向量)。tf.nn.relu函数运行的时候,输出高亮显示任何小于0的值被设置为0的值。其他输入值保持不变。


tf.sigmoid

sigmoid函数的返回值的范围在[0.0, 1.0]。传递给sigmoid函数的值越大,输出的值越靠近1.0;当输入的值越小,输出的值越靠近0.0。sigmoid可以把任何值保持在[0.0, 1.0]范围内。这种能力对于训练在[0,1]范围内的概率的网络中是有用的。然而,输出值的减小范围可能会导致输入饱和和输入变化过大的麻烦。



执行以上程序后的输出结果是:



在这个例子中,整数的范围被转换为浮点值(1变为1.0),Sigmoid函数在输入要素上运行。结果表明,当0.0的值通过S形,结果为0.5,这是类似物的域的中点。需要注意的是,0.5是S形的中点,负值可以用作S形的输入。


tf.tanh


双曲正切函数(tanh)与tf.sigmoid是比较接近,具有一些相同的优点和缺点。tf.sigmoid和tf.tanh之间的主要区别在于:tf.tanh的范围是[-1.0, 1.0]。在某些网络架构中输出负值的能力可能是有用的。




以上程序的输出结果是:



在本示例中,所有设置参数与tf.sigmoid示例相同,但输出显示了重要的区别。在tf.tanh的输出中,中点为0.0,为负值。如果网络中的下一层没有对负数或者是0.0的输入做出异常判断,则会导致程序出现故障。


tf.nn.dropout

基于可配置的概率将输出设置为0.0。这个层在有些随机性有助于训练的情况下表现良好。下面会给出一个示例性的情况:当被学习的模式与其相邻功能太紧时。这个层会对正在学习的输出增加一点噪音。

注意:该层只能在训练中使用,因为它添加的随机噪声在测试时会产生误导性的结果。



以上示例的输出结果是:



在这个例子中,输出的概率保持50%。这个层的每个执行将具有不同的输出(很有可能,它有点随机)。当输出丢弃时,其值设置为0.0。

PS:这个在实际情况中会常常用到。你还记得dropOut是什么嘛。不知道的话看看知乎:

Krizhevsky等人是怎么想到在CNN里用Dropout和ReLu的?

DropOut解决过拟合问题

PS:为了更加直观的对比这几个激活函数,我在知乎上找到了这个图片,详情请见:

请问人工神经网络中的activation

function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function?

以及http://www.cnblogs.com/neopenx/p/4453161.html




PS: 给出以上涉及的函数 曲线  :)


PS: 稍后会给以下话题:

Imagesand TensorFlow

CNNImplementation

Conclusion

有点累了, 上传太费时间了。 为什么jianshu 只有android ios 的客户端呢?  我要去打球 :)

by 2017年 8月19日 晚上8点2o......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容