Tag Archives: CNTK

研究CNTK(七):Python还是BrainScript速度更快?

def create_reader(map_file, mean_file, train): if not os.path.exists(map_file) or not os.path.exists(mean_file): raise RuntimeError(“File '%s' or '%s' does not exist. Please run install_cifar10.py from DataSets/CIFAR-10 to fetch them” % (map_file, mean_file)) # transformation pipeline for the features has jitter/crop only when training transforms = [] if train: transforms += [ cntk.io.ImageDeserializer.crop(crop_type='Random', ratio=0.8, jitter_type='uniRatio') # train uses jitter … 阅读全文 研究CNTK(七):Python还是BrainScript速度更快?

研究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 (translation and flipping). command = TrainConvNet:Eval precision = “float”; traceLevel = 1 ; deviceId = “auto” rootDir = “../..” ; configDir = “./” ; dataDir … 阅读全文 研究CNTK(六):ResNet

研究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 :             MaxPoolingLayer {(3:3), stride = (2:2)} :             ConvolutionalLayer {64, (3:3), pad = true} : ReLU :             ConvolutionalLayer {64, (3:3), pad = true} … 阅读全文 研究CNTK(五):ConvNet_CIFAR10.cntk、ConvNet_CIFAR10_DataAug.cntk

研究CNTK(四):ConvNet_MNIST.cntk

可以看出结果为: Minibatch[1-10]: errs = 0.470% * 10000; ce = 0.01797164 * 10000 Final Results: Minibatch[1-10]: errs = 0.470% * 10000; ce = 0.01797164 * 10000; perplexity = 1.01813410 错误仅只有0.47,相当于正确率为99.53%,这个非常高了。 这是采用了三层卷积的效果,迭代了40次,算了挺久的,按MNIST的网站上的公布最好成绩为0.23,共计用了35个卷积层,很难想象这个得算多久。 与之前的代码几乎还是相同,不同主要是在model上,它是这样的:  model = Sequential (             Scale {featScale} :             ConvolutionalLayer {32, (5:5), pad = true} : ReLU :             MaxPoolingLayer    {(3:3), stride=(2:2)} :             … 阅读全文 研究CNTK(四):ConvNet_MNIST.cntk

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

与一个隐含层的神经网络不同的体现只在MODEL这里,它是这样定义的:      在01中定义是:      model(x) = {             s1 = x * featScale             h1 = DenseLayer {200, activation=ReLU} (s1)             z = LinearLayer {labelDim} (h1)         }     在02中的定义要配合图比较直观:         model = Sequential (             #归一化             Scale {featScale} :             #创建卷积层,函数使用RELU,对图像进行5:5的卷积,这就滤波器,这里使用16个滤波器,因为不补零,所以是16个24×24的sudo-image             ConvolutionalLayer {16, (5:5), pad = true} : ReLU :             #进行最大池化,得到feature … 阅读全文 研究CNTK(三):MNIST识别之02、03、04

研究CNTK(三):MNIST识别之01_OneHidden.cntk

# Parameters can be overwritten on the command line # for example: cntk configFile=myConfigFile RootDir=../.. # For running from Visual Studio add # currentDirectory=$(SolutionDir)/ command = trainNetwork:testNetwork precision = “float”; traceLevel = 1 ; deviceId = “auto” rootDir = “..” ; dataDir = “$rootDir$/DataSets/MNIST” ; outputDir = “./Output” ; modelPath = “$outputDir$/Models/01_OneHidden” #stderr = “$outputDir$/01_OneHidden_bs_out” … 阅读全文 研究CNTK(三):MNIST识别之01_OneHidden.cntk

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

01_OneHidden,一个隐藏层,相当于简单的三层神经网络,直接用的RELU,效果不错。 Minibatch[1-10]: errs = 1.560% * 10000; ce = 0.05553107 * 10000 Final Results: Minibatch[1-10]: errs = 1.560% * 10000; ce = 0.05553107 * 10000; perplexity = 1.05710186 02_OneConv,一层的卷积神经网络,测试显然有所提升。 Minibatch[1-10]: errs = 1.190% * 10000; ce = 0.03576933 * 10000 Final Results: Minibatch[1-10]: errs = 1.190% * 10000; ce = 0.03576933 * 10000; perplexity = … 阅读全文 CNTK研究(二):测试MNIST几种识别效果

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, h = urllib.urlretrieve(src, './delete.me')  //从URL下载该数据文件     print ('Done.')     try:         with gzip.open(gzfname) as gz:         //使用gzip打开它             n = struct.unpack('I', gz.read(4))    //读4个字节解包成无符号整型             # Read … 阅读全文 CNTK研究(一):MNIST的文件转换