Tag 神经网络

残差网络

见到知乎上有一个解释说,基础形式实际上类似于差分放大,很有道理。 假如: F'(5)=5.1 从5到5.1的变化率是极低的,因为5的基数太大,所以可以进行拆分: H(5)=5.1, H(5)=5+F(5), F(5)=0.1 此时由于在拆分项中0变成0.1,这个变化率就达到了10%,便放大了这种效果。 因为神经网络不能很好辨识出这种拆分,所以需要人工设计结构进行辅助, 一般理论上认为网络层数越多,提取细节与抽象能力越丰富,然而实际层数迭代多了,会出现梯度爆炸或梯度弥散 ,这可以通过通过正则化解决。 但即使解决了这个问题,仍然会有退化问题,即层数多了后,出现准确率反而下降的情况。 这里有一个变化的技巧就是,在 H(x) = F(x) + x 时,当F(x)=0时, 显然H(x) = x,如果f(x)越来越趋近于0,则h(x)越来越趋进x 所以可以构造这样的形式: 所以,x可以直接跳两层作为输入,因为h(x)=x,f(x)这里当然不会等于0,但是可以通过relu使得矩阵中尽量多的地方变成0,从而实现残差放大。 X如何变化是不清楚的,因为它本来就是一个需要求的值,但这里可以直接采用X的原值,因为是如果改变了X值,那么就会破坏掉残差对应的原来的X结构,因为这里的残差实际上不是差分,而只是一个通过训练后才有可能不断向差分靠拢的值。      

Read More

斯里兰卡大学的一些有趣的相关神经网络研究

Jay Jayanka, 一种基于计算机的系统,用于识别斯里兰卡的僧伽罗ayurvedic草药植物 , 学士 (特殊)计算机科学学士学位(2016年)。 主管: TGI Fernando 摘要:在这项研究中,我们开发了一种基于深度学习识别樟芝植物叶的计算机系统。 用RGB和灰度图像的卷积神经网络以及具有RGB图像的多层神经网络用于鉴定ayurvedic植物叶。 在这项工作中,我们使用具有RGB图像的卷积神经网络,可以达到97.71%的准确度,用于识别僧伽罗草药植物叶。 HTM Perera, 僧伽罗手写字符识别的深度学习方法 , 学士 (特殊)计算机科学学位(2015)。 主管: TGI Fernando 摘要:手写字符识别可视为计算机视觉和机器智能的主要子领域之一。 随着近来开发基于深度学习的计算机视觉方法,大多数复杂的图像识别变得更加容易和准确。 一些深入学习的方法在用于识别手写字符的其他古典方法中表现更好。 僧伽罗手写字符由于僧伽罗人物的独特形状而有相当大的变化。 到目前为止,仅使用古典图像处理方法和基本机器学习方法,已经进行了一些研究,以识别僧伽罗手写字符识别。 本研究的主要目的是确定并实施基于深度学习的高效僧伽罗手写字符识别方法。 在这项研究中,我们能够使用卷积神经网络分别获得2.74%和0.07%的前1个和前5个错误率,用于僧伽罗手写字符识别。 RMEJ Rathnayaka,…

Read More

研究CNTK(六):ResNet

发挥图像识别的威力还是需要ResNet结构,最早是微软亚洲研究院提出的,这是可以达到90%以上识别率的网络结构,比如resnet cifar10,需要使用高达21个卷积层,并且每一步都要进行重新的批量正则化与归一化。 谷歌2016年8月份开源了Inception-ResNet-v2,是基于TensorFlow的,识别效果更为强大,能够将阿拉斯加雪橇犬(左)和西伯利亚雪橇犬给准确分类出来,另外还有V3与V4,网络结构也变得更深,唯一值的一提的是Inception-v4没有residual连接,但是效果与V2一样。 不过这都是些是些个人计算机运行起来很吃力的东西,在CNTK里这个同样有ResNet的各种实现,默认的ResNet20_CIFAR10.cntk将会进行160次迭代,这个运算量非常大也非常缓慢,不过识别精度非常高,但是不是妨尝试运行下的。 在第16次迭代时可以达到准度度已经可以达到是百分之86.1%以上的正确率了,每次迭代花费时间约在25s左右,所以时间也就花费了几分钟而已,它提高识别率的速度甚至比简单的卷积网络还快。在达到28次左右时,实际上就达到了89~90%左右的识别率,真正突破90%大概是到了36次左右,即大概15分钟便可以做到90%的识别,这个完全可以接受。不过按文档说,训练到最后错误率最高也只能达到8.2%左右,而人类的估计是6%左右,这个网络结构还是不足以超过人类,而叠加到了n=18的网络,则可以达到6.2-6.5%的效果。简单测试了一下,网络的一代迭代大概153秒,要迭代160次,约要跑6.8个小时,才可以达到6.2-6.5%的效果。   根据有人做过的研究来看,ResNet也不是层次越多越好。 到了1202层的时候,反而效果比110层更差了。   比较了一下: ResNet20_CIFAR10,numLayers =3,learningRatesPerMB = 1.0*80:0.1*40:0.01 ResNet18_CIFAR10,numLayers = 18,learningRatesPerMB = 0.1*1:1.0*80:0.1*40:0.01 除此之外并无区别了。 所以分析ResNet20_CIFAR10.cntk源文件就好 # ConvNet applied on CIFAR-10 dataset, with data augmentation…

Read More

研究CNTK(五):ConvNet_CIFAR10.cntk、ConvNet_CIFAR10_DataAug.cntk

从任务上来说,识别物体是最艰难的,因为物体大小开关都会发生灵活变化,传统的神经网络识别这个几乎是不可能的任务,而卷积技术则克服了这一点,不过仍然需要依赖强大的计算量。 ConvNet中的模型是: model = Sequential (             Normalize {featMean, featScale} :             ConvolutionalLayer {64, (3:3), pad = true} : ReLU :             ConvolutionalLayer {64, (3:3), pad = true} : ReLU…

Read More

研究CNTK(四):ConvNet_MNIST.cntk

可以看出结果为: Minibatch: errs = 0.470% * 10000; ce = 0.01797164 * 10000 Final Results: Minibatch: errs = 0.470% * 10000; ce = 0.01797164 * 10000; perplexity = 1.01813410 错误仅只有0.47,相当于正确率为99.53%,这个非常高了。 这是采用了三层卷积的效果,迭代了40次,算了挺久的,按MNIST的网站上的公布最好成绩为0.23,共计用了35个卷积层,很难想象这个得算多久。…

Read More

研究CNTK(三):MNIST识别之02、03、04

与一个隐含层的神经网络不同的体现只在MODEL这里,它是这样定义的:      在01中定义是:      model(x) = {             s1 = x * featScale             h1 = DenseLayer {200, activation=ReLU} (s1)             z = LinearLayer {labelDim} (h1)         }     在02中的定义要配合图比较直观:…

Read More

CNTK研究(二):测试MNIST几种识别效果

01_OneHidden,一个隐藏层,相当于简单的三层神经网络,直接用的RELU,效果不错。 Minibatch: errs = 1.560% * 10000; ce = 0.05553107 * 10000 Final Results: Minibatch: errs = 1.560% * 10000; ce = 0.05553107 * 10000; perplexity = 1.05710186 02_OneConv,一层的卷积神经网络,测试显然有所提升。 Minibatch:…

Read More

CNTK研究(一):MNIST的文件转换

CNTK的MNIST例子中,它是一个py文件,首先是将图像文件转换为文本来表达,以方便CNTK中读取。 文件位置:\cntk\Examples\Image\DataSets\MNIST\mnist_utils.py import sys import urllib import gzip import shutil import os import struct import numpy as np //定义一个读数据的函数 def loadData(src, cimg):     print ('Downloading ' + src)     gzfname,…

Read More