2015-04-05 89 views
0

我正在研究一个小的Torch7/Lua脚本来创建和训练一个神经网络,但我遇到了错误。有任何想法吗?Torch7函数addmv的大小不匹配

这里是我的代码:

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 

基本上我的目标是创建一个深层神经网络链接句子中使用的单词的频率,并将其与用户评分为“积极”,“消极”或“评价” “中性”(我的输出是二进制的)。请让我知道我的想法是否正确。

谢谢!

+2

您的脚本太大而无法调试。其中一个线性图层(具有矩阵向量产品)的大小不匹配。这意味着,您传递的是与图层所期望的尺寸不同的输入(请参阅图层的构造函数) – smhx 2015-04-05 14:58:14

回答

1

发现问题!

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

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

觉得我慢慢开始得到的Lua /手电筒的窍门!得分

+0

您是如何确定哪个图层的尺寸不匹配的? – 2015-12-06 22:26:45