深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:
卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别

分类 相似图像搜索 目标识别 语义分割
卷积神经网络与神经网络的形状对比, 卷积是有厚度的

卷积在提取特征时的图像变化,从刚开始较低水平的特征图,到最后较高水平的特征图的变化,原先提取的是图片的特征,后面提取到的是一些高级的分类特征

1. 卷积的实际计算过程:假设样本的维度为N, C, H, W, 卷积的维度为F, C, H, W, F表示有几个卷积核, C表示卷积的通道,每一个卷积都与每个特征图做一次卷积操作,即对应位置相乘操作,因此样本的通道和卷积的通道必须是相同的,最后将3个通道相乘的结果,进行加和,最后加上一个b,获得一个特征图, 卷积后的维度等于N, F, H, W

第一次卷积 向右移动一个stride
代码:
# 将C通道分别进行相乘,和最后的相加操作,再加上一个b值,作为最后的输出
out[i, f, j, k] = np.sum(x_pad[i, :, j*s:j*s+HH, k*s:k*s+WW] * w[f]) + b[f]
2. 卷积的参数共享: 卷积的操作共享表示的是,对于一个特征图的卷积,只使用一个卷积核进行卷积,因此降低了参数的数量

3. 卷积后的维度计算, 卷积后的维度,第一个维度:参与卷积样本的数目N, 第二个参数F,表示卷积核的个数,
第三个参数: H_new = int(H-HH + 2*pad) / stride + 1, 第四个参数:W_new = int(W-WW + 2*pad) / stride + 1, 特征图维度W,卷积核维度WW, pad表示补零的层数,stride表示卷积核每次移动的步长

代码:
# 进行卷积后的H和W的维度计算
H_new = int((H - HH + 2*pad) / stride + 1)
W_new = int((W - WW + 2*pad) / stride + 1)
4.pool池化操作, 为了在后续的操作中,可以更好的提取特征,因此压缩了矩阵的维度,池化操作分为两种:最大值池化和均值池化, 选择选框中最大的数作为池化的结果

池化操作 最大值池化
代码:
# 将图像上卷积区域的最大值,赋值给池化后的数据
out[i, c, j, k] = np.max(x[i, c, j*s:j*s+HH, k*s:k*s+WW])
5.图像卷积的流程: 下图的卷积的流程:卷积-relu激活-卷积-relu激活-池化... 池化-全连接(进行图像的类别预测)

6. 卷积的反向传播 , 卷积的反向传播,分为dx, dw, db
对于dx = dout * w, dw = dout * x , db += dout 进行加和

代码:
# 获得前向传播的x
windows = x_pad[i, :, j*s:j*s+HH, k*s:k*s+WW]
# dw[f] = dout[i, f, j, k] * x
dw[f] += dout[i, f, j, k] * windows
# dx = dout * w
dx[i, :, j*s:j*s+HH, k*s:k*s+WW] += dout[i, f, j, k] * w[f]
# db[f] += dout[i, f, j, k]
db[f] += dout[i, f, j, k]
7. 池化的反向传播
获得前向传播的X, 构造(X == dout(i, f, j, k)) * dout(i, f, j, k),显示出[0, 0, 0, 6] 这样的矩阵

代码:
# 生成[[false, false],[false, True]]
window = (np.array(x[i, c, j*s:j*s+HH, k*s:k*s+WW]) == dout[i, c, j, k])
# [[false, false],[false, True]] * dout[i, c, j, k] = [[0, 0], [0, dout[i, c, j, k]]
out[i, c, j*s:j*s+HH, k*s:k*s+WW] = window * dout[i, c, j, k]
深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播的更多相关文章
- 深度学习原理与框架-递归神经网络-RNN_exmaple(代码) 1.rnn.BasicLSTMCell(构造基本网络) 2.tf.nn.dynamic_rnn(执行rnn网络) 3.tf.expand_dim(增加输入数据的维度) 4.tf.tile(在某个维度上按照倍数进行平铺迭代) 5.tf.squeeze(去除维度上为1的维度)
1. rnn.BasicLSTMCell(num_hidden) # 构造单层的lstm网络结构 参数说明:num_hidden表示隐藏层的个数 2.tf.nn.dynamic_rnn(cell, ...
- 深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)
问题:LSTM的输出值output和state是否是一样的 1. rnn.LSTMCell(num_hidden, reuse=tf.get_variable_scope().reuse) # 构建 ...
- 深度学习原理与框架-递归神经网络-时间序列预测(代码) 1.csv.reader(进行csv文件的读取) 2.X.tolist(将数据转换为列表类型)
1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...
- 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练
卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...
- 深度学习原理与框架-Alexnet(迁移学习代码) 1.sys.argv[1:](控制台输入的参数获取第二个参数开始) 2.tf.split(对数据进行切分操作) 3.tf.concat(对数据进行合并操作) 4.tf.variable_scope(指定w的使用范围) 5.tf.get_variable(构造和获得参数) 6.np.load(加载.npy文件)
1. sys.argv[1:] # 在控制台进行参数的输入时,只使用第二个参数以后的数据 参数说明:控制台的输入:python test.py what, 使用sys.argv[1:],那么将获得w ...
- 深度学习原理与框架-Tfrecord数据集的读取与训练(代码) 1.tf.train.batch(获取batch图片) 2.tf.image.resize_image_with_crop_or_pad(图片压缩) 3.tf.train.per_image_stand..(图片标准化) 4.tf.train.string_input_producer(字符串入队列) 5.tf.TFRecord(读
1.tf.train.batch(image, batch_size=batch_size, num_threads=1) # 获取一个batch的数据 参数说明:image表示输入图片,batch_ ...
- 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)
1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码)
1.tf.nn.lrn(pool_h1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) # 局部响应归一化,使用相同位置的前后的filter进行响应归一化操作 参数 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)
1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME') # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...
随机推荐
- Espresso小试
Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...
- uoj#119. 【UR #8】决战圆锥曲线
http://uoj.ac/problem/119 可以认为数据基本随机,于是可以直接用线段树维护,对每个询问在线段树上进行剪枝搜索. #include<bits/stdc++.h> ty ...
- Java学习——this、this()、super 和 super()的使用
编写程序:说明 this.super 和 super()的用法.程序首先定义 Point(点)类,然后创建点的子类 Line(线)),最后通过 LX7_3 类输出线段的长度. package Pack ...
- Zabbix系统中的历史数据和趋势数据
原文:http://blog.chinaunix.net/uid-9411004-id-4139807.html 或许读者还记得,我们在介绍如何创建一个监控项目时,我们介绍过在“配置项目”表单页面上有 ...
- centos 7 修改host文件
centos7与之前的版本都不一样,修改主机名在/ect/hostname 和/ect/hosts 这两个文件控制 首先修改/etc/hostname vi /etc/hostname 打开之后的内容 ...
- SCCM 2012 R2实战系列之八:OSD(上)--分发全新Windows7系统
今天将跟大家一起分享SCCM 中最为重要的一个功能---操作系统分发(OSD),在此文章中会讨论到OSD的初始化配置.镜像的导入.任务序列的创建编辑.并解决大家经常遇到的分发windows7系统分区盘 ...
- 第8章 传输层(1)_TCP/UDP协议的应用场景
1. 传输层的两个协议 1.1 TCP和UDP协议的应用场景 (1)TCP协议:如果要传输的内容比较多,需要将发送的内容分成多个数据包发送.这就要求在传输层用TCP协议,在发送方和接收方建立连接,实现 ...
- XML与 实体的相互转化
using System; using System.Linq; using System.Xml; using System.Reflection; using System.Data; using ...
- 我的常用笔记(GetAndroid,ADBDemo,GetSJ,GetTB)
一.授权相关格式(GetAndroid,ADBDemo,GetTB,GetSJ) [Mac]ID=0, Mac=9918D2A363, EndTime=2018-12-30 15:45: ...
- virt-install详解
man virt-install VIRT-INSTALL() Virtual Machine Manager VIRT-INSTALL() NAME virt-install - provision ...