我想在torch7中实现一个神经网络示例。我的数据以文本文件的形式存储,格式为[19列x 10000行]:
11 38 20 44 11 38 21 44 29 42 30 44 34 38 6 34 45 42 1
11 38 20 44 11 38 27 44 31 42 18 44 34 38 6 34 45 42 2
6 42 20 44 11 38 21 44 29 42 30 44 34 38 6 34 45 42 3
...
34 40 20 44 11 38 21 44 29 38 30 38 34 45 38 0 0 0 100
...
带有最后一列[100个标签]的标签。
使用以下代码:
require 'nn'
-- ======================================= --
-- Start loading data
-- ======================================= --
print '[INFO] Loading data..'
dataset = {}
function dataset:size() return 10000 end
local lin = 1
train_file = 'train_10000.t7'
local file = io.open(train_file)
if file then
for line in file:lines() do
local input = torch.Tensor(18);
local output = torch.Tensor(1);
local X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, Y = unpack(line:split(" "))
input = {X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18}
output = Y
dataset[lin] = {input, output}
lin = lin +1
end
end
-- ======================================= --
-- Create NN
-- ======================================= --
print '[INFO] Creating NN..'
mlp = nn.Sequential(); -- make a multi-layer perceptron
inputs = 18; outputs = 1; HUs = 25; -- parameters
mlp:add(nn.Linear(inputs, HUs))
mlp:add(nn.Tanh())
mlp:add(nn.Linear(HUs, outputs))
-- ======================================= --
-- MSE and Training
-- ======================================= --
print '[INFO] MSE and train NN..'
criterion = nn.MSECriterion()
trainer = nn.StochasticGradient(mlp, criterion)
trainer.learningRate = 0.01
trainer:train(dataset)
我收到了这个错误信息:
# StochasticGradient: training
/home/yosaikan/torch/install/share/lua/5.1/nn/Linear.lua:34: attempt to call method 'dim' (a nil value)
stack traceback:
/home/yosaikan/torch/install/share/lua/5.1/nn/Linear.lua:34: in function 'updateOutput'
...e/yosaikan/torch/install/share/lua/5.1/nn/Sequential.lua:25: in function 'forward'
...an/torch/install/share/lua/5.1/nn/StochasticGradient.lua:35: in function 'train'
iparseSchemeConversion.lua:45: in main chunk
[C]: in function 'f'
[string "local f = function() return dofile 'iparseSch..."]:1: in main chunk
[C]: in function 'xpcall'
/home/yosaikan/torch/install/share/lua/5.1/itorch/main.lua:174: in function </home/yosaikan/torch/install/share/lua/5.1/itorch/main.lua:140>
/home/yosaikan/torch/install/share/lua/5.1/lzmq/poller.lua:75: in function 'poll'
.../yosaikan/torch/install/share/lua/5.1/lzmq/impl/loop.lua:307: in function 'poll'
.../yosaikan/torch/install/share/lua/5.1/lzmq/impl/loop.lua:325: in function 'sleep_ex'
.../yosaikan/torch/install/share/lua/5.1/lzmq/impl/loop.lua:370: in function 'start'
/home/yosaikan/torch/install/share/lua/5.1/itorch/main.lua:341: in main chunk
[C]: in function 'require'
(command line):1: in main chunk
[C]: at 0x00405980
你能帮我一下吗?
谢谢。
mlp:getParameters()
获取权重(请参考此文档),或者通过单独的模块获取,例如mlp:get(1).weight
和mlp:get(1).bias
。关于归一化/重新缩放:你也可以进行一些实验。 - deltheilinputs
不是一个张量,而是一个数字,因此出现了这个错误。您应该仔细检查为什么会这样(也许您在此期间替换了变量)。 - deltheil