[deeplearning-008] convertional neural networks卷积神经网络

本文主要是介绍[deeplearning-008] convertional neural networks卷积神经网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.卷积神经网络的主要参考文献 


1.1  https://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247486731&idx=1&sn=f91e2361e62b0c73e34385143ad35e6a&scene=21#wechat_redirect


1.2 nature上的cnn描述
LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. "Deep learning." Nature 521.7553 (2015): 436-444.  下载 http://www.cs.toronto.edu/%7Ehinton/absps/NatureDeepReview.pdf

卷积网络,处理 以多维数组方式输入的数据(也就是张量,narture需要可读性),语音,图像,视频。一个卷积神经网络,由一系列stage组成。第一个stage有两层,卷积层和池化层。卷积层的神经元,是特征映射,每一个神经元分别对应上一层的一个局部块区,这个神经元和这个块区之间存在多个权重系数,这些权重系数通称filter bank。一个层内,同一个特征映射的神经元分享同一个filter bank,参数共享,不同的参数映射的神经元的filter bank是不同的。池化层,主要解决语义相似性问题,通常使用最大值池化方法。


1.3 dl4j对卷积神经网络的解释

https://deeplearning4j.org/convolutionalnets.html


1.4 卷积神经网络图像处理课程的解释

http://cs231n.github.io/convolutional-networks/

这个是目前解释的最好的,对应的代码也就是convnetjs。

卷积神经网络,跟其他常规神经网络的差别,首先在于输入是多通道的图像,一个三维数组--常规的神经网络结构不能处理图像。(常规神经网络是全连接的,如果图像很大,那么,权重矩阵会大到不可思议,比如100x100的图像需要1万个神经元输入层,第一个隐层神经元数量也1万数量级,那么,第一个权重矩阵就是亿级别参数,太多了。卷积神经网络这一块的设计,也就是用tensor表示多维数组,然后从前向后进行计算,再从后向前做优化,tensor-flow这个名字很妥贴。)

卷积神经网络的神经元是3维的,有宽高深。比如,输入层是32x32x3,也就是输入图像是32像素宽32像素高rgb3个通道。输出层是1x1x10,是1像素宽1像素高10像素深。从前到手,都是这种三维的数据集进行各种变化和传递。

三种主要的层:卷积层,池化层,全连接层。

输入层,神经元是三维矩阵,32x32x3,输入图像是32x32的三通道图像。

卷积层,有12个卷积核,每个卷积核有自己的参数,每个卷积核都对输入层的图像做一次卷积计算,因此,生成了一个32x32x12的三维图像,depth是12。

RELU,主要是对卷积层的数据进行一次过滤,比如类似max(0,x)处理,因为,它的输出也是32x32x12。

POLL层,RELU层的数据进行downsampling,变成16x16x12。

FC层,这一层有10个神经元,它跟前一层的所有神经元都是全连接,也就是说,FC层和POLL层的权重矩阵是10x3072个。

每一层以不同的方式生成一个不同尺寸的tensor。



2.卷积神经网络的开源实现

2.1 theano

theano用的最广,被其他包大量使用,但代码比较复杂,主要是学术用途。


2.2 convnetjs

推荐一个js的开源卷积神经网络

https://github.com/karpathy/convnetjs

git clone https://github.com/karpathy/convnetjs.git

编译:
apt-get inatall ant
cd comlile
ant -lib yuicompressor-2.4.8.jar -f build.xml


3.convnetjs的一个demo

layer_defs = [];
layer_defs.push({type:'input', out_sx:24, out_sy:24, out_depth:1});
layer_defs.push({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'});
layer_defs.push({type:'pool', sx:2, stride:2});
layer_defs.push({type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'});
layer_defs.push({type:'pool', sx:3, stride:3});
layer_defs.push({type:'softmax', num_classes:10});net = new convnetjs.Net();
net.makeLayers(layer_defs);trainer = new convnetjs.SGDTrainer(net, {method:'adadelta', batch_size:20, l2_decay:0.001});


4.本地运行convnetjs


4.1 如前所所说的进行编译。


4.2 在demo目录找到mnist.html,用firefox或者ie打开运行,不要用chrome,chrome会有跨域安全问题。在运行时,会遇到找不到一个js和两个图像问题的问题,请到作者主页的mnist demo页面找到下载然后放到demo/mnist目录下即可。mnist demo对应的源码如下:

layer_defs = [];layer_defs.push({type:'input', out_sx:24, out_sy:24, out_depth:1});layer_defs.push({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'});layer_defs.push({type:'pool', sx:2, stride:2});layer_defs.push({type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'});layer_defs.push({type:'pool', sx:3, stride:3});layer_defs.push({type:'softmax', num_classes:10});net = new convnetjs.Net();net.makeLayers(layer_defs);trainer = new convnetjs.SGDTrainer(net, {method:'adadelta', batch_size:20, l2_decay:0.001});



4.3 mnist demo的运行解释

4.3.1 input层

input(24x24x1),表示,输入是一个24x24像素的单通道图像,也就是灰度图像,如果是rgb图像,那么input就是24x24x3。

max activation:0.5,输入层对应的多个神经元的最大激活值是0.5; min:-0.5,最小激活值是-0.5。

max gradient, min gradient,输入层和下一层的权重系数求解,梯度下降法,最大梯度和最小梯度。

4.3.2 conv层

conv(24x24x8),表示,在卷积层,有8个卷积核,生成8个卷积神图像,每一个卷积图像是24x24像素。

filter size 5x5x1,表示,卷积核是5x5像素卷积核,它只跟输入图像做连接,因为输入图像只有一个通道,所以是5x5x1。stride 1,表示,卷积核每次移动一步,也就是每次移动一个像素。

activation和gradient意义不重复了。

parameters,有多少个参数。每个卷积图像5x5x1,因此有25个权重系数,每个卷积图像分别有一个bias,有8个卷积图像,一共是8x(5x5+1)=208个参数。

卷积层的参数,都是随机初始化的,因此8个卷积图像也是随机初始化之后训练出来的,8个图像是相似的,但又有各自的不同。人脸识别时代,非常强调lda face或者pca face的正交系,正交系产生了单位 face,在dl时代,可能就不对此做要求了,训练出啥样就啥样。会不会8个图像都完全一样?概率很小,这会导致loss过大。

4.3.3 relu层

relu层,相当于对conv层进行一次提升对比度的处理,如果conv层的激活值在某个范围内,就置0,否则输出一个计算后的激活值。relu层的每个图,跟conv图是一一对应的关系,没有权重系数。

4.3.4 pool层

pooling size 2x2,表示,池化在2x2像素尺寸上进行,stride 2,表示,池化窗每次移动两步,也就是两个像素。根据池化的概念,其实stride和pooling size必然是一样的,同一个值。2x2的池化尺寸,就导致relu层的图像缩减到12x12了,也是8个。通常使用最大值池化,因此,pool层和relu层的max activation必然是一样的。

4.3.5 conv层,也就是第二个卷积层

conv(12x12x16),表示,这一层有16个卷积图,每个图尺寸是12x12像素。

filter size 5x5x8,这表示,这个卷积层的卷积核是5x5像素尺寸的,又因此前一层的depth是8,而卷积核每次处理前一层的全部深度,所以卷积核的尺寸必然是5x5x8,连接了前一层的8个图像,stride 1,表示卷积核每次移动一步,也就是一个像素。

parameters:16x(5x5x8+1)=3216个。

4.3.6 relu层,第二个relu层

原理同前。

4.3.7 pool层,第二个池化层

原理同前。

4.3.8 fc层

全连接层。

fc (1x1x10),有10个二维神经元矩阵,每一个神经元矩阵是1x1,其实就是用来判断一个图像是哪个数字。

parameters: 10x(4x4x16+1)=2570,这一层,每一个神经元都跟迁移层所有神经元进行连接。

4.3.9 softmax(1x1x10)

这一层,跟fc层几乎是一样的,把最大的置1,其他的置0。


5.convnetjs源码分析

5.1 convnet_net.js分析

这个文件,整体而言,是一个复杂的匿名函数,(function(global){ /*这里是所有源码*/ })(convnetjs),前一个小括号(function(global){ /*这里是所有源码*/ }),定义了一个匿名函数,后一个小括号(convnetjs)表示执行这个匿名函数,参数是convnetjs。这个convnetjs在前面一个效果好的匿名函数里被定义被global。这个理解是有一点点绕的。

Net进行如下操作:

对定义参数进行二次处理。

生成相应的层。

定义前馈计算。

定义反馈计算。

json序列化和反序列化。




未完待续


这篇关于[deeplearning-008] convertional neural networks卷积神经网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050793

相关文章

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算法Seq2Seq端到端神经网络算法 总结 自然语言处理系列六十三 神经网络算法》LSTM长短期记忆神经网络算法 长短期记忆网络(LSTM,Long S

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重