Mathematica 的前馈神经网络程序包 CognitoNet

CognitoNet 是 Mathematica 实现的一个卷积神经网络 (CNN) 程序包 (package),旨在让神经网络更容易理解,强调交互性、灵活性、可扩展性,同时尽可能兼顾效率。该程序包扩展了 Mathematica 的机器学习能力到多层卷积网络。目前它的主要应用领域是计算机视觉,原则上可以用在任何前馈神经网络适用的领域。

下载安装
https://github.com/jfrancis71/CognitoNet 下载并解压,将 apps 和 lib 加入 Mathematica 的$Path,系统即可识别
比如:
$Path=AppendTo[$Path,$UserDocumentsDirectory<>”\\CognitoNet\\lib”];
$Path=AppendTo[$Path,$UserDocumentsDirectory<>”\\CognitoNet\\apps”];
$CNDataDir=$CNModelDir=$UserDocumentsDirectory<>”\\”;

不过这种方法重启后会失效,如果不希望每次启动后运行上面的代码,可以将其放到 init.m 文件中去,init.m 文件可以根据下面的代码定位
FindFile[“init.m”]//DirectoryName//SystemOpen

MNIST 手写数字识别测试
预备工作:
http://yann.lecun.com/exdb/mnist/ 下载 MNIST 数据集(一共四个文件)并解压到 $CNDataDir ;
从 https://sites.google.com/site/ … odels
下载 LeNet1.wdx 并放到$CNModelDir(本文将$CNDataDir 和$CNModelDir 的路径都设为了“我的文档”)

加载 2 个必要的 package:
<< CNUtils.m;
<< CNNeuralCore.m;

定义读取 MNIST 图像和标签的函数,并读取数据:
loadImages=BinaryReadList[#]~Drop~16~Clip~Sequence[{129,-1},{0,1}]~Partition~28~Partition~28&;
(*读取 MNIST 图像的函数*)

loadLabels=BinaryReadList[#]~Drop~8&;
(*读取 MNIST 标签的函数*)

trainImages=loadImages[“train-images.idx3-ubyte”];
testImages=loadImages[“t10k-images.idx3-ubyte”];

trainLabels=loadLabels[“train-labels.idx1-ubyte”];
testLabels=loadLabels[“t10k-labels.idx1-ubyte”];

查看训练集和测试集的前 100 张图片

2016-08-07_012155.png

读取预训练的 MNIST 模型:
CurrentModel = CNReadModel[“LeNet1”];

识别测试集的前十张图片:

pic1.png

注意到倒数第二张图中的数字 5 写的很不规范,查看一下它在可能的类别上的概率分布,确实也有那么一点儿像 6

pic2.png

识别测试集的全部 10000 张图片,在低压 i5 的 PC 上需要 18 秒,准确率为 97.74%

pic3.png

相关文件下载

http://bbs.makercollider.com/?/file/download/file_name-Q29nbml0b05ldF9NTklTVF90ZXN0Lm5i__url-aHR0cDovL2Jicy5tYWtlcmNvbGxpZGVyLmNvbS91cGxvYWRzL2FydGljbGUvMjAxNjA4MDMvM2VhZWZkYTk5NGUyNTQzNTMxMWM4YzVjMWIzZTJkN2M=

 

发布者:Cara,转载请注明出处:http://www.makercollider.com/post/4989

发表评论

登录后才能评论
QR code