2017-08-16 3 views
0

Ici, je voudrais générer un tutoriel d'utilisation de LSTM dans MxNet, avec l'exemple de Tensorflow. (Emplacement https://github.com/mouradmourafiq/tensorflow-lstm-regression/blob/master/lstm_sin.ipynb " Voici mon code majeurLSTM pour prédire l'onde sinusoïdale

import mxnet as mx 
import numpy as np 
import pandas as pd 
import argparse 
import os 
import sys 
from data_processing import generate_data 
import logging 
head = '%(asctime)-15s %(message)s' 
logging.basicConfig(level=logging.DEBUG, format=head) 
TIMESTEPS = 3 
BATCH_SIZE = 100 
X, y = generate_data(np.sin, np.linspace(0, 100, 10000), TIMESTEPS, seperate=False) 
train_iter = mx.io.NDArrayIter(X['train'], y['train'], batch_size=BATCH_SIZE, shuffle=True, label_name='lro_label') 
eval_iter = mx.io.NDArrayIter(X['val'], y['val'], batch_size=BATCH_SIZE, shuffle=False) 
test_iter = mx.io.NDArrayIter(X['test'], batch_size=BATCH_SIZE, shuffle=False) 
num_layers = 3 
num_hidden = 50 

data = mx.sym.Variable('data') 
label = mx.sym.Variable('lro_label') 

stack = mx.rnn.SequentialRNNCell() 
for i in range(num_layers): 
    stack.add(mx.rnn.LSTMCell(num_hidden=num_hidden, prefix='lstm_l%d_'%i)) 
#stack.reset() 
outputs, states = stack.unroll(length=TIMESTEPS, 
           inputs=data, 
           layout='NTC', 
           merge_outputs=True) 

outputs = mx.sym.reshape(outputs, shape=(BATCH_SIZE, -1)) 
# purpose of fc1 was to make shape change to (batch_size, *), or label shape won't match LSTM unrolled output shape. 
outputs = mx.sym.FullyConnected(data=outputs, num_hidden=1, name='fc1') 
label = mx.sym.reshape(label, shape=(-1,)) 
outputs = mx.sym.LinearRegressionOutput(data=outputs, 
           label=label, 
           name='lro') 
contexts = mx.cpu(0) 
model = mx.mod.Module(symbol = outputs, 
        data_names = ['data'], 
        label_names = ['lro_label']) 
model.fit(train_iter, eval_iter, 
     optimizer_params = {'learning_rate':0.005}, 
     num_epoch=4, 
     batch_end_callback=mx.callback.Speedometer(BATCH_SIZE, 2)) 

Ce code se exécute mais le train_accuracy est Nan. La question est de savoir comment la rendre correcte? Et puisque la forme déroula en a sequence_length, comment peut-il correspondre étiqueter la forme? est-ce que mon sens net de faire FC1?

+0

le code n'a pas de problème en général et je l'ai finalement fait travail.Il court des temps plus lents que TF cependant. Pas certain de pourquoi. Je peux poster un exemple au tutoriel MXNet comme un exemple de début pour LSTM depuis que j'ai trouvé que les exemples MXNet sont très complexes en général. – user2189731

Répondre

1

passe auto_reset=False-Speedometer rappel, par exemple, batch_end_callback=mx.callback.Speedometer(BATCH_SIZE, 2, auto_reset=False), devrait fixer le NaN train acc.