卷积神经网络的应用:
卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别

     

分类                        相似图像搜索                                  目标识别                               语义分割

卷积神经网络与神经网络的形状对比, 卷积是有厚度的

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

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.池化层的反向传播的更多相关文章

  1. 深度学习原理与框架-递归神经网络-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, ...

  2. 深度学习原理与框架-递归神经网络-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)  # 构建 ...

  3. 深度学习原理与框架-递归神经网络-时间序列预测(代码) 1.csv.reader(进行csv文件的读取) 2.X.tolist(将数据转换为列表类型)

    1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...

  4. 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练

    卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...

  5. 深度学习原理与框架-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 ...

  6. 深度学习原理与框架-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_ ...

  7. 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 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表示变 ...

  8. 深度学习原理与框架-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进行响应归一化操作 参数 ...

  9. 深度学习原理与框架-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 ...

随机推荐

  1. 小程序支持打开APP

    根据微信的官方文档,小程序支持打开APP,专门研究了下这个API有什么,官方文档地址如下 https://mp.weixin.qq.com/debug/wxadoc/dev/component/but ...

  2. [UE4]使用UFUNCTION注意事项

    #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include ...

  3. linux下软件安装知识整理

    一.软件包安装分类源码包二进制包(RPM包,系统默认包)源码包优点1.开源 可以自由选择所需的功能    软件是编译安装,适合自己系统,更加稳定,效率更高    卸载方便 缺点 安装过程步骤较多,容易 ...

  4. Mybatis 系列6-结合源码解析节点配置:objectFactory、databaseIdProvider、plugins、mappers

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  5. SQL SERVER 事务相关

    1 准备数据 及 涉及到的几个设置 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  --设置事务会话的隔离等级(默认值为 READ UNCOMMIT ...

  6. 第8章 传输层(7)_TCP连接管理

    7. TCP连接管理 7.1 TCP的连接建立 (1)三次握手 ①三次握手过程 A.第1.2次握手,数据包的SYN均为1,表示用于同步.即第1次客户端发起请求,并将自己的连接参数(如接收窗口大小.MS ...

  7. Hadoop简介与分布式安装

    Hadoop的基本概念和分布式安装: Hadoop 简介 Hadoop 是Apache Lucene创始人道格·卡丁(Doug Cutting)创建的,Lucene是一个应用广泛的文本搜索库,Hado ...

  8. Spark2.X环境准备、编译部署及运行

    下载地址 :https://www.apache.org/dyn/closer.lua/spark/spark-2.2.0/spark-2.2.0.tgz 我们把spark放在节点2上 解压 下面我们 ...

  9. 小朋友学C语言(6)

    (一) 先动手编写一个程序: #include <stdio.h> int main() { if(1) { printf("The condition is true!\n&q ...

  10. CSS浏览器兼容性与解决

    一.超链接访问后hover样式不出现 1.现象描述: 同时设置了a:visited和a:hover样式,但一旦超链接点击过后,hover的样式就不再出现了. 2.解决方法: 调整样式顺序为先a:vis ...