2015-04-05 87 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