我已经根据加密货币价格使用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%左右。
targets作为熊猫系列返回,如下所示:
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只是每个类的概率,但是我确信有某种方法可以使用这些概率来预测与目标相同的索引点处的值。不过,不确定如何执行此操作,并且很难找出方法。