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)!

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