深度学习:卷积神经网络CNN变体

http://blog.csdn.net/pipisorry/article/details/76573696

带步幅的多通道巻积

很多时候,我们输入的是多通道图像。如RGB三通道图像,下图就是。也有可能我们出于特定目的,将几张图组成一组一次性输入处理。

多通道巻积

假定我们有一个 4 维的核张量 K,它的每一个元素是 K i,j,k,l ,表示输出中处于通道 i 的一个单元和输入中处于通道 j 中的一个单元的连接强度,并且在输出单元和输入单元之间有 k 行 l 列的偏置。假定我们的输入由观测数据 V 组成,它的每一个元素是 V i,j,k ,表示处在通道 i 中第 j 行第 k 列的值。假定我们的输出 Z 和输入V 具有相同的形式。如果输出 Z 是通过对 K 和 V 进行卷积而不涉及翻转 K 得到的,那么

这里对所有的 l,m 和 n 进行求和是对所有(在求和式中)有效的张量索引的值进行求和。在线性代数中,向量的索引通常从 1 开始,这就是上述公式中 −1 的由来。但是像 C 或 Python 这类编程语言索引通常从 0 开始,这使得上述公式可以更加简洁。

带步幅巻积

我们有时会希望跳过核中的一些位置来降低计算的开销(相应的代价是提取特征没有先前那么好了)。我们可以把这一过程看作是对全卷积函数输出的下采样(downsampling)。如果我们只想在输出的每个方向上每间隔 s 个像素进行采样,那么我们可以定义一个下采样卷积函数 c 使得

我们把 s 称为下采样卷积的 步幅(stride)。当然也可以对每个移动方向定义不同的步幅。

示例

对于这种情况,这时一个过滤器或卷积核其实对应的是x个卷积核(对应x通道)和一个偏置量,如下图中的W0W1一个通道中的某个区域(蓝框)和它对应的卷积核(红框)做卷积,多个通道的卷积结果线性相加,再加上偏置量(最下的单个红框),得到卷积结果(最右列中心的绿色框)。下图的卷积层包含2个多通道卷积核W0W1,所以结果为2个绿色矩阵。而该卷积层的输出对于下一卷积层一定程度上也就可以说是2通道,处理方式也是类似。

下面的动画显示了包含两个filter的卷积层的计算。我们可以看到7*7*3输入,经过两个3*3*3filter的卷积(步幅为2),得到了3*3*2的输出。另外我们也会看到下图的Zero padding是1,也就是在输入元素的周围补了一圈0。Zero padding对于图像边缘部分的特征提取是很有帮助的。

以上就是卷积层的计算方法。这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且filter的权值对于上一层所有神经元都是一样的。对于包含两个3*3*3的fitler的卷积层来说,其参数数量仅有(3*3*3+1)*2=56个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。

示例中图和公式9.8对应关系。

[cs231 Convolutional Neural Networks]

[卷积神经网络CNN基本概念笔记]

from: http://blog.csdn.net/pipisorry/article/details/76573696

ref:

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习卷积神经网络CNN做手写体识别的VS代码。支持linux版本和VS2012版本。 tiny-cnn: A C++11 implementation of convolutional neural networks ======== tiny-cnn is a C++11 implementation of convolutional neural networks. design principle ----- * fast, without GPU 98.8% accuracy on MNIST in 13 minutes training (@Core i7-3520M) * header only, policy-based design supported networks ----- ### layer-types * fully-connected layer * convolutional layer * average pooling layer ### activation functions * tanh * sigmoid * rectified linear * identity ### loss functions * cross-entropy * mean-squared-error ### optimization algorithm * stochastic gradient descent (with/without L2 normalization) * stochastic gradient levenberg marquardt dependencies ----- * boost C++ library * Intel TBB sample code ------ ```cpp #include "tiny_cnn.h" using namespace tiny_cnn; // specify loss-function and optimization-algorithm typedef network CNN; // tanh, 32x32 input, 5x5 window, 1-6 feature-maps convolution convolutional_layer C1(32, 32, 5, 1, 6); // tanh, 28x28 input, 6 feature-maps, 2x2 subsampling average_pooling_layer S2(28, 28, 6, 2); // fully-connected layers fully_connected_layer F3(14*14*6, 120); fully_connected_layer F4(120, 10); // connect all CNN mynet; mynet.add(&C1); mynet.add(&S2); mynet.add(&F3); mynet.add(&F4); assert(mynet.in_dim() == 32*32); assert(mynet.out_dim() == 10); ``` more sample, read main.cpp build sample program ------ ### gcc(4.6~) without tbb ./waf configure --BOOST_ROOT=your-boost-root ./waf build with tbb ./waf configure --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build with tbb and SSE/AVX ./waf configure --AVX --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build ./waf configure --SSE --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build or edit inlude/config.h to customize default behavior. ### vc(2012~) open vc/tiny_cnn.sln and build in release mode.
一维卷积神经网络CNN-1D)结合LSTM是一种常用的深度学习模型,用于处理序列数据。在这个模型中,CNN-1D用于提取序列数据中的局部特征,而LSTM用于捕捉序列数据中的长期依赖关系。 CNN-1D是基于传统的二维卷积神经网络CNN)的一种变体,主要用于处理一维的序列数据。它通过在一维序列上滑动一个卷积核,提取局部特征并生成特征图。这些特征图可以捕捉到序列数据中的局部模式。然后,这些特征图经过池化层进行下采样,减少特征图的维度。最后,通过全连接层将提取到的特征映射到预测结果上。 LSTM则是一种递归神经网络(RNN)的特殊形式,用于处理序列数据中的长期依赖关系。它通过在每个时间步中维护一个记忆单元,可以捕捉到序列数据中的时间依赖关系。每个LSTM单元包含一个输入门、一个遗忘门和一个输出门,通过门机制来控制信息的流动。这使得LSTM能够有效地处理序列数据,特别是长序列。 结合CNN-1D和LSTM可以充分利用二者的优势。CNN-1D可以提取序列数据中的局部特征,而LSTM可以捕捉到序列数据中的长期依赖关系。通过结合二者,可以提高模型对序列数据的建模能力和预测准确性。 同样地,将CNN-1D与GRU结合也可以得到类似的效果。GRU是RNN的另一种变体,与LSTM类似,可以用于处理序列数据中的长期依赖关系。GRU相较于LSTM结构更加简化,计算效率更高。因此,将CNN-1D与GRU结合也能够有效地处理序列数据。 总之,通过将CNN-1D与LSTM或GRU结合,可以更好地对序列数据进行建模,提高模型的预测准确性。这种结合可以应用于许多领域,如自然语言处理、音频处理和时间序列分析等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值