Estou tentando usar o exemplo descrito na documentação do Keras chamada "LSTM empilhado para classificação de sequência" (consulte o código abaixo) e não consigo descobrir o input_shape
parâmetro no contexto dos meus dados.
Eu tenho como entrada uma matriz de sequências de 25 caracteres possíveis codificados em números inteiros para uma sequência acolchoada de comprimento máximo 31. Como resultado, my x_train
tem o (1085420, 31)
significado da forma (n_observations, sequence_length)
.
from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np
data_dim = 16
timesteps = 8
num_classes = 10
# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True)) # returns a sequence of vectors of dimension 32
model.add(LSTM(32)) # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))
# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))
model.fit(x_train, y_train,
batch_size=64, epochs=5,
validation_data=(x_val, y_val))
Neste código x_train
tem a forma (1000, 8, 16)
, como para uma matriz de 1000 matrizes de 8 matrizes de 16 elementos. Lá me perco completamente sobre o que é o que e como meus dados podem atingir esse formato.
Olhando para o documento de Keras e vários tutoriais e perguntas e respostas, parece que estou perdendo algo óbvio. Alguém pode me dar uma dica do que procurar?
Obrigado pela ajuda !
fonte
Eu sei que não é uma resposta direta à sua pergunta. Este é um exemplo simplificado com apenas uma célula LSTM, ajudando-me a entender a operação de remodelagem dos dados de entrada.
Este seria um exemplo da rede LSTM com apenas uma única célula LSTM e com os dados de entrada de formato específico.
Como se vê, estamos prevendo aqui que o treinamento não está presente por simplicidade, mas veja como precisamos remodelar os dados (para adicionar dimensão adicional) antes do
predict
método.fonte