TensorFlow-Bitcoin

简介

–Robot:基于LSTM模型的价格预测机器人。

文章包括以下部分:

1.为什么要尝试这个项目?

2.为什么选择这个模型?

3.模型的数据从何而来?

4.模型的优化过程?

5.项目可以进一步改进的方向。

近期以比特币为首的数字货币表现只能用疯狂来形容。来自比特币交易平台的最新报价显示,就在前一天,比特币盘中最高价达到29838.5元,距离3万元大关仅一步之遥。比特币近期火爆的市场备受关注,有一种人工智能似乎无所不能,那么问题来了,比特币交易可以用人工智能吗?

价格预测使用什么模型?现在流行的深度神经网络、卷积神经网络、循环神经网络,因为卷积神经网络更适合处理图片,循环神经网络更适合处理序列化的内容,尤其是LSTM是RNN的升级版。

LSTM(Long Short-Term)是一种长短期记忆网络,一种时间循环神经网络,适用于处理和预测时间序列中间隔和延迟相对较长的重要事件。 LSTM 已经在科学和技术领域有多种应用。基于 LSTM 的系统可以学习诸如翻译语言、控制机器人、图像分析、文档摘要、用于语音识别的图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等任务。比特币交易记录是事件序列上的附加数据,可以根据过去的交易记录来预测未来的价格,比较适合LSTM模型。下一个价格可以作为预测结果。

数据集

一个新的问题来了,数据从哪里来?

需要的数据是一个包含交易价格的序列,然后截取一部分作为输入值,下一部分作为预测值。经过一番搜索,主流交易平台都提供了一些历史数据,但不是很多。最终采用并爬取,其中包含 50 条比特币交易记录。

获取数据集的脚本

.py会获取这些交易记录,重新转成json,以图片的形式展示出来,供下一步数据分析使用。

运行前需要安装的依赖:

为了爬取数据,你需要使用这个库,一个非常有用的 HTTP 库。要可视化交易数据,请使用 .

pip install requests
pip install matplotlib

型号

.py

使用 LSMT 模型。取10条交易记录作为输入,如果第11个价格高于第10个,则设置输出为[1,0,0],如果低,则设置为[0,0,1],如果相同[0 , 1,0]。

for i in range(0,20):
    #print(price)
    one_predictor=np.array(price[i:i+20],dtype=float)
    #print(one_predictor)
    train_x.append(one_predictor)
    if(int(price[i+20])>int(price[i+21])):
        train_y.append(np.array([1,0,0]))
    elif (int(price[i + 20]) == int(price[i + 21])):
        train_y.append(np.array([0,1,0]))
    elif(int(price[i+20])<int(price[i+21])):
        train_y.append(np.array([0,0,1]))

下一步是定义模型:

lstm模型需要拆分成序列,然后传入模型。否则报错,代码中为x = tf.(x, , 1)。

得到结果,定义损失函数和优化函数

如何优化模型?

得到预测值后,与实际价格相比,会有损失函数。损失函数用于计算预测值与标记值的差值,进而优化损失函数优化模型。

pred = RNN(x, weights, biases)
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
# Evaluate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

项目开源地址及培训成果

训练设备:

GTX 980 钛

训练结果:

Iter , Loss= 0., = 0.75000 !

后续更新发布

更新计划

由于交易平台提供的历史交易记录很少,为了进一步提高训练效果,需要不断保存历史交易数据或者寻找更好的数据源。另一个方面是模型训练好后保存,以后可以直接使用。此外,还可以对模型本身进行一些优化。现在它只是预测,上升,下降和维持。以后可以进行更详细的评分,可以进行基于历史数据的回测等。

模型持久化、训练数据集持久化、测试数据集。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片