Python / Keras / Redes Neurais - Basics para fazê-lo funcionar

votos
3

Eu sou um iniciante trabalhar com Keras para fazer previsões. Eu entendo o conceito e toda a teoria por trás dele. Mas eu estou tendo um momento difícil de fazê-lo funcionar. Nesta fase eu não estou preocupado com a eficiência dele, eu só quero para executá-lo e ver uma saída para que eu possa evoluir mais tarde.

Eu tenho esse manequim Pandas trama de dados eu estou usando como predictor_train (X):

                 Value        1lag        2lag        3lag        4lag...
Date                                                                     
2005-04-01  231.721933  165.195418  170.418903  225.892387  206.282539   
2005-05-01  163.259812  231.721933  165.195418  170.418903  225.892387   
2005-06-01  211.649963  163.259812  231.721933  165.195418  170.418903   
2005-07-01  249.054951  211.649963  163.259812  231.721933  165.195418   
2005-08-01  168.657539  249.054951  211.649963  163.259812  231.721933   
2005-09-01  179.623448  168.657539  249.054951  211.649963  163.259812   
2005-10-01  228.437842  179.623448  168.657539  249.054951  211.649963   
2005-11-01  165.805266  228.437842  179.623448  168.657539  249.054951
...
[129 rows x 96 columns]

Eu tenho essa outra trama de dados que eu estou usando como target_train (Y):

Date
2005-04-01   -0.01136
2005-05-01    0.04713
2005-06-01    0.00329
2005-07-01   -0.00985
2005-08-01    0.05635
2005-09-01   -0.03766
2005-10-01    0.01848
2005-11-01   -0.01387
[129 rows x 1 column]

Eu estou usando o seguinte código:

from keras.models import Sequential
from keras.layers.core import Dense, Activation


model=Sequential() 
model.add(Dense(output_dim=64, input_dim=100, init=glorot_uniform))
model.add(Activation(tanh))
model.add(Dense(output_dim=10, init=glorot_uniform))
model.add(Activation(linear))
model.compile(loss=mean_squared_error, optimizer=rmsprop)
model.fit(predictor_train, target_train, nb_epoch=5, batch_size=32,show_accuracy=True)
prediction=model.predict(predictor_train)

print prediction

E eu estou recebendo o seguinte erro:

File /Users/file.py, line 1271, in var_neural_reg1
model.fit(predictor_train, target_train, nb_epoch=5, batch_size=32,show_accuracy=True)
File /Library/Python/2.7/site-packages/keras/models.py, line 581, in fit
shuffle=shuffle, metrics=metrics)
File /Library/Python/2.7/site-packages/keras/models.py, line 230, in _fit
ins_batch = slice_X(ins, batch_ids)
File /Library/Python/2.7/site-packages/keras/models.py, line 65, in slice_X
return [x[start] for x in X]
File /Library/Python/2.7/site-packages/pandas/core/frame.py, line 1908, in __getitem__
return self._getitem_array(key)
File /Library/Python/2.7/site-packages/pandas/core/frame.py, line 1953, in _getitem_array
return self.take(indexer, axis=1, convert=True)
File /Library/Python/2.7/site-packages/pandas/core/generic.py, line 1370, in take
convert=True, verify=True)
File /Library/Python/2.7/site-packages/pandas/core/internals.py, line 3508, in take
indexer = maybe_convert_indices(indexer, n)
File /Library/Python/2.7/site-packages/pandas/core/indexing.py, line 1721, in maybe_convert_indices
raise IndexError(indices are out-of-bounds)

IndexError: indices are out-of-bounds

Qualquer idéias sobre como fazer este movimento de mamute?

Publicado 05/02/2016 em 13:44
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Então, você não quer definir o seu input_dimpara 129. Isso é apenas o número de amostras. Keras realmente não se importa se os seus dados tem 1 linha ou 1 milhão de linhas; essa não é a dimensionalidade dos dados. Se os dados eram uma matriz numpy, a forma de entrada seria (1, 2, 3) = (2, 3). O número de linhas (1) não fazer a diferença.

Mas, essa não é a questão aqui. O erro que você está recebendo não tem a ver com a sua dimensionalidade especificada. Se fosse esse o caso, então você estaria recebendo um erro diferente ( ValueErrore não IndexError) que traça para o seu back-end (Theano ou Tensorflow), se houvesse de fato uma incompatibilidade forma entre seus dados e o que você especificado no modelo. Por exemplo:

ValueError: ('shapes (x,x) and (x,x) not aligned: x (dim 1) != x (dim 0)', (x, x), (x, x))

Olhando para a mensagem de erro, este é um problema com a forma como você está pré-processamento de seus dados; ou seja, o problema é com pandas e não com Keras. Você está usando Keras' slice_Xfunção para segmentar os dados, mas quando Keras fala com pandas e diz-lhe que você deseja obter os dados de dataframe[x:y], pandas está respondendo que os índices que você especificou não são válidos dada a sua trama de dados.

Depois que está classificado, porém, você pode correr em diferentes erros uma vez que seu programa chegue às funções Keras que você está chamando no model.fit. Especificamente, você provavelmente vai ver uma incompatibilidade forma entre seus dados e o seu modelo está esperando. Como são suas colunas sendo codificada antes de ser alimentado em seu modelo Keras? Keras está esperando uma matriz numpy para Xe yno model.fit. Além disso, o tipo de saída que você está esperando tal que output_dim = 10?

Eu recomendo este exemplo Keras que mostra seqüência a previsão seqüência com um modelo LSTM, neste caso aprendendo disso, uma vez que faz exatamente o que você quer; ou seja, é exemplo concreto que mostra o modelo de execução e evoluindo a cada época.

--------------------------------------------------
Iteration 1
Train on 45000 samples, validate on 5000 samples
Epoch 1/1
45000/45000 [==============================] - 30s - loss: 1.6745 - acc:0.3927- val_loss: 1.5373 - val_acc: 0.4320
Q 58333+69862
T 128195
☒ 13335 
---
.
.
.
---
Q 83911+65   
T 83976 
☒ 11115 
---

O modelo começa a aprender o que está acontecendo em torno época 7:

Iteration 7
Train on 45000 samples, validate on 5000 samples
Epoch 1/1
45000/45000 [==============================] - 31s - loss: 0.9129 - acc: 0.6549 - val_loss: 0.9117 - val_acc: 0.6510
Q 80+3375    
T 3455  
☒ 3420  
---
.
.
.
---
Q 6+50853    
T 50859 
☑ 50859    <--------------------------
---

Você pode adicionar a seguinte linha de impressão para a decodefunção na CharacterTableclasse para o seguinte, a fim de ver o que está acontecendo. Neste caso, as questões de adição de fonte são introduzidos em sentido inverso, o que melhora o desempenho neste tipo de modelo, introduzindo dependências de curto prazo entre as entradas e alvos ( Sutskever, Vinyals, e Le 2014 )

    def decode(self, X, calc_argmax=True):
        if calc_argmax:
            X = X.argmax(axis=-1)
        print('{0} --> {1}'.format(X, [self.indices_char[x] for x in X]))
        return ''.join(self.indices_char[x] for x in X)

Por exemplo:

Iteration 3
Train on 45000 samples, validate on 5000 samples
Epoch 1/1
45000/45000 [==============================] - 21s - loss: 1.4865 - acc: 0.4491 - val_loss: 1.4132 - val_acc: 0.4676
[ 0 11 12  2  4 11 12] --> [' ', '7', '8', '+', '0', '7', '8']
[13  9 11  0] --> ['9', '5', '7', ' ']
[12  4 11  0] --> ['8', '0', '7', ' ']
Q 870+87 
T 957 
☒ 807 
---
[ 0  8 10  3  8  4 10] --> [' ', '4', '6', '-', '4', '0', '6']
[9 8 4 0] --> ['5', '4', '0', ' ']
[10  4 13  0] --> ['6', '0', '9', ' ']
Q 604-64 
T 540 
☒ 609 
---

Este modelo / decodificador codificador pode ser mudado com bastante facilidade para se adaptar a outros tipos de sequência para sequenciar problemas de previsão.

Você provavelmente gostaria de rever o código para ajustar seus dados. Mas, no seu caso, se você estava indo para alimentar os dados acima para o modelo como ela é, eu acredito que sua input_dimseria len('0123456789.- '), já que é a dimensionalidade dos dados; ou seja, o conjunto de todos os personagens em suas entradas e metas. Neste exemplo ligado, sequências são convertidos para uma codificações-quentes dos caracteres individuais.

Então, você especificar uma forma de entrada na primeira camada do modelo:

model.add(LSTM(HIDDEN_DIMENSIONS, input_shape=(MAX_LENGTH, INPUT_DIMENSIONALITY)))
Respondeu 07/02/2016 em 15:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more