Я хочу классифицировать данные с помощью LSTM. Мне нужна бинарная классификация, таким образом 2 класса (0,1). Данные разбиты на две папки (с именами 0 и 1), каждая из которых содержит CSV-последовательности из соответствующего класса. В каждой папке есть файлы .csv, которые имеют 3 столбца и переменное количество строк (= длина переменной временного шага) .
В файле csv нет класса, только функции. Каждый CSV выглядит следующим образом:
x1,x2,x3
x1,x2,x3
...
x1,x2,x3
Код для моего примера модели:
model = Sequential()
model.add(CuDNNLSTM(3, input_shape=(None, 3), return_sequences=False))
model.add(Dropout(0.1))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.Adam(lr=1e-2, decay=1e-7),
metrics=['accuracy'])
Каждая последовательность (например, [[x1, x2, x3], [x1, x2, x3], [x1, x2, x3]]) должны иметь только одну метку. Таким образом, при прогнозировании этой последовательности я получу 0 или 1.
Вопрос 1:
- Как я могу создать что-то вроде итератора, который я могупройти за trainX и trainY, содержащие все последовательности своего класса? (Class = foldername или я также могу предоставить метки с массивом)
- Как я могу загрузить данные из двух папок с их метками в этот итератор?
Вопрос 2: Есть ли что-нибудь еще, чтобы сделать возможными переменные временные шаги, кроме размера пакета 1? Вопрос 3: Будет ли это правильный код, чтобы переменная длина временного шага была принята LSTM? Если нет, пожалуйста, предложите лучший способ.
input_shape=(None, 3)