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

     

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

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

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

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. java中源代码和lib库中有包名和类名都相同的类(转)

    https://blog.csdn.net/itachiwwwg/article/details/9003261 当java的源代码中出现了和系统的lib库中的包名与类名完全一样的类时,系统应当怎么加 ...

  2. tesseract 中文二次训练

    tesseract4.0以上版本可参考 https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00#tutorial- ...

  3. Jmeter(三十八)Jmeter Question 之 ‘批量执行SQL语句’

    知识使我们变得玩世不恭,智慧使我们变得冷酷无情,我们思考的太多,感知太少,除了机器,我们更需要人性,除了智慧,我们需要仁慈和善良. ------出自查理卓别林的演讲 前面有提到Jmeter使用JDBC ...

  4. 获取SQL数据库表空间结构

    if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')drop ...

  5. 第8课 列表初始化(3)_防止类型收窄、explicit关键字

    1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...

  6. mint-ui 输入框按下按键执行查询

    环境:vue.mint-ui 功能:一个输入框,按下按键之后就执行某个功能. 截图:一个输入框 输入框html: <mt-search v-model="query" can ...

  7. 删除n天前的所有目录和文件

    删除目录 find /your_dir/ -maxdepth -type d -mtime + -exec rm -rf {} \; 删除文件 find /目录/ -mtime + -name &qu ...

  8. oracle常用加解密函数

    md5 CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGI ...

  9. 微信小程序内容组件图标 icon

    小程序内置了一下图标可以用 需要自定义图标的看这里 ==>微信小程序中使用iconfont/font-awesome等自定义字体图标 小程序内置图标使用示例 <icon type=&quo ...

  10. java 怎样向一个已存在的文件中添加内容

    如果想向某个文件最后添加内容,可使用FileWriter fw = new FileWriter("log.txt",true);在创建FileWriter时加个true就可以了. ...