torch lua

9093 단어 torch
이전 글에서 7부분으로 나누어 torch 식별을 바탕으로 분류된 이미지의 예를 설명하고 일부 코드를 수정하여 지정된 유형의 이미지 분류 식별을 식별했다.
1 트레이닝용 t7 파일 생성
-- generate training material t7 files
require 'io'
require 'xlua'
require 'image'

dataNum = 10
imgSize = 32

aImgs = torch.Tensor(batchSize, 3, imgSize, imgSize):zero():float()
label1 = {}

for idx = 1,dataNum do
    im_name = string.format('/home/cgy/torch_bak/image/Chinese flag/%02d.jpg',idx)
    --xlua.progress(idx, dataNum)
    local img1 = image.load(im_name)
    aImgs[idx] = image.scale(img1, imgSize, imgSize):float()
    label1[idx] = 1
end

print('Save Anchor Images: aImgs.t7: ')

--Create the table to save
label = torch.Tensor(label1)
data_to_write = { data = aImgs, label = label }

--Save the table in the /home
torch.save('/home/cgy/torch_bak/image/Chinese flag/train_TEST.t7', data_to_write)

2 테스트 대기 t7 파일
-- load test
require 'paths'
require 'nn'

trainset = torch.load('/home/cgy/torch_bak/image/Chinese flag/train_TEST.t7')

trainset.data = trainset.data:double()

for idx = 1,10 do
    --print(trainset.label[idx])
    itorch.image(trainset.data[idx])
end

3 트레이닝 매개 변수 설정, 모델 생성
require 'paths';
require 'nn';

trainset = torch.load('/home/cgy/torch_bak/image/Chinese flag/train_TEST.t7')

setmetatable(trainset,
    {__index = function(t,i)
        return {t.data[i],t.label[i]}
        end}
);

trainset.data = trainset.data:double()

function trainset:size() 
    return self.data:size(1) 
end

---Normalize data
mean = {}
stdv = {}
for i=1,3 do
    mean[i] = trainset.data[{ {}, {i}, {}, {}  }]:mean()
    print('Channel ' .. i .. ', Mean: ' .. mean[i])
    trainset.data[{ {}, {i}, {}, {}  }]:add(-mean[i])

    stdv[i] = trainset.data[{ {}, {i}, {}, {}  }]:std()
    print('Channel ' .. i .. ', Standard Deviation:' .. stdv[i])
    trainset.data[{ {}, {i}, {}, {}  }]:div(stdv[i])
end

--      
net = nn.Sequential()

--change 1 channel to 3 channels
--net:add(nn.SpatialConvolution(1, 6, 5, 5))
net:add(nn.SpatialConvolution(3, 6, 5, 5)) 

net:add(nn.ReLU())                       
net:add(nn.SpatialMaxPooling(2,2,2,2))     
net:add(nn.SpatialConvolution(6, 16, 5, 5))
net:add(nn.ReLU())                       
net:add(nn.SpatialMaxPooling(2,2,2,2))
net:add(nn.View(16*5*5))                    
net:add(nn.Linear(16*5*5, 120))         
net:add(nn.ReLU())                       
net:add(nn.Linear(120, 84))
net:add(nn.ReLU())                       
net:add(nn.Linear(84, 10))                  
net:add(nn.LogSoftMax()) 

criterion = nn.ClassNLLCriterion();

trainer = nn.StochasticGradient(net, criterion)
trainer.learningRate = 0.001
trainer.maxIteration = 50

trainer:train(trainset)

4 훈련 결과 검증
for idx = 1,10 do
    itorch.image(trainset.data[idx])
    predicted = net:forward(trainset.data[idx])
    print(predicted:exp())
end

좋은 웹페이지 즐겨찾기