2016年1月24日 星期日

使用caffe.Net創建和讀取model

我們可以使用
caffe.Net('net.prototxt', caffe.TRAIN)
來創建新的網路,也可以使用
caffe.Net('net.prototxt', 'pretrain.caffemodel', caffe.TRAIN)
來讀取已經train過的model。其中有兩點事項:

(1)最後一個參數caffe.TRAIN或是caffe.TEST指的是要讀取net.prototxt中的phase TRAIN還是phase TEST的網路,兩個網路的差別就在於那些include不同phase的layer。而若使用solver來讀取網路,他會幫我們兩個都讀取,並分別放在solver.net和solver.test_nets裡面。
(2)當我們讀進預先訓練好的網路時,若我們使用
net.blobs['layer_name'].data
查看blobs資料時,會發現全部都是0。這並不是表示我們的model檔沒有儲存成功,因為其實網路裡面儲存資料的部分除了有layer和layer間的資料,layer本身也有許多參數要儲存,而我們訓練一個網路實際上是在修正layer本身的參數(forward改變layer和layer間的資料,backward改變layer本身的參數),因此需要儲存的資料也就是layer的參數,而不是layer和layer間的資料。若想要確認,應該要使用[1]
net.params['layer_name'][0].data
但這些參數對我們來說其實也沒什麼特別的意義,因此通常我們在讀進網路資料後,就是先forward某筆測試資料,然後再將某層blob的資料取出。

沒有留言:

張貼留言