Не могу использовать TimeDistributed с LSTM - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь использовать слой TimeDistributed Keras, но у меня есть некоторые проблемы.

Форма набора данных:

Учебный комплект: (800, 7, 231), где 7 - временной шаг.

Учебные ярлыки: (800, 7)

Набор для проверки: (700, 7, 231)

Валидационные этикетки (700,7)

Моя цель - сделать бинарную классификацию. У меня есть информация в течение семи дней подряд (с объяснением, почему 7 - мой временной шаг). У меня также есть метки для 7 последовательных дней , которые я хочу использовать для прогнозирования только последнего дня (седьмого дня) .

Ниже мой код:

from keras.layers import LSTM

model = Sequential()
model.add(LSTM(120, input_shape=(final_dataset.shape[1], final_dataset.shape[2]), return_sequences=True))
print('ok')
model.add(TimeDistributed(Dense(15, activation='softmax')))

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
history = model.fit(training_set, labels_train, epochs=1, validation_data=(validation_set, labels_validation))

Моя ошибка: ошибка при проверке цели: ожидаемая активация 1 имела 3 измерения, но получила массив с формой (800, 7)

Edit:

Я пробовал другую версию, с кодировочным декодером, которая на данный момент не работает:

from keras.layers import LSTM
from keras.models import Sequential, Model
from keras.layers import Dense, Input, TimeDistributed, Flatten



# Define an input sequence and process it.
# Input layer of the encoder :
encoder_input = Input(shape=(final_dataset.shape[1], final_dataset.shape[2]))

# Hidden layers of the encoder :
encoder_LSTM = LSTM(120, input_shape=(final_dataset.shape[1], final_dataset.shape[2]), return_sequences=True)(encoder_input)

# Output layer of the encoder :
encoder_LSTM2_layer = LSTM(120, return_state=True)
encoder_outputs, state_h, state_c = encoder_LSTM2_layer(encoder_LSTM)

# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]


# Set up the decoder, using `encoder_states` as initial state.
# Input layer of the decoder :
decoder_input = Input(shape=(6,))

# Hidden layers of the decoder :


decoder_LSTM_layer = LSTM(120, input_shape=(6,), return_sequences=True)
decoder_LSTM = decoder_LSTM_layer(decoder_input, initial_state = encoder_states)

decoder_LSTM_2_layer = LSTM(120, return_sequences=True, return_state=True)
decoder_LSTM_2,_,_ = decoder_LSTM_2_layer(decoder_LSTM)

# Output layer of the decoder :
decoder_dense = Dense(2, activation='sigmoid')
decoder_outputs = decoder_dense(decoder_LSTM_2)


# Define the model that will turn
# `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
model = Model([encoder_input, decoder_input], decoder_outputs)

model.summary()

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit([final_dataset,
               labels_train[:,:6]],
               labels_train[:,6])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...