Torch7中addmv函数的大小不匹配。

我正在编写一个小的Torch7/Lua脚本来创建和训练神经网络,但是我遇到了错误。有什么想法吗?

这是我的代码:

require 'dp'
require 'csvigo'
require 'nn'
--[[hyperparameters]]--
opt = {
    nHidden = 100, --隐藏单元数量
    learningRate = 0.1, --学习速率
    momentum = 0.9, --用于训练的动量因子
    maxOutNorm = 1, --输出神经元权重允许的最大规范
    batchSize = 128, --每个小批量的示例数
    maxTries = 100, --在验证误差没有减少的情况下的最大纪元数量。
    maxEpoch = 1 --最大训练纪元数量
}

csv2tensor = require 'csv2tensor'
-- inputs, outputs = csv2tensor.load("/Users/robertgrzesik/NodeJS/csv_export.csv")
inputs = csv2tensor.load("/Users/robertgrzesik/NodeJS/csv_export.csv", {exclude={"positive", "negative", "neutral"}})
outputs = csv2tensor.load("/Users/robertgrzesik/NodeJS/csv_export.csv", {include={"positive", "negative", "neutral"}}) -- "positive", "negative", "neutral"
print("outputs: ", outputs)
print("inputs: ", inputs)

local dataset = {}

print("inputs:size(1)", inputs:size(1))

inputSize = inputs:size(1)
outputSize = outputs:size(1)

for i=1,inputSize do
  dataset[i] = {inputs[i], outputs[i]}
end

dataset.size = function(self)
  return inputSize
end

-- ======================================= --
--                 Create NN
-- ======================================= --
print '[INFO] Creating NN..'
mlp = nn.Sequential();  -- make a multi-layer perceptron
inputs = inputSize; outputs = outputSize; HUs = 300; -- 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
/Users/robertgrzesik/torch/install/bin/luajit: .../robertgrzesik/torch/install/share/lua/5.1/nn/Linear.lua:37: size mismatch
stack traceback:
    [C]: in function 'addmv'
    .../robertgrzesik/torch/install/share/lua/5.1/nn/Linear.lua:37: in function 'updateOutput'
    ...ertgrzesik/torch/install/share/lua/5.1/nn/Sequential.lua:25: in function 'forward'
    ...ik/torch/install/share/lua/5.1/nn/StochasticGradient.lua:35: in function 'train'
    /Users/robertgrzesik/Lua/async-master/tests/dp-test.lua:53: in main chunk
    [C]: in function 'dofile'
    ...esik/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:131: in main chunk
    [C]: at 0x01028bc780

这是我的数据样本:

positive,negative,basketball,neutral,the,be,and,of,a,in,to,have,it,I,for,that,he,you,with,on,do,this,they,at,who,if,her,people,take,your,like,our,new,because,woman,great,show,million,money,job,little,important,lose,include,rest,fight,perfect
0,0,0,1,3,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

基本上,我的目标是创建一个深度神经网络,将句子中使用的词频与用户评价“正面”、“负面”或“中性”(我的输出,是二进制)联系起来。如果我的想法是正确的,请也告诉我。

谢谢!

点赞
用户563762
用户563762

发现问题了!

问题出在我在创建网络时提供了错误的尺寸。我传入的参数是 "inputs:size(1)",而不应该是 "inputs:size(2)"。这是修复方法:

mlp:add(nn.Linear(inputs:size(2), HUs))
mlp:add(nn.Tanh())
mlp:add(nn.Linear(HUs, outputs:size(2)))

感觉我在慢慢掌握 Lua/Torch 了!得分

2015-04-05 16:38:36