formação mais simples LSTM com Keras io

votos
4

Gostaria de criar o LSTM mais simples não está usando a biblioteca keras python.

Eu tenho o seguinte código:

import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.layers.recurrent import LSTM

X_train = pd.DataFrame( np.array([ [1, 2], [3, 4], [5, 6], [7, 8], [5.1, 6.1], [7.1, 8.1] ]))
y_train = pd.DataFrame( np.array([1, 2, 3, 4, 3, 4]) )
X_test = pd.DataFrame( np.array([ [1.1, 2.1], [3.1, 4.1] ]) )
y_test = pd.DataFrame( np.array([1, 2]) )

model = Sequential()
model.add(LSTM( output_dim = 10, return_sequences=False, input_dim=X_train.shape[1]))
model.add(Dense(input_dim = 10, output_dim=2))
model.add(Activation(linear))
model.compile(loss=mean_squared_error, optimizer=rmsprop)
model.fit(X_train, y_train)

mas não parece funcionar ...

Epoch 1/100
Traceback (most recent call last):
  File <stdin>, line 1, in <module>
  File /usr/lib/python2.7/site-packages/keras/models.py, line 489, in fit
    shuffle=shuffle, metrics=metrics)
  File /usr/lib/python2.7/site-packages/keras/models.py, line 201, in _fit
    ins_batch = slice_X(ins, batch_ids)
  File /usr/lib/python2.7/site-packages/keras/models.py, line 55, in slice_X
    return [x[start] for x in X]
  File /usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py, line 1908, in __getitem__
    return self._getitem_array(key)
  File /usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py, line 1952, in _getitem_array
    indexer = self.ix._convert_to_indexer(key, axis=1)
  File /usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/indexing.py, line 1121, in _convert_to_indexer
    raise KeyError('%s not in index' % objarr[mask])
KeyError: '[3 4 2 5] not in index'

Alguém pode me explicar o que exatamente vai mal?

Eu também tentou transpor as matrizes, mas não é isso.

Publicado 22/10/2015 em 22:04
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Primeiro problema que eu vejo está usando Pandas trama de dados. Eu acho que você deve usar matriz numpy aqui. O segundo problema é que a matriz X. Deve ser uma matriz 3D. Por exemplo, se eu tentar com

X_train = np.random.randn(6,2,2)

em seguida, ele irá trabalhar.

Respondeu 06/11/2015 em 17:44
fonte usuário

votos
0

O erro mostra-me quando eu executar o código é

ValueError: erro quando a verificação de entrada: esperado lstm_2_input ter 3 dimensões, mas obteve matriz com a forma (6, 2)

Você pode corrigir isso introduzindo uma matriz numpy 3D, como user108372 mencionado

Uma boa maneira de depuração é este para imprimir model.summary (), que lhe dará as formas de saída esperados para cada uma das camadas. Além disso, nem sempre você precisa especificar as formas de entrada e saída. Keras vai cuidar disso para você :) Agora, um exemplo de trabalho seria algo como isto:

X_train = np.random.randn(6,2,2)
y_train = pd.DataFrame( np.array([1, 2, 3, 4, 3, 4]) ).values
X_test = np.random.randn(2,2,2)
y_test = pd.DataFrame( np.array([1, 2]) ).values

model = Sequential()
model.add(LSTM(32, 
               return_sequences=False, 
               input_dim=X_train.shape[1]))
# The shape of the last Dense layer should always correspond to y_train.shape[1]
model.add(Dense(y_train.shape[1])) 
model.add(Activation("linear"))
model.compile(loss="mean_squared_error",
              optimizer="rmsprop")

model.fit(X_train, y_train)

Eu recomendo que você imprima formas do exemplo acima e alinhar suas formas com as formas descritas aqui.

Respondeu 02/08/2017 em 00:37
fonte usuário

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