深度学习之卷积神经网络CNN理论与实践详解

六月 北京 | 高性能计算之GPU CUDA培训

6月22-24日 640?wx_fmt=jpeg 三天密集式学习  快速带你入门 阅读全文 >


正文共1416个字,6张图,预计阅读时间6分钟。


概括


大体上简单的卷积神经网络是下面这个网络流程:


640?wx_fmt=jpeg

笼统的说:


文本通过Embeding Layer 后,再通过一些filters进行过滤,对结果进行maxPooling,再经过线性层映射到类别上,最后经过Softmax,得出类别分数。


细致的说:就得慢慢分析了,as follows:


第一层:将Embeding进行filter

  

设 Embeding大小为:EmbedSize


边解释专有名词边讲述过程:


Channel:    每个单词的向量是上图的对应的行。这里的一个句子形成一个二维矩阵,这里二维矩阵叫做 一个channel。


Filter:过滤器,有时候也叫做kernel。图片处理的filter大小可以根据情况选择不同的正方形的filter;而自然语言处理中,每行表示一个特征,不能分离,所以这里的filter的长为EmbedSize,而宽呢?一般设置为奇数3,4,5(这些都是经验值,当然可以设置成别的值,但是不推荐。宽为偶数的特别少见,一般不用)。这里的Filter在和计算的时候,是和Embeding矩阵对应位相乘,最后相加,得出一个结果,公式为y = W*X + b(有没有b,自己决定)最后随着滑动,得到一个新的矩阵。


Strides:    步长。也就是滑动的距离。无论向右滑动还是向下滑动都是这个大小。(因为这里的Filter长为EmbedSize,所以,这里只能向下滑动)


Filter后的输出矩阵大小为:(n-f+1)/s+1  *  1   其中n为句子的长度,f为Filter的宽,s为Stride。可以看出,不同的Filter对应的输出矩阵大小是不一样的。所以,提出Padding。


Padding:四周填充0。它的用途有两个:1.解决输出大小不一致的问题。2.解决信息丢失的问题(主要是角上的信息)。


 所以这时候的矩阵输出为:(n-f+2p+1)/s+1  *  1(p为pooling大小), 一般默认s为1,所以为了使输出的矩阵高为n,则n-f+2p+1 = n


即:p = (f-1)/2 (f为一般为奇数,所以p = (f-1)//2)


这里在pytorch里的网络层代码:


640?wx_fmt=png


最后的矩阵记得要经过一个激活函数。


数据流动:


640?wx_fmt=jpeg


第二层 MaxPooling最大池化


有时候这个也说不算是一个层,因为不含参数。


将第一层得到的m个二维矩阵,进行maxPooling,最终变成m*1的矩阵。(m为相同Filter的个数*Filter种类)


数据流动代码:


640?wx_fmt=jpeg


第三层 Fully Connected Layer全连接层


将上面的m*1维的数据进过一个线性层,映射到k*1上。(k是种类个数)


再进行Softmax,得到最终分类。


这里在pytorch里的网络层代码:

640?wx_fmt=png


数据流动代码:


640?wx_fmt=jpeg


注:代码里没有Softmax,是因为之后用到的Loss函数里默认有。


ok,这里就讲完了。最近在想CNN好想不太适合做立场检测,觉得LSTM应该更为合适,接下来系统理论的学习下LSTM网络。


原文链接:https://mp.weixin.qq.com/s/2ciOVgGXWD6474yiB3uxWg


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值