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

学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层的更多相关文章

  1. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  2. 【python实现卷积神经网络】池化层实现

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  3. 【深度学习篇】--神经网络中的池化层和CNN架构模型

    一.前述 本文讲述池化层和经典神经网络中的架构模型. 二.池化Pooling 1.目标 降采样subsample,shrink(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合)减少输 ...

  4. tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图

    tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...

  5. 学习笔记TF052:卷积网络,神经网络发展,AlexNet的TensorFlow实现

    卷积神经网络(convolutional neural network,CNN),权值共享(weight sharing)网络结构降低模型复杂度,减少权值数量,是语音分析.图像识别热点.无须人工特征提 ...

  6. CNN学习笔记:卷积神经网络

    CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...

  7. tensorflow学习笔记七----------卷积神经网络

    卷积神经网络比神经网络稍微复杂一些,因为其多了一个卷积层(convolutional layer)和池化层(pooling layer). 使用mnist数据集,n个数据,每个数据的像素为28*28* ...

  8. CNN学习笔记:卷积运算

    CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...

  9. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

随机推荐

  1. linux用户管理 查看用户信息

    LINUX系统中用户登录查看命令 W命令 [root@ssgao1987 ~]# w 04:57:01 up 11:50,  2 users,  load average: 0.00, 0.00, 0 ...

  2. linux nginx 安装防火墙ngx_lua_waf

    ngx_lua_waf是一款开源的 基于 ngx_lua的 web应用防火墙 github地址是  https://github.com/loveshell/ngx_lua_waf 安装流程如下 1 ...

  3. 未来Linux系统将是运维行业必备的技能之一

    关于linux,这个并不是每个人都能用或者需要用的,因为平时有很多人用电脑只是为了上上网,聊聊天,打打游戏,这个是完全不需要用linux的.关于linux,是不能用正常的大家所熟知的window来认知 ...

  4. vue-14-过滤

    过滤器可以用在两个地方:mustache 插值和 v-bind 表达式 <!-- in mustaches --> {{ message | capitalize }} <!-- i ...

  5. Java面向对象习题

    1: 抛出异常:throw声明异常:throwsthrow用于在程序中抛出异常,throws用于在方法内抛出异常.throw抛出的异常没有被处理的话必须有throws有throws ,但是不一定必须有 ...

  6. Dell灵越 5559笔记本安装固态硬盘 BIOS设置

    固态硬盘的安装这里就不详细说明了,安装一共有两种 直接把原有的磁盘卸了,换成SSD(这种方法最简单) 另一种是把光驱卸掉,然后换上SSD(这里建议把原来的磁盘换到光驱里面,把SSD加到原来磁盘安装的位 ...

  7. org.quartz-scheduler 动态添加自动任务

    1.添加pom.xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId> ...

  8. C代码与C++代码之间的相互调用

    1.showCpp.cpp #include <iostream> using namespace std; // 声明为C语言可以调用的函数 extern "C" v ...

  9. 使用OpenBTS基站测试物联网模块安全性

    0×00 引子 近年来,随着云计算.物联网技术的快速发展,物联网的理念和相关技术产品已经广泛渗透到社会经济民生的各个领域,越来越多的穿戴设备.家用电器通过蓝牙.Wi-Fi.Li-Fi.z-wave.L ...

  10. Python中列表、元组、集合、字典

    Python 列表(List) 列表是最常用的Python数据类型: 列表中的数据项不需要具有相同的类型: 列表也叫做数组,定义时使用[]: 通过下标访问列表中的元素,下标从 0  开始计数 列表的增 ...