火炬nn。当前错误始终为nan

时间:2016-04-13 08:51:51

标签: torch

我写了以下代码:

require 'nn'
require 'cunn'

file = torch.DiskFile('train200.data', 'r')
size = file:readInt()
inputSize = file:readInt()
outputSize = file:readInt()

dataset = {}

function dataset:size() return size end;

for i=1,dataset:size() do
  local input = torch.Tensor(inputSize)
  for j=1,inputSize do
    input[j] = file:readFloat()
  end
  local output = torch.Tensor(outputSize)
  for j=1,outputSize do
    output[j] = file:readFloat()
  end
  dataset[i] = {input:cuda(), output:cuda()}
end

net = nn.Sequential()

hiddenSize = inputSize * 2

net:add(nn.Linear(inputSize, hiddenSize))
net:add(nn.Tanh())
net:add(nn.Linear(hiddenSize, hiddenSize))
net:add(nn.Tanh())
net:add(nn.Linear(hiddenSize, outputSize))

criterion = nn.MSECriterion()

net = net:cuda()
criterion = criterion:cuda()

trainer = nn.StochasticGradient(net, criterion)
trainer.learningRate = 0.02
trainer.maxIteration = 100

trainer:train(dataset)

它必须运作良好(至少我是这么认为),并且在inputSize = 20时它的工作正常。但当inputSize = 200当前错误始终为nan时。起初我以为文件阅读部分不正确。我有时会重新检查它,但效果很好。此外,我发现有时太小或太大的学习率可能会影响它。我尝试过从0.00001到0.8的学习率,但结果仍然相同。我做错了什么?

谢谢, 伊戈尔

0 个答案:

没有答案