Как получить прогнозируемые значения по сравнению с фактическими значениями из обученной модели keras

#tensorflow #keras #lstm #predict

#тензорный поток #keras #lstm #прогнозировать

Вопрос:

Я обучил модель с использованием keras на основе цен на криптовалюту. Он хорошо обучается и имеет точность примерно 60%. Однако мне трудно понять, как использовать результаты model.predict() для сравнения / построения графика с фактическими значениями.

Моя модель выглядит следующим образом:

 model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM(128, input_shape=(train_x.shape[1:])))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(Dense(32, activation="tanh")) #could use relu
model.add(Dropout(0.2))

model.add(Dense(2, activation="softmax"))

opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)
model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

history = model.fit(
    train_x, train_y, 
    batch_size=BATCH_SIZE, 
    epochs=EPOCHS, 
    validation_data=(validation_x, validation_y))

# ## Plot predictions
targets = validation_data['close'] #get all the actual prices from the validation data
preds = model.predict(validation_x)
  

train_x — это первые 90% или около того данных, а validation_x — последние 10% или около того.

целевые значения возвращаются в виде серии Pandas, которая выглядит как:

 time
1552021200    0.312
1552024800    0.312
1552028400    0.310
1552032000    0.311
1552035600    0.311
1552039200    0.311
1552042800    0.310
1552046400    0.309
1552050000    0.310
1552053600    0.312
  

но preds возвращает ndarray, который выглядит как:

 [[0.41261673 0.5873832 ]
 [0.34726056 0.65273947]
 [0.33154735 0.6684527 ]
 ...
 [0.4990835  0.50091654]
 [0.27250433 0.7274957 ]
 [0.3717066  0.6282934 ]]
  

До сих пор я обнаружил, что этот ndarray — это просто вероятности каждого класса, однако я уверен, что есть какой-то способ использовать эти вероятности для прогнозирования значений в тех же точках индекса, что и цели. Не уверен, как это сделать, хотя и не могу понять, как это сделать.

Комментарии:

1. Это проблема классификации или проблема регрессии?

2. @ShubhamPanchal регрессия

3. Если это регрессия, как вы можете использовать категориальную перекрестную энтропию и функцию softmax? Кажется, вы не выбрали правильную архитектуру.