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]:
<csv>	parsing file: ex3Theta1.txt	
Out[169]:
<csv>	parsing done	
<csv>	parsing file: ex3Theta2.txt	

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]:
accuracy: 0.9752