Torch7模型訓練

2021-07-25 09:02:57 字數 2158 閱讀 3352

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...