简介

TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。

文章包括一下几个部分:

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

2.为什么选取了这个模型?

3.模型的数据从哪里来?

4.模型的优化过程?

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

对于以比特币为首的数字货币近期的表现,只能用疯狂来形容。来自比特币交易平台的最新价格行情显示,就在此前一天,比特币盘中最高价格达到29838.5元,距离3万元大关仅有咫尺之遥。比特币最近火热的行情,吸引了众多的关注,还有一个人工智能似乎无所不能,那么问题来了,能否用人工智能来进行比特币交易呢?

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

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

数据集

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

需要的数据是一个包含成交价格的序列,然后可以截取一部分作为输入值,接下来的一部分作为预测值。后来找了一下,主流的交易平台都提供了部分历史数据,但都不是很多。最后采用了 btctrade ,用 requests 爬取,它包含比特币的 50 个交易记录。

获取数据集的脚本

get_trades.py 会获取这些交易记录,重新转化为 json ,并且用图片的方式展示出来,供下一步数据分析使用。

运行前需要安装的依赖:

为了爬取数据,需要使用 requests 库,一个非常好用的 HTTP 库。为了把交易的数据可视化,使用了 matplotlib。

pip install requests
pip install matplotlib

模型

rnn_predicter.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]))

下一步定义模型:

tensorflow lstm 模型,需要把 tensor 拆分成序列,然后传入模型。否则回报错,也就是代码中的 x = tf.unstack(x, n_steps, 1) 。

def RNN(x, weights, biases):
#首先把数据拆分为 n 个序列,每一个的维度 (batch_size, n_input)
x = tf.unstack(x, n_steps, 1) # 定一个 lstm cell
lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0) # 获得 lstm 的输出
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
# 加个线性激活
return tf.matmul(outputs[-1], weights['out']) + biases['out']

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

如何优化模型?

预测值获取之后,对比实际的价格,会有一个损失函数。损失函数使用 softmax_cross_entropy_with_logits 来计算预测值和标记值的差,然后用 AdamOptimizer 来优化损失函数优化模型。

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))

项目开源地址和训练结果

https://github.com/TensorFlowNews/TensorFlow-Bitcoin-Robot/

训练设备:

GeForce GTX 980 Ti

训练结果:

Iter 998000, Minibatch Loss= 0.730588, Training Accuracy= 0.75000 Optimization Finished!

后续更新发布

http://www.tensorflownews.com/

更新计划

因为交易平台提供的历史交易记录非常少,所以为了进一步提高训练效果,后续要持续的自己保存历史交易数据或者是找到更好的数据来源。还有一个方面是,模型训练完了之后,保存下来,后续可以直接使用。还有针对模型本身还可以做一定的优化,现在只是预测,涨,跌,维持,后续可以进行更加精细的评分,按照历史数据进行回测等等。

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

TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。的更多相关文章

  1. TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人

    简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...

  2. ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]

    ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档] 简介 简单地说就是该有的都有了,但是总体跑起来效果还不好. 还在开发中,它工作的效果还不好.但是你可以直 ...

  3. 使用TensorFlow动手实现一个Char-RNN

    https://blog.csdn.net/thriving_fcl/article/details/72565455 前言 学习RNN的时候很多人应该都有看过Andrej Karpathy写的The ...

  4. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...

  5. 时间序列深度学习:状态 LSTM 模型预測太阳黑子(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/82111558 作者:徐瑞龙,量化分析师,R语言中文 ...

  6. 时间序列深度学习:状态 LSTM 模型预测太阳黑子

    目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...

  7. 基于 Agent 的模型入门:Python 实现隔离仿真

    2005 年诺贝尔经济学奖得主托马斯·谢林(Thomas Schelling)在上世纪 70 年代就纽约的人种居住分布得出了著名的 Schelling segregation model,这是一个 A ...

  8. 个基于TensorFlow的简单故事生成案例:带你了解LSTM

    https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537 在深度学习中,循环神经网络( ...

  9. 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(二)

    前言 已完成数据预处理工作,具体参照: 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(一) 设置配置文件 新建目录face_faster_rcn ...

随机推荐

  1. 斑马难题Step by Step

    问题描述 分析 代码 在exercism.io被这个 Zebra Puzzle 难住了.这里一步一步的解决... 1.There are five houses. 2.The Englishman l ...

  2. 图示JVM工作原理

    JDK,JRE,JVM的联系是啥? JVM Java Virtual Machine JDK Java Development Kit JRE Java Runtime Environment 看上图 ...

  3. HTML标签学习总结(2)

    点我:HTLM标签学习总结(1) 11. 在网页制作过程过中,可以把一些独立的逻辑部分划分出来,放在一个<div>标签中,这个<div>标签的作用就相当于一个容器. 语法: & ...

  4. 从0开发3D引擎(补充):介绍领域驱动设计

    我们使用领域驱动设计(英文缩写为DDD)的方法来设计引擎,在引擎开发的过程中,领域模型会不断地演化. 本文介绍本系列使用的领域驱动设计思想的相关概念和知识点,给出了相关的资料. 上一篇博文 从0开发3 ...

  5. 这么香的Chrome插件,你都安装了吗?

    工欲善其事必先利其器,今天长话短说,介绍13个敏捷.高效的Chrome插件 根据使用方式,本人将其划分为三大类: 开发者工具 日常效率工具类 浏览器管理类 开发者工具 1. Web Developer ...

  6. 为XHR对象所有方法和属性提供钩子 全局拦截AJAX

    摘要 ✨长文 阅读约需十分钟 ✨跟着走一遍需要一小时以上 ✨约100行代码 前段时间打算写一个给手机端用的假冒控制台 可以用来看console的输出 这一块功能目前已经完成了 但是后来知道有一个腾讯团 ...

  7. Netty学习(4):NIO网络编程

    概述 在 Netty学习(3)中,我们已经学习了 Buffer 和 Channel 的概念, 接下来就让我们通过实现一个 NIO 的多人聊天服务器来深入理解 NIO 的第 3个组件:Selector. ...

  8. 盘点Linux运维常用工具(二)-web篇之nginx

    1.nginx的概述 .nginx是一个开源的.支持高性能.高并发的WWW服务和代理服务软件 .是由俄罗斯人Igor Sysoev开发的,具有高并发.占用系统资源少等特性 .官网:http://ngi ...

  9. javascript入门进阶(一)

    javascript 入门进阶 这里主要讲解一下在入门阶段很难注意的一些知识点,不一定有用.但是会了总比不会强. 1.HTML为<script>标签准备的6个属性: -async:可选.表 ...

  10. 基于GIS空间分析的多边形提取技术

    现有基于矢量图形的骨架线提取方法主要包括数据预处理.基于约束 Delauny 三角剖分的骨架线结点生成和骨架线的连接 3 个过程,上述过程都可利用现有 GIS 系统的数据处理.空间分析和建模功能实现. ...