CNTK2.3 C# MLP训练MNIST(CNTK C#入门2)

    20180108

MLP(多层感知器)是最简单的神经网络,MNIST是一个经典的数据集,包括6万条训练数据和1万条测试数据,用于识别手写数字0到9,网址在:http://yann.lecun.com/exdb/mnist/

我们本节的目的就是使用CNTK C# MLP实现MNIST数据训练和识别,例子与上一节相同,就是CNTK的Example目录中的CsharpTrain程序。

1、准备训练文件和测试文件

准备过程很简单,找到Example目录中的Mnist目录,我的是C:\cntk23\Examples\Image\DataSets\MNIST,其下有install_mnist.py文件,命令行运行它就行了,

python  install_mnist.py

如果出现如下错误,别忘了上一节的提醒,要先运行Scripts目录下的cntkpy35.bat程序设置python的cntk环境变量

Traceback (most recent call last): File "install_mnist.py", line 3, inimport mnist_utils as ut File "C:\cntk23\Examples\Image\DataSets\MNIST\mnist_utils.py", line 11, in import numpy as np

ModuleNotFoundError: No module named 'numpy'

运行后会生成两个新文件:Train-28x28_cntk_text.txt和Test-28x28_cntk_text.txt,一个是训练文件,一个是测试文件,内容格式都一样,如下:

|labels 0 0 0 0 0 0 0 1 0 0 |features 0 0 0 0 0 0 0 0 00 0 0 0 0  0 0 0 0 0 0 0 0 0 0 0 84 185 159 

。。。。。。

151 60 36 0 0  0 0 0 0 222 254 254 254 254 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

|labels 0 0 1 0 0 0 0 0 0 0 |features 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

。。。。。。

对数据文件不熟悉的,和对CNTK神经网络不熟悉的,可以先看看这篇文章,写的非常好很适合入门

探索 Microsoft CNTK 机器学习工具

2、CNTK C#神经网络创建

如果不知道CsharpTrain这个项目的,参见上一节,本节是对该项目中有关MLP的部分进行分析。

对于例子使用来说,其他的都不重要,直接照抄现成的就行,下面分析神经网络建立部分以及一些重要参数

1)创建神经网络

如下创建一个单隐层的MLP网络,第一行的意思就是说,以输入层网络函数(scaledInput)为上一层,建立包括本层(100个节点,使用Sigmoid激活函数)在内的一个新的网络函数(dense1 ),命名为空(""),device表示是使用CPU还是GPU,也就是说,dense1这个新的网络包括旧的网络(只包含输入层)和本层网络(隐藏层)。

第二行的意思就是建立一个新的网络,包括dense1和本层(输出层)。

两行加起来就是建立一个包括输入层、单隐层、输出层共三层的一个MLP网络。

Function dense1 = TestHelper.Dense(scaledInput, 100, device, Activation.Sigmoid, "");

Function  classifierOutput = TestHelper.Dense(dense1, numClasses, device, Activation.None, classifierName);

如下创建一个双隐层的网络,第一个隐层包括100个节点,第二个隐层包括66个节点。

Function dense1 = TestHelper.Dense(scaledInput, 100, device, Activation.Sigmoid, "");

Function dense2 = TestHelper.Dense(dense1, 66, device, Activation.ReLU, "");

Function  classifierOutput = TestHelper.Dense(dense2, numClasses, device, Activation.None, classifierName);

对上面两段进行对比就很容易明白是怎么回事了。

2)影响MLP模型识别率的重要参数

a、隐层层数

b、隐层节点数

c、激活函数

d、分组大小(minibatchSize)

单个样本之间差别较大,而两组平均之间差别就小,所以使用分组对模型参数改变就会小。用于随机梯度下降(SGD)的loss评估中。

e、重复训练次数(epochs)

f、学习率(learningRatePerSample)

3、实验及结论

实验1

单隐层(200节点)、激活Sigmoid、epochs=5、minibatchsize=64、learningRatePerSample=0.003125、正确率为94.19%

实验2

单隐层(100节点)、激活ReLu、epochs=20、minibatchsize=128、learningRatePerSample=0.003125、正确率为97.33%

还进行了其他许多单项测试,结论如下,对于MLP网络:

1)增加循环次数会提高正确率,例如5次改为10次会增加1个多点(以下均指百分点)

2)增加隐层节点不会提高正确率,例如100改为200

3)增加隐层层数不会提高正确率,实验了一层、两层、三层

4)增加minibatchsize,会提高正确率,例如32改为64会提高0.3个点

5)激活函数和学习率

ReLu对学习率很敏感,例如learningRatePerSample=0.003时很好,learningRatePerSample=0.03时很差,正确率会下降几十个点;

Sigmoid对学习率不太敏感,0.03和0.003时只相差一两个点。


下节我们用CNN训练MNIST,看看有何不同。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容