卷积与反卷积
来源:互联网 发布:程序员美剧 编辑:程序博客网 时间:2024/05/18 01:42
以下属于个人见解和总结,不妥之处还望指教。
[Toc]
卷积(Convolution)
卷积定义:图像中的卷积,可以理解为在空间位置上,进行加权叠加。
——[图片来源]
假设输入特征层feature map的大小为
注:
inputn=channel , 卷积核深度等于输入特征层的深度- 卷积后的特征层的深度等于
outputn ,及卷积核的个数
计算机在做卷积操作的时候,实际上,是转化为矩阵乘法操作,假设输入矩阵为
例如:其中假设
转化为16维向量,
卷积核
转化成稀疏矩阵为:
从而,通过矩阵运算
进一步,我们可以理解到,神经网络在做inference正向传播的时候,利用上述公式
反卷积
假设输入特征层feature的大小为
例如,一张大小为5x5的图像, 经过(3x3)卷积核,
假设一:padding为1, stride为2,则经过卷积后图像的大小为
而,反卷积后的图像大小为
等于输入图像的大小。
假设二:stride为3,padding为1, 则经过卷积后图像的大小为
而在经过反卷积后图像变为
假设三:stride为2, padding为2,则经过卷积后图像大小为:
而在经过反卷积后图像变为
假设四:stride为3,padding为2, 则经过卷积后图像大小为:
而在经过反卷积后图像变为
注:当
tensorflow中的卷积和反卷积操作
import numpy as npimport tensorflow as tfx1 = tf.constant(1.0, dtype=tf.float32, shape=[1,4,4,1])kernel = tf.constant(1.0, dtype=tf.float32, shape=[3,3,1,1])y1 = tf.nn.conv2d(x1, kernel, strides=[1,1,1,1], padding='SAME')y1_t = tf.nn.conv2d_transpose(y1, kernel, output_shape=[1,4,4,1], strides=[1,1,1,1], padding='SAME')sess = tf.Session()print('x1 = {}'.format(np.squeeze(sess.run(x1))))print('kernel = {}'.format(np.squeeze(sess.run(kernel))))print('y1 = {}'.format(np.squeeze(sess.run(y1))))print('y1_t = {}'.format(np.squeeze(sess.run(y1_t))))
输出结果为:x1 = [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]]kernel = [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]]y1 = [[ 4. 6. 6. 4.] [ 6. 9. 9. 6.] [ 6. 9. 9. 6.] [ 4. 6. 6. 4.]]y1_t = [[ 25. 40. 40. 25.] [ 40. 64. 64. 40.] [ 40. 64. 64. 40.] [ 25. 40. 40. 25.]]
阅读全文
1 0
- 卷积与反卷积
- 卷积与反卷积
- 卷积与反卷积
- 卷积与反卷积
- 卷积与反卷积动图
- 卷积与反卷积的理解
- 深度学习中的卷积与反卷积
- 深度学习中的卷积与反卷积
- 深度学习中的卷积与反卷积
- CNN-卷积反卷积
- CNN-卷积反卷积
- 反卷积与棋盘效应
- 反卷积与语义分割
- 反卷积与语义分割
- 反卷积
- 反卷积
- 【神经网络与深度学习】卷积与反卷积
- 卷积神经网络CNN(1)——图像卷积与反卷积(后卷积,转置卷积)
- mac使用codelite运行程序没有输出
- 归并排序总结
- JavaScript函数向未声明的变量分配值
- Hibernate 加载策略
- NGUI_创建及Label的使用_001
- 卷积与反卷积
- Hibernate 抓取策略
- C++ 多线程 CloseHandle函数
- 判断101-200之间有多少个素数,并输出所有素数。
- ubuntu16虚拟机设置静态ip地址
- android EditText 更改边框颜色,光标颜色
- Plugin with id 'com.jfrog.bintray' not found 解决方案
- 查找文本中n个出现频率最高的单词
- Java代码注释规范_动力节点Java学院整理