加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
卷积神经网络实现
randomized2016/10/08软件综合 IP:广东

https://github.com/mwsht/CNN 更新日志:

11/4

更改训练函数,权值生成函数,以及一些模型中的计算 train(train_label->LabelPtr[i].LabelData,0.0005,0.0005,0.0005);

11/15

2016-11-15 18-11-47屏幕截图.png

更改权值改变函数,解决溢出问题。 w.d[i][l_1][j][k] +=eta*(sum/((last_m-a)*(last_n-b)));

按照11.15的结果来看,正确率可以达到85% 。

2016-11-15 18-13-12屏幕截图.png

11.16,正确率在90%左右徘徊 。

2016-11-16 12-34-10屏幕截图.png

11.17 训练正确率图像:

11.17.jpg 蓝色和红色是不同的模型,黄色是一个更小的η

代码里的MINST文件夹下载:
attachment icon minst.bin 11.06MB BIN 25次下载 在下载完MINST文件夹并与代码放在同一个文件夹后,编译: g++ -O3 ./test.cpp 然后运行: ./a.out 运行完之后就可以看到本模型的MINST正确率了,如果想要更高正确率,可以尝试改变结构,或者增加训练次数,以此降低误差。

[修改于 8年9个月前 - 2016/11/17 07:09:05]

来自:计算机科学 / 软件综合
12
新版本公告
~~空空如也
darkorochi
8年11个月前 IP:湖北
826651
fist star~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
randomized作者
8年10个月前 修改于 8年9个月前 IP:广东
826731
代码使用指南-test.cpp

test.cpp是一份用于测试该库性能的代码,使用MINST对其进行测试。

Other
printf("===========\nMINST_READ\n===========\n"); printf("--\nReading training images.\n"); ImgArr train_img = read_Img("./MINST/train-images.idx3-ubyte"); printf("Read training images finished.\n"); printf("Training images data:\n"); printf("%d images.\n",train_img->ImgNum); printf("--\nReading testing images.\n"); printf("Size : %d*%d.\n",train_img->ImgPtr[0].c,train_img->ImgPtr[0].r); ImgArr test_img = read_Img("./MINST/t10k-images.idx3-ubyte"); printf("Read testing images finished.\n"); printf("Testing images data:\n"); printf("%d images.\n",test_img->ImgNum); printf("Size : %d*%d.\n",test_img->ImgPtr[0].c,test_img->ImgPtr[0].r); printf("--\nReading training lables.\n"); LabelArr train_label = read_Lable("./MINST/train-labels.idx1-ubyte"); printf("Read training lables finished.\n"); printf("Training lables data:\n"); printf("%d lables.\n",train_label->LabelNum); printf("--\nReading testing lables.\n"); LabelArr test_label = read_Lable("./MINST/t10k-labels.idx1-ubyte"); printf("Read testing lables finished.\n"); printf("Testing lables data:\n"); printf("%d lables.\n",test_label->LabelNum);

这一段代码用于读取MINST数据集。

Swift
CNN.init();

该函数的作用是初始化卷积神经网络。

Other
for (int i=0;i<train_img->ImgNum;i++){ if ((i%25)==0){ printf("%d\n",i); } input_minst(train_img->ImgPtr[i]); do { CNN.train(train_label->LabelPtr[i].LabelData,0.0005,0.0005,0.0005); CNN.calculate(); }while (sort(train_label->LabelPtr[i].LabelData)!=sort(CNN.FC_9.y)); } </train_img->

这是用于训练的代码,在该代码外加一层循环就可以改变训练次数。

Other
for (int i=0;i<test_img->ImgNum;i++){ input_minst(test_img->ImgPtr[i]); CNN.calculate(); if (sort(test_label->LabelPtr[i].LabelData)!=sort(CNN.FC_9.y)){ right+=1; } } </test_img->

该段代码用于计算正确率。

void input_minst(MinstImg input); 该函数将MINST数据输入到神经网络中;

int sort(float *data); 该函数用于计算输出数组中最大值的序号。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年10个月前 IP:四川
826736
不错,感谢分享=_=
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
randomized作者
8年10个月前 IP:广东
826737
代码使用指南-CNN.h

class tube;4维数组

class cube; 3维数组

class mat;2维数组

class array;1维数组

class Input_Layer;输入层

class Convolutional_Layer;卷积层

class Max_Pooling_Layer;最大池层

class Fully_Connected_Layer;全连接层

下面是一些层类共有的函数:

void init_1; 初始化阶段一,用于第一次初始化(必须在前一个层初始化阶段一后调用)

void init_2; 初始化阶段二,用于第二次初始化(必须在后一个层初始化阶段一后调用)

void calculate_y();计算输出值(在前一个层计算之后调用)

void calculate_dleta();计算δ(原谅拼写错误。)(在后一个层计算之后调用)

void change_weight(float eta);改变权值(η必须指定)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
8年10个月前 IP:香港
826807
纯CPU单线程运算?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
randomized作者
8年10个月前 IP:江西
827050
引用 小俊:
纯CPU单线程运算?
首先我要解决掉模型的错误(https://github.com/mwsht/CNN/projects/1),然后再做MPICH的扩展,但是暂时没有CUDA或OpenCL的打算,但是NEON可能会有。
而且C++的实现理论会比某些语言快一些,。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年10个月前 修改于 8年10个月前 IP:四川
827051
其实用OpenGL 4.3以后版本也能调GPU运算,用GL_COMPUTE_SHADER→_→
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Cirno
8年10个月前 IP:美国
827060
引用 acmilan:
其实用OpenGL 4.3以后版本也能调GPU运算,用GL_COMPUTE_SHADER→_→
。。。。当初就是贝尔实验室想用OpenGL实现神经网络,发现搞不定,找NVIDIA要技术支持,NVIDIA也觉得蛋疼,才推出cuda
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年10个月前 IP:四川
827066
引用 Cirno:
。。。。当初就是贝尔实验室想用OpenGL实现神经网络,发现搞不定,找NVIDIA要技术支持,NVIDIA也觉得蛋疼,才推出cuda
貌似咱们说的opengl根本不是一个版本,4.3和compute shader是2012才出来的,cuda是2007就出来了→_→
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
8年10个月前 IP:香港
827090
引用 acmilan:
貌似咱们说的opengl根本不是一个版本,4.3和compute shader是2012才出来的,cuda是2007就出来了→_→
其实不需要用compute shader。卷积层直接用fragment shader读纹理死算也是可以的(算法跟楼主的CPU版本一样,shader内双重循环)。如果用上CUDA的话就有很多快速卷积算法,例如FFT大法和Winograd大法。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年10个月前 修改于 8年10个月前 IP:四川
827091
算了还是用CUDA吧。。。OpenGL 4.3硬件要求还挺高的。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
randomized作者
8年9个月前 修改于 8年9个月前 IP:广东
827700
现在代码已基本完成,在运算完成确认模型无误后我将添加MPICH支持。(也许是OpenACC)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
randomized
进士 学者 机友 笔友
文章
13
回复
84
学术分
1
2015/02/04注册,5年0个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:江西
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的