学习笔记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 ...
随机推荐
- It is never too late!
整理着过去的学习笔记,零零碎碎的,偶尔夹杂着当时的心境. 泛泛的学着东西,不很系统,不很深入,倒像是在拾海,有时捡捡贝壳,有时抓抓螃蟹.叹服大海的神奇,还没来得及深钻某个领域. (以下内容写于2016 ...
- 今天心情大好,在bluemix部署了一个hell-oworld。
虽然不是什么很NB的事情. 但是已经开始了. 基于kubernetes容器技术,在kubernetes集群中部署docker镜像hello-world,并正确映射到集群的80端口. 听着老TM复杂了. ...
- Linux文件管理常用命令用法总结
1.touch change file timestamps. 命令用于修改文件或者目录的时间属性,包括存取时间和更改时间.若文件不存在,系统会建立一个新的文件.stat,ls -l 可以显示档案的时 ...
- python三目运算符
python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种if语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expressi ...
- win10 安装 mysql-8.0.12
安装mysql 8 1.下载 https://dev.mysql.com/downloads/mysql/ 2.设置环境变量 将你解压后的文件里边的bin目录加入到path中.例如:D:\develo ...
- Android开发 ---如何操作资源目录中的资源文件2
Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...
- synchronized 和 ReentrantLock 区别
synchronized 使用: 1:当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁.结果,其它线程对该object对象所有同步代 ...
- shell脚本实例-mysql多机部署
今天我给大家分享shell 安装mysql 多机部署的实例,本次实验是基于各个主机的公钥已经配置好了,如果还不会推送公钥的同学,可以看看我以前写的文章,那里面有写推公钥的实例,mysql 多机部署一般 ...
- delphi reintroduce作用
当在子类中重载或者重新声明父类的虚方法时,使用 reintroduce 关键字告知编译器,可以消除警告信息. 如: TParent = class procedure proc;virtual; ...
- Python数据分析库pandas基本操作
Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...