学习笔记TF013:卷积、跨度、边界填充、卷积核
卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量。tf.nn.conv2d完成卷积运算。卷积核(kernel),权值、滤波器、卷积矩阵或模版,filter。权值训练习得。卷积核(filter参数)权值数量决定需要学习卷积核数量。通道,计算机器视觉,描述输出向量。RGB图像,3个代表秩1张量[red,green,blue]通道。输出与input_batch同秩张量,与卷积核维数相同。两个张量卷积生成特征图(feature map)。特征图为输出添加新层代表张量卷积。访问输入批数据和特征图元素用相同索引,可了解输入与kernel卷积运算值变化。层,输出新维度。
计算机视觉卷积价值,修改卷积核strides(跨度)参数实现输入降维。strides参数使卷积核无需遍历每个输入元素,跳过部分图像像素。kernel在input_batch滑动,跨过部分元素,每次移动以input_batch一个元素为中心。位置重叠值相乘,乘积相加,得卷积结果。逐点相乘,整合两个输入。设置跨度,调整输入张量维数。降维减少运算量,避免重叠感受域。strides参数格式与输入向量相同(image_batch_size_stride、image_height_stride、image_width_stride、image_channels_stride)。
边界填充,卷积核与图像尺寸不匹配,填充图像缺失区域。TensorFlow用0填充。padding参数控制conv2d零填充数或错误状态。SAME:卷积输出输入尺寸相同,不考虑滤波器尺寸,缺失像素填充0,卷积核扫像素数大于图像实际像素数。VALID:考虑滤波器尺寸。尽量不越过图像边界,也可能边界被填充。
data_format修改数据格式。NHWC指定输入输出数据格式,[batch_size(批数据张量数)、in_height(批数据张量高度)、in_width(批数据张量宽度)、in_channels(批数据张量通道数)]。NCHW指定输入输出数据格式,[batch_size、in_channels、in_height、in_width]。
TensorFlow滤波器参数指定输入卷积运算卷积核。滤波器使用特定模式突出图像中感兴趣特征。图像与边缘检测卷积核的卷积输出是所有检测边缘区域。tf.minimum和tf.nn.relu使卷积值保持在RGB颜色值合法范围[0,255]内。卷积核初值随机设定,训练迭代,值由CNN学习层自动调整,训练一迭代,接收图像,与卷积核卷积,预测结果与图像真实标签是否一致,调整卷积核。
import tensorflow as tf
input_batch = tf.constant([
[#第1个输入
[[0.0],[1.0]],
[[2.0],[3.0]]
],
[#第2个输入
[[2.0],[4.0]],
[[6.0],[8.0]]
]
])
print input_batch
kernel = tf.constant([
[
[[1.0, 2.0]]
]
])
print kernel
conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1], padding='SAME')#conv2d卷积运算
print conv2d
sess = tf.Session()
print sess.run(conv2d)
lower_right_image_pixel = sess.run(input_batch)[0][1][1]
lower_right_kernel_pixel = sess.run(conv2d)[0][1][1]
print lower_right_image_pixel, lower_right_kernel_pixel
input_batch2 = tf.constant([
[#第1个输入(6x6x1)
[[0.0],[1.0],[2.0],[3.0],[4.0],[5.0]],
[[0.1],[1.1],[2.1],[3.1],[4.1],[5.1]],
[[0.2],[1.2],[2.2],[3.2],[4.2],[5.2]],
[[0.3],[1.3],[2.3],[3.3],[4.3],[5.3]],
[[0.4],[1.4],[2.4],[3.4],[4.4],[5.4]],
[[0.5],[1.5],[2.5],[3.5],[4.5],[5.5]]
]
])
print input_batch2
kernel2 = tf.constant([#卷积核(3x3x1)
[[[0.0]], [[0.5]], [[0.0]]],
[[[0.0]], [[1.0]], [[0.0]]],
[[[0.0]], [[0.5]], [[0.0]]]
])
print kernel2
conv2d2 = tf.nn.conv2d(input_batch2, kernel2, strides=[1, 3, 3, 1], padding='SAME')
print conv2d2
print sess.run(conv2d2)
lower_right_image_pixel2 = sess.run(input_batch2)[0][1][1]
lower_right_kernel_pixel2 = sess.run(conv2d2)[0][1][1]
print lower_right_image_pixel2, lower_right_kernel_pixel2
input_batch3 = tf.constant([
[#第1个输入(6x6x1)
[[0.0,1.0,2.0],[1.0,2.0,3.0]],
[[0.1,1.1,2.1],[1.1,2.1,3.1]],
[[0.2,1.2,2.2],[1.2,2.2,3.2]],
[[0.3,1.3,2.3],[1.3,2.3,3.3]],
[[0.4,1.4,2.4],[1.4,2.4,3.4]],
[[0.5,1.5,2.5],[1.5,2.5,3.5]]
]
])
print input_batch3
kernel3 = tf.constant([
[
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
],
[
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[8., 0., 0.],[0., 8., 0.],[0., 0., 8.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
],
[
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
]
])
print kernel3
conv2d3 = tf.nn.conv2d(input_batch3, kernel3, strides=[1, 1, 1, 1], padding='SAME')
print conv2d3
activation_map3 = sess.run(tf.minimum(tf.nn.relu(conv2d3), 255))
print activation_map3
lower_right_image_pixel3 = sess.run(input_batch3)[0][1][1]
lower_right_kernel_pixel3 = sess.run(conv2d3)[0][1][1]
print lower_right_image_pixel3, lower_right_kernel_pixel3
kernel4 = tf.constant([
[
[[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
],
[
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[5., 0., 0.],[0., 5., 0.],[0., 0., 5.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
],
[
[[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
[[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
[[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
]
])
print kernel4
conv2d4 = tf.nn.conv2d(input_batch3, kernel4, strides=[1, 1, 1, 1], padding='SAME')
print conv2d4
activation_map4 = sess.run(tf.minimum(tf.nn.relu(conv2d4), 255))
print activation_map4
lower_right_image_pixel4 = sess.run(input_batch3)[0][1][1]
lower_right_kernel_pixel4 = sess.run(conv2d4)[0][1][1]
print lower_right_image_pixel4, lower_right_kernel_pixel4
参考资料:
《面向机器智能的TensorFlow实践》
欢迎加我微信交流:qingxingfengzi
我的微信公众号:qingxingfengzigz
我老婆张幸清的微信公众号:qingqingfeifangz
学习笔记TF013:卷积、跨度、边界填充、卷积核的更多相关文章
- CNN学习笔记:卷积运算
CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...
- CNN学习笔记:卷积神经网络
CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...
- 深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)
一.卷积 卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络.使用数层卷积,而不是数层的矩阵相乘.在图像的处理过程中,每一张图片都可以看成一张“ ...
- 学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层
CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有 ...
- 学习笔记TF027:卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN),可以解决图像识别.时间序列信息问题.深度学习之前,借助SIFT.HoG等算法提取特征,集合SVM等机器学习算法识别图像 ...
- 【学习笔记】卷积神经网络 (CNN )
前言 对于卷积神经网络(cnn)这一章不打算做数学方面深入了解,所以只是大致熟悉了一下原理和流程,了解了一些基本概念,所以只是做出了一些总结性的笔记. 感谢B站的视频 https://www.bili ...
- 学习笔记TF052:卷积网络,神经网络发展,AlexNet的TensorFlow实现
卷积神经网络(convolutional neural network,CNN),权值共享(weight sharing)网络结构降低模型复杂度,减少权值数量,是语音分析.图像识别热点.无须人工特征提 ...
- 学习笔记TF012:卷积网络简述
ImageNet http://www.image-net.org ,图像标注信息数据库.每年举办大规模视觉识别挑战赛(ILSVRC).基于ImageNet数据库构建完成目标自动检测分类任务系统.20 ...
- Laravel5.1学习笔记18 数据库4 数据填充
简介 编写数据填充类 使用模型工厂类 调用额外填充类 执行填充 #简介 Laravel includes a simple method of seeding your database with t ...
随机推荐
- flask项目结构(四)使用sqlalchemy和alembic
简介 其实我不是啥正经人,错了,不是啥正经程序员,所能想到的估计也就码农一级吧,高级程序员,搞什么算法,什么人工智能,大数据计算…………离我还太遥远. 但是这并不妨碍我继续学习,继续写垃圾小程序. 反 ...
- Python发送四种格式的post请求的代码样例
x-www-form-urlencoded: path = "/api/v1/topics/update"params={'accesstoken':'d38a77f0-6f29- ...
- 内存布局:栈,堆,BSS段(静态区),代码段,数据段
简介 我们程序运行的时候都是放在内存里的.根据静态.成员函数.代码段.对象.等等.放在不同的内存分块里.大概分为5块 1 栈 2 堆 3 BSS段-全局区-(静态区) 4 代码段 5 数据段 栈 ...
- ios表单上传图片或文件
http://www.cocoachina.com/bbs/read.php?tid-89985-page-1.html http://www.jianshu.com/p/44629e5bf986 h ...
- c#继承中的函数调用实例
using System; namespace Test { public class Base { public void Print() { ...
- springmvc跳转到自定义404页面的三种方法
有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转 有三种方法可以实现 方法一:最简单的实现,也是最快的 在<web-app>节点下配置 代码如下: &l ...
- 使用OpenBTS基站测试物联网模块安全性
0×00 引子 近年来,随着云计算.物联网技术的快速发展,物联网的理念和相关技术产品已经广泛渗透到社会经济民生的各个领域,越来越多的穿戴设备.家用电器通过蓝牙.Wi-Fi.Li-Fi.z-wave.L ...
- 使用grafana cli重置grafana密码
Grafana CLIgrafana cli是grafana server自带的一个小巧的二进制工具,用来在运行grafana server的机器上执行命令.插件grafana cli工具允许你安装升 ...
- 日期和API
Java1.0对日期和时间的支持只能依赖java.util.Date类,年份的起始选择是1900你那,月份的起始是从0开始计算的.它的返回值中包含了JVM的默认市区CET,即中欧时间.在Java1.1 ...
- HDU1253-胜利大逃亡 (三维BFS)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1253 胜利大逃亡 Time Limit:4000/2000MS(Java/Others)Memory ...