LazyNet-一款为理解深度学习而生的学习框架

前言

很多小伙伴还在为弄不懂深度学习整个流程而烦恼,比如图像数据如何读入?数据在网络之间如何传递?如何前向计算?如何反向计算?如何更新权重?如何预测输出?博主利用每天晚上的时间,历经两个星期,为大家带来这款为理解深度学习而生的学习框架,命名为LazyNet,为什么呢?因为此框架真的很简单,动动手指头就能明白整个深度学习流程了!

LazyNet优势

  • 不依赖GPU,任何CPU均可
  • 除OpenBLAS、OpenCV外,不依赖任何第三方
  • 纯C++代码
  • 代码简介明了,数据流简单易懂
  • 相关原理在代码里面做了详细说明

LazyNet传送门

  • 传送门(若对您有帮助,欢迎star和fork)

LazyNet简介

一、支持系统

  • Windows7/10(强烈推荐,因为可以直观调试)
  • Linux(可自己写简易makefile)
  • Mac(暂未尝试)

二、环境搭建

  • CPU
  • VS2015(Windows强烈推荐)

三、示例数据

  • mnist400(train200-0,train200-1,test20-0,test20-1)

四、示例网络

Layers channel Kernel_size stride pad Input_size Output_size
Conv1 16 3 1 0 28x28 26x26
Relu1 16 - - - 26x26 26x26
Maxpool1 16 2 2 0 26x26 13x13
Conv2 32 3 1 0 13x13 11x11
Relu2 32 - - - 11x11 11x11
Maxpool2 32 2 2 0 11x11 6x6
Conv3 64 3 1 0 6x6 4x4
Relu3 64 - - - 4x4 4x4
Ip1 128 - - - 4x4 1x1
Relu4 128 - - - 1x1 1x1
Ip2 2 - - - 1x1 1x1
softmax - - - - 1x1 1x1

五、示例代码

#include "lazy_net.h"

int main()
{
	//data information
	string data_path = "data/";
	int data_batch = 20;
	int data_channel = 3;
	int data_size = 28;

	//hyperparameter
	int max_iter = 1000;
	int disp_iter = 10;
	float weight_decay = 0.0005;
	float base_lr = 0.01;
	float momentum = 0.9;
	string lr_policy = "inv";
	float power = 0.75;
	float gamma = 0.0001;
	int test_iter = 50;

	LazyNet lazy_net(data_path, data_batch, data_channel, 
		data_size, max_iter, disp_iter,
		weight_decay, base_lr, momentum,
		lr_policy, power, gamma, test_iter);

	lazy_net.TrainNet();

	return 0;
}

六、示例结果

尾注

虽然这款学习框架很好理解,有利于梳理整个深度学习流程,但是也有几点不足之处,后面有时间会做相应调整

  • 网络重塑性不好,网络已嵌入代码,后面考虑用文本的形式写入
  • 训练数据灵活性不好,数据形式已嵌入代码,后面考虑利用random复写
  • 主要layers基于caffe修改而成,后面考虑去除OpenBLAS

 

任何问题请加唯一QQ2258205918(名称samylee)!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章