In [168]:
require 'nn'
require 'optim'
require 'csvigo'
In [169]:
Theta1 = csvigo.load{path='ex3Theta1.txt', mode='raw'}
Theta2 = csvigo.load{path='ex3Theta2.txt', mode='raw'}
Out[169]:
Out[169]:
In [170]:
local matio = require 'matio'
data = matio.load('ex3data1.mat')
In [171]:
linLayer1 = nn.Linear(400,25)
linLayer2 = nn.Linear(25,10)
In [172]:
linLayer1.weight = torch.Tensor(Theta1)[{{1,25},{2,401}}]
In [173]:
linLayer1.bias = torch.Tensor(Theta1)[{{1,25},1}]
In [174]:
linLayer2.weight = torch.Tensor(Theta2)[{{1,10},{2,26}}]
In [175]:
linLayer2.bias = torch.Tensor(Theta2)[{{1,10},1}]
In [176]:
model = nn.Sequential()
model:add(linLayer1)
model:add(nn.Sigmoid())
model:add(linLayer2)
model:add(nn.Sigmoid())
In [177]:
dataset_inputs = data.X
dataset_outputs = data.y
In [178]:
function maxIndex(a)
local idx = 0
local mx = -1e5
for i = 1,(#a)[1] do
if mx < a[i] then
mx = a[i]
idx = i
end
end
return idx
end
In [179]:
acc = 0.0
for i = 1, (#dataset_inputs)[1] do
if (maxIndex(model:forward(dataset_inputs[i])) == dataset_outputs[i][1]) then
acc = acc + 1
end
end
print('accuracy: ' .. acc/(#dataset_inputs)[1])
Out[179]: