torch7搭建卷積神經網路詳細教程
已經詳細的介紹啦module模組,這裡再次基礎上再給出一些上container、 transfer functions layers和 ****** layers模組的理解。並在後面給出一些簡單的模型訓練方法。下述程式在itorch qtconsole下執行。
主要有四個函式(詳細見
torch7搭建卷積神經網路詳細教程
),但是注意以下幾點:forward函式的input必須和backward的函式的input一致,否則梯度更新會有問題;forward會呼叫updateoutput(input), 而backward會呼叫[gradinput] ;updategradinput (input, gradoutput)和accgradparameters(input, gradoutput) ;高階訓練方式只要過載updateoutput和updategradinput這兩個函式,內部引數會自動改變。
@ add(module)
@ get(index)
@ size()
@ remove(index)
@ insert (module, [index] )
其用法在上一節搭建卷積神經網路的例項中已經給出,即生成是用乙個sequential,然後不斷add(module),module有****** layers和卷積層。
有很多,一些是提供仿射變換的,一些是進行tensor method的。具有引數的modules有: linear ,add ,mul ,cmul 等;進行數**算的有:max, min, exp, mean, log, abs, mm(矩陣乘),normalize(正則化);進行基本tensor運算的 view ,transpose 。
上述函式的具體使用方法可以看torch7的官方api以及幫助文件。接下來僅介紹一些模型訓練所需要的關鍵函式。
將image包匯入當前執行環境,隨機生成一張1通道32x32的彩色影象,如下
上一節我們構建的卷積神經網路如下(引數稍微有調整)。
用上一節建立好的神經網路net呼叫forward()方法輸入隨即生成的得到輸出的結果,如列印出來的形式,net最後是10個輸出節點,這裡輸出了10個值(bp演算法之前需要做的運算)。如下所示。
然後在此基礎進行bp演算法更新權值,如下所示。其中,zerogradparameters是將網路中的梯度快取設定為零;backword函式是進行後向傳播訓練的演算法,第乙個蠶食為輸入的影象,與forward中的輸入一致,不然後報錯,第二個引數為導師訊號,即影象的真實分類標籤。
前向傳播和反向傳播的基本過程就是上面,當然到這還不能我們的網路,還沒有定義損失函式,下面介紹損失函式的基本操作。
損失函式的實現也有正向和方向兩個操作,不同的神經網路用bp演算法求解的思想是一樣的,但是定義的網路不同,其具體的損失度量不同
。就這個例子來說我們定義是適合對分類的損失函式,呼叫他的前向傳播方法並輸入的引數分別為
**的類
和訓練樣本所屬的類。
執行完損失函式的前向操作後,再進行反向操作,backward()方法裡面的引數同forward()函式裡的引數,返回值是損失函式的梯度;
呼叫神經網路net的backward()方法輸入訓練集和其對應的損失函式梯度。然後,使用神經網路net的updateparameters()更新權重,該方法的輸入值為學習率,即完成了訓練。
torch7 刪除cuda變數
經常會在torch上會有用到刪除變數的操作 a nil但是放到cuda上面卻不是很奏效 cutorch.setdevice 1 src1 torch.cudatensor 100000,10000,2 這個時候會發現視訊記憶體占用了很大,但是怎麼來刪掉src1占用的視訊記憶體呢?src1 nil c...
ubuntu安裝Torch7教程
安裝torch7很簡單,只需要幾條命令即可,本教程在安裝完torch7之後還會download下demo,並執行其中的train a digit classifier。具體安裝步驟如下 sudo apt get install git git clone torch recursive cd tor...
Torch7深度學習教程(二)
這是自己定義tensor的值輸入10個整型值,列印price,注意這時它只是乙個有10資料的tensor。對比這兩張,第一張是有10個資料的tensor,第二張是10x1的矩陣,也可以成為列向量 神經網路經常用到 是呼叫了reshape 方法轉換的,它們看著一樣本質上是不一樣的!這時再次呼叫resh...