首页 > 解决方案 > 如何从训练有素的 keras 模型中获得与实际值相比的预测值

问题描述

我已经根据加密货币价格使用 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% 左右。

目标作为熊猫系列返回,如下所示:

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 只是每个类的概率,但是我确信有一些方法可以使用这些概率来预测与目标相同的索引点处的值。不知道如何做到这一点,并且很难找到如何做到这一点。

标签: tensorflowkeraslstmpredict

解决方案


推荐阅读