学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d)。单层CNN检测边缘。图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率。

TensorFlow加速所有不同类弄卷积层卷积运算。tf.nn.depthwise_conv2d,一个卷积层输出边接到另一个卷积层输入,创建遵循Inception架构网络 Rethinking the Inception Architecture for Computer Vision
https://arxiv.org/abs/1512.00567 。tf.nn.separable_conv2d,规模较大模型不牺牲准确率加速训练,规模小模型快速收敛但准确率低。tf.nn.conv2d_transpos,卷积核用于新特征图,每部分填充卷积核相同值,卷积核遍历新图像,重叠部分相加。斯坦福大学课程CS231n Winter 2016:Lecture 13。

激活函数与其他层输出生成特征图,对某些运算结果平滑(微分),为神经网络引入非线性(输入输出曲线关系),刻画输入复杂变化,训练复杂模型。激活函数主要因素,单调,输出随输入增长,可用梯度下降法找局部极值点;可微分,定义域内任意一点有导数,输出可用梯度下降法。
tf.nn.relu,修正线性单元,斜坡函数。分段线性,输入非负输出相同,输入为负输出为0。不受“梯度消失”影响,取值范围[0, +∞]。较大学习速率时,易受饱和神经元影响。损失信息但性能突出。输入秩1张量(向量),小于0置0,其余分量不变。
tf.sigmoid,只接收浮点数,返回区间[0.0, 1.0]内的值。输入值较大返回接近1.0,输入值较小返回接近0.0。适用于真实输出位于[0.0, 1.0]。输入接近饱和或变化剧烈,输出范围缩减成为问题。输入0,输出0.5,sigmoid函数值域中间点。
tf.tanh,双曲正切函数,值域[-1.0, 1.0],有输出负值能力。值域中间点为0.0。网络下层期待输入为负值或0.0,会有问题。
tf.nn.dropout,依据可配置概率输出设0.0。适合少量随机性有助于训练。keep_prob参数指定输出保持概率。每次执行,不同输出。丢弃输出设为0.0。

池化层减少过拟合,减小输入尺寸,提高性能。输入降采样,为后续层保留重要信息。池化层减小尺寸效率比tf.nn.conv2d高。
tf.nn.max_pool,跳跃遍历张量,卷积核覆盖元素最大数值作卷积结果。适合输入数据灰度与图像重要性相关。输入为前一层输出,非直接图像。跨度strides使用image_height、image_width遍历输入。只保留输入张量最大元素。最大池化(max-pooling),利用接受域(卷积核)完成。2X2接受域,单个通路最小数量降采样。1X1接受域,输出输入相同。
tf.nn.avg_pool,跳跃遍历张量,卷积核覆盖各深度值取平均。适合卷积核重要,实现值缩减。如输入张量宽度高度大,深度小。

tf.nn.relu是无界函数,归一化识别高频特征。tf.nn.local_response_normalization(tf.nn.lrn),局部响应归一化,给定向量,每个分量被depth_radius覆盖输入加权和除。输入保持在可接受范围。考虑每个值重要性。归一化输出调整到区间[-1.0, 1.0]。

高级层减少代码冗余,遵循最佳实践。
tf.contrib.layers.convolution2d。权值初始化、偏置初始化、可训练变量输出、偏置相加、添加激活函数。卷积核,可训练变量。权值初始化用于卷积核首次运行值填充(tf.truncated_normal)。简单元组形式表示卷积核高度和宽度。输入图像,tf.image.convert_image_dtype,调整各分量表示颜色值。TensorFlow要求浮点型描述图像颜色,分量在[0, 1]。
tf.contrib.layers.fully_connected。全连接层,每个输入输出存在连接。CNN最后一层常是全连接层。TensorFlow全连接层格式,tf.matmul(features,weight)+bias。输入张量与输出层每个神经元连接。

原始输入需要传递给输入层。目标识别与分类输入层tf.nn.conv2d。

import tensorflow as tf
features = tf.range(-2, 3)
print features
sess = tf.Session()
print sess.run([features, tf.nn.relu(features)])
features2 = tf.to_float(tf.range(-1, 3))
print features2
print sess.run([features2, tf.sigmoid(features2)])
print sess.run([features2, tf.tanh(features2)])
features3 = tf.constant([-0.1, 0.0, 0.1, 0.2])
print features3
print sess.run([features3, tf.nn.dropout(features3, keep_prob=0.5)])
batch_size = 1
input_height = 3
input_width = 3
input_channels = 1
layer_input = tf.constant([
        [
            [[1.0], [0.2], [1.5]],
            [[0.1], [1.2], [1.4]],
            [[1.1], [0.4], [0.4]]
        ]
    ])
print layer_input
kernel = [batch_size, input_height, input_width, input_channels]
print kernel
max_pool = tf.nn.max_pool(layer_input, kernel, [1, 1, 1, 1], "VALID")
print max_pool
print sess.run(max_pool)
layer_input2 = tf.constant([
        [
            [[1.0], [1.0], [1.0]],
            [[1.0], [0.5], [0.0]],
            [[0.0], [0.0], [0.0]]
        ]
    ])
print layer_input2
avg_pool = tf.nn.avg_pool(layer_input2, kernel, [1, 1, 1, 1], "VALID")
print avg_pool
print sess.run(avg_pool)
layer_input3 = tf.constant([
        [
            [[1.], [2.], [3.]]
        ]
    ])
print layer_input3
lrn = tf.nn.local_response_normalization(layer_input3)
print lrn
print sess.run([layer_input3, lrn])
image_input = tf.constant([
        [
            [[0., 0., 0.], [255., 255., 255.], [254., 0., 0.]],
            [[0., 191., 0.], [3., 108., 233.], [0., 191., 0.]],
            [[254., 0., 0.], [255., 255., 255.], [0., 0., 0.]]
        ]
    ])
print image_input
conv2d = tf.contrib.layers.convolution2d(
    image_input,
    num_outputs=4,
    kernel_size=(1,1),
    activation_fn=tf.nn.relu,
    stride=(1,1),
    trainable=True)
print conv2d
sess.run(tf.global_variables_initializer())
print sess.run(conv2d)
features4 = tf.constant([
        [[1.2], [3.4]]
    ])
print features4
fc = tf.contrib.layers.fully_connected(features4, num_outputs=2)
print fc
sess.run(tf.global_variables_initializer())
print sess.run(fc)

参考资料:
《面向机器智能的TensorFlow实践》

欢迎加我微信交流:qingxingfengzi
我的微信公众号:qingxingfengzigz
我老婆张幸清的微信公众号:qingqingfeifangz

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

推荐阅读更多精彩内容

  • 卷积神经网络是基于人工神经网络的深度机器学习方法,成功应用于图像识别领域。CNN采用了局部连接和权值共享,保持了网...
    dopami阅读 1,026评论 0 0
  • CNN on TensorFlow 本文大部分内容均参考于: An Intuitive Explanation o...
    _Randolph_阅读 7,674评论 2 31
  • 2017年8月19日星期六整理第五章部分 此处给出本节的代码:https://github.com/Leechen...
    斐波那契的数字阅读 1,256评论 0 1
  • 介绍 先前的教程展示了一个简单的线性模型,对MNIST数据集中手写数字的识别率达到了91%。 在这个教程中,我们会...
    Kimichen7764阅读 1,620评论 0 7
  • ①和彬彬住酒店,我先去洗澡,彬彬说拿衣服去洗衣房洗,我说好。我洗着洗着,外面什么声音都没,我一时反应,探出头往外面...
    以书为恺阅读 845评论 6 5