Torch7中函数addmv的大小不匹配

时间:2015-04-05 14:28:50

标签: lua torch

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

这是我的代码:

require 'dp'
require 'csvigo'
require 'nn'
--[[hyperparameters]]--
opt = {
    nHidden = 100, --number of hidden units
    learningRate = 0.1, --training learning rate
    momentum = 0.9, --momentum factor to use for training
    maxOutNorm = 1, --maximum norm allowed for output neuron weights
    batchSize = 128, --number of examples per mini-batch
    maxTries = 100, --maximum number of epochs without reduction in validation error.
    maxEpoch = 1 --maximum number of epochs of training
}

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
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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

发现了问题!

问题在于我在创建网络时给出了错误的大小。我传入的是“输入:大小(1)”而不是“输入:大小(2)”。这是修复

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

感觉我正慢慢开始接受Lua / Torch的挂起!得分