從今天起, 我會每天把閱讀tiny_cnn的閱讀心得提交到博客園中希望大家在這個平台上可以多多交流;
關於如果閱讀代碼? 抓住重點,忽略細節
首先打開從github上下載的文件:
通過csdn和網上搜索一番會知道這個文件的各個目錄存放的是什麼;
我用${root} 代表到tiny-cnn-master的路徑,這個變量會在注釋中用到;
首先打開vs/2014 ,用MS studio開開這個項目 , 找到main.cpp
發現會調用sample1_convnet()函數 ,如圖1 所示
圖1 main方法截圖
而我們運行的時候確實沒有輸入任何參數,可見是運行的第45行, 既然是這樣,需要找到無參數的時候調用那個函數?
第35行, 我們知道了 sample1_convnet()函數的參數值是data_dir_path = ./../data
這個變量至今還沒有使用到,因此我們不必往下深究 , 只要知道.data_dir_path 是數據所在的路徑即可;
》》》進入void sample1_convnet(const string& data_dir_path) 函數裡面:
第一句話:
使我們不得不了解一下這兩個泛型:
mse:
@see: ${root}/tiny_cnn/optimzers/optimizer.h
gradient_descent_levenberg_marquardt:
@see: ${root}/tiny_cnn/optimzers/optimizer.h
以上這兩個函數也是沒有用到,但是我們可以查看一下,因為代碼很簡潔
如圖2-1所示:
在tiny_cnn中支持兩種損失函數:
(1)mean squared error均方差函數
(2)cross entropy 交叉熵
通過閱讀代碼可知;
a )這是兩個數學公式轉化過來的:
f(y,t) = (y - t )^2 / 2
df( y , t ) = y – t , 其中 y 和t 理論上都是從負無窮到正無窮的實數
b)該程序使用的自會有mse這一種損失函數 , 如果我們想要修改的或者做改進的話, 也可以從這裡入手;
比如換一種損失函數. 改進一下這個函數等等..
圖2-1 :mse函數的實現
network
@see ${root}/tiny_cnn/network.h