**:本節**位址
require 'rnn'
require 'gnuplot'
batchsize=8 --mini batch
rho=100 --back propagation through time
hiddensize = 20
r=nn.recurent(
hiddensize,nn.linear(1,hiddensize),
nn.linear(hiddensize,hiddensize),nn.sigmoid(),
rho)--1. 本層中包含的節點個數,為hiddensize
--2. 前一層(也就是輸入層)到本層的連線。這裡是乙個輸入為1,輸出為hiddensize的線性連線。
--3. 本層節點到自身的反饋連線。這裡是乙個輸入為hiddensize,輸出也是hiddensize的線性連線。
--4. 本層輸入和反饋連線所用的啟用函式。這裡用的是sigmoid。
--5. back propagation through time所進行的最大的次數。這裡是rho = 100
rnn=nn.sequential()
rnn:add(nn.sequencer(r))
rnn:add(nn.sequencer(nn.linear(hiddensize,1)))
rnn:add(nn.sequencer(nn.sigmoid()))
--首先定義乙個容器,然後新增剛才定義好的隱藏層r。隨後新增隱藏層到輸出層的連線,在這裡用的是輸入為20,輸出為1的線性連線。最後接上一層sigmoid函式。
--這裡在定義網路的時候,每個具體的模組都是用nn.sequencer的括號給括起來的。nn.sequencer是乙個修飾模組。所有經過nn.sequencer包裝過的模組都變得可以接受序列的輸入。
--舉個例子來說,假設有乙個模組本來能夠接受乙個2維的tensor作為輸入,並輸出另乙個2維的tensor。如果我們想把一系列的2維tensor依次輸入給這個模組,需要寫乙個for迴圈來實現。有了nn.sequencer的修飾就不用這麼麻煩了。只需要把這一系列的2維tensor統一放到乙個大的table裡,然後一次性的丟給nn.sequencer就行了。nn.sequencer會把table中的tensor依次放入網路,並將網路輸出的tensor也依次放入乙個大的table中返回給你。
criterion=nn.sequencercriterion(nn.msecriterion())
batchloader = require 'minibatchloader'
loader = batchloader.create(batchsize)
lr = 0.01
i = 1
for n=1,6000 do
-- prepare inputs and targets
local inputs, targets = loader:next_batch()
local outputs = rnn:forward(inputs)
local err = criterion:forward(outputs, targets)
print(i, err/rho)
i = i + 1
local gradoutputs = criterion:backward(outputs, targets)
rnn:backward(inputs, gradoutputs)
rnn:updateparameters(lr)
rnn:zerogradparameters()
end--需要重點說明的是輸入和輸出資料的格式。我使用了minibatchloader(同目錄下的minibatchloader.lua檔案)來從data.t7中讀取資料,每次讀取8個序列,每個序列的時間長度是100。那麼**中inputs的型別是table,這個table中有100個元素,每個元素是乙個2維8列1行的tensor。在訓練的時候,mini batch中8個序列中的每乙個的第乙個資料一起進入網路,接下來是8個排在第二的資料一起輸入,如此迭代。
--當訓練完成之後,用其中的組輸入放進網路觀察其輸出:
inputs, targets = loader:next_batch()
outputs = rnn:forward(inputs)
x={}
y={}
for i=1,100 do
table.insert(x,inputs[i])
table.insert(y,outputs[i])
endx = torch.tensor(x)
y = torch.tensor(y)
gnuplot.pngfigure('timer.png')
gnuplot.plot(,)
gnuplot.plotflush()
github原始碼裡面有兩個lua檔案,這兩個檔案需要先執行。在itorch notebook上,我們需要把**貼上過來,直接先執行即可。
深度學習筆記3torch實現多層感知器
網路結構1 3 3 1,隱含層為兩層,每層都有3個神經元,輸入層和輸出層都有乙個神經元 model nn.sequential model現在是乙個容器,要往這個容器中新增神經網路層 輸入層 隱含層 輸出層 來構成多層感知器 神經網路 容器要新增的第一層為輸入層,1個輸入,3個輸出 model ad...
《c語言深度剖析》學習筆記4
第五章 記憶體管理 5.1 野指標 定義指標變數的同時,最好初始化為null,用完指標之後,也將指標變數的值設定為null.5.2 棧 堆和靜態區 靜態區 儲存自動全域性變數和static變數。靜態區的內容在整個程式的生命週期內都存在,有編譯器編譯時分配。棧 儲存區域性變數。棧上的內容只在函式的範圍...
深度學習筆記之Andrew Ng(4)
week4 最後一周的內容,講的還是神經網路部分。但是公升級成為了多層的深度神經網路,那麼本質上,神經網路的原理還是不變的,那麼在加深了神經網路的layer之後,我們在計算上,出現了一些不同。先上圖 如圖我們看到的是乙個四層hidden layer的神經網路,那麼這個教程主要圍繞如包括四層隱含層的神...