Erreur d'entraînement du réseau neuronal torch7


Mohamed Achraf

J'essaye d'implémenter un exemple de réseau neuronal dans torch7. mes données sont stockées dans un fichier texte sous cette forme [19 cols x 10000 lignes]:

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

Avec des étiquettes dans la dernière colonne [100 étiquettes].

Avec ce code:

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)   

J'ai reçu ce message d'erreur:

# 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

Pouvez-vous m'aider s'il vous plaît ?

Je vous remercie.

Deltheil

J'ai reçu ce message d'erreur [...] Pouvez-vous m'aider s'il vous plaît?

Dans votre jeu de données inputet outputdevrait être Tensor-s (voici inputune table Lua simple, c'est pourquoi vous obtenez cette erreur, c'est-à-dire qu'il n'y a pas de dimméthode).

Pour simplifier le chargement des données, je vous recommande d'utiliser un parseur csv , par exemple vous pouvez utiliser csv2tensor pour charger vos données dans un fichierTensor .

Assurez-vous d'abord d'ajouter un en-tête (en première ligne) à votre fichier comme:

x001,x002,x003,x004,x005,x006,x007,x008,x009,x010,x011,x012,x013,x014,x015,x016,x017,x018,label

Ensuite, chargez vos données comme suit:

local csv2tensor = require 'csv2tensor'

local inputs = csv2tensor.load("data.csv", {exclude={"label"}})
local labels = csv2tensor.load("data.csv", {include={"label"}})

local dataset = {}

for i=1,inputs:size(1) do
  dataset[i] = {inputs[i], torch.Tensor{labels[i]}}
end

dataset.size = function(self)
  return inputs:size(1)
end

Et utilisez cet ensemble de données pour la formation:

-- ...
trainer:train(dataset)

Articles connexes


Reprendre l'entraînement du réseau neuronal convolutif

James J'ai un modèle que j'ai formé pendant 75 époques. J'ai enregistré le modèle avec model.save(). Le code de la formation est from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential, load_model from keras.layers import C