В Керасе, каков правильный формат y_train, когда вывод - один из восьми классов, использующих LSTM - PullRequest
0 голосов
/ 04 мая 2019

Данные относятся к записи движения предплечья, выполняющей 8 возможных жестов, у меня есть акселерометр (x, y, z), гироскоп (x, y, z) и кватернион ориентации.Я готовлю эти данные для классификации и прогнозирования с использованием модели LSTM в Керасе.Я сомневаюсь в том, как правильно отформатировать y_train, когда X_Train организован партиями.

Данные состоят из 10 функций (ускорение, гироскоп, кватернион), 71850 выборок и 9 классов (один не жестовый)и 8 жестов).Каждый жест имеет временное окно 75 сэмплов, что составляет 1,25 с.

Мой вопрос заключается в том, как адаптировать y_train к X_train.В следующем коде sf имеет форму (71850, 10) и gest (71850, 1).Я перевожу sf в X_train с формой (958, 75, 10) (партии, временные шаги, функции).Я начал строить y_train, используя вектор One-Hot-Encoding, имеющий форму (71850, 9).И вот где я в ловушке.Как отформатировать y_train, чтобы окончательно передать его в модель LSTM?Как я понимаю, это должно быть (958, 9). Значит ли это, что мне просто нужно извлекать вектор one_hot_encoding каждые 75 шагов?

sf, gest = readFileAndReturnData(0)
print(sf.shape, gest.shape)

num_classes = 9
y = keras.utils.to_categorical(gest, num_classes)
print(y.shape)

samples = list()
length = 75
n = sf.shape[0]
print('division:', n / length)
print('total samples', sf.shape[0])
print('sample error', sf.shape[0] % length)

# step over the size of data in jumps of 75
for i in range(0, n, length):
    # grab from i to i + length
    sample = sf[i:i + length]
    samples.append(sample)
print('minibatch samples:', len(samples))

# convert list of arrays into 2d array
X_train = np.array(samples)

print(X_train.shape)

'''
(71850, 10) (71850, 1)
(71850, 9)
total samples 71850
sample error 0
minibatch samples: 958
(958, 75, 10)
'''

1 Ответ

0 голосов
/ 21 мая 2019

Таким образом, в основном, если ваш вопрос связан с тем, какой должна быть форма вывода для архитектуры LSTM, то это может быть либо двумерный, либо трехмерный массив, который зависит от аргумента обратной последовательности, который вы задали в * 1001.* model.add (в случае керас) функция.

Если return_sequence = False, то это двумерный массив, который показывает (batch_size, unit), который в вашем случае будет (958, 9)

но в случае, если вы хотите, чтобы ваш вывод получался после завершения каждого жеста, вы должны установить return_sequence = True, в этом случае вывод будет (batch_size, each_gesture_completing_time_step, unit), поэтому он будетбыть как (958,75,9)

Надеюсь, это поможет!

...