TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。
简介
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 价格预测机器人。的更多相关文章
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人
简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...
- ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]
ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档] 简介 简单地说就是该有的都有了,但是总体跑起来效果还不好. 还在开发中,它工作的效果还不好.但是你可以直 ...
- 使用TensorFlow动手实现一个Char-RNN
https://blog.csdn.net/thriving_fcl/article/details/72565455 前言 学习RNN的时候很多人应该都有看过Andrej Karpathy写的The ...
- 基于tensorflow 1.x 的检索机器人chatbot-retrieval
Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...
- 时间序列深度学习:状态 LSTM 模型预測太阳黑子(一)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/82111558 作者:徐瑞龙,量化分析师,R语言中文 ...
- 时间序列深度学习:状态 LSTM 模型预测太阳黑子
目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...
- 基于 Agent 的模型入门:Python 实现隔离仿真
2005 年诺贝尔经济学奖得主托马斯·谢林(Thomas Schelling)在上世纪 70 年代就纽约的人种居住分布得出了著名的 Schelling segregation model,这是一个 A ...
- 个基于TensorFlow的简单故事生成案例:带你了解LSTM
https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537 在深度学习中,循环神经网络( ...
- 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(二)
前言 已完成数据预处理工作,具体参照: 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(一) 设置配置文件 新建目录face_faster_rcn ...
随机推荐
- Salesforce与微信公众号集成实现输入关键字搜索文章
本篇参考微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html 随 ...
- 初学Qt——vs2012开发环境下的窗体跳转
最近接了份外快,要求使用vs+qt开发一个简单的数据管理系统.qt开发使用的语言是c++,然而c++只是大一第二学期有教过而已,基本也差不多忘光了,废话不多说,讲下今天遇到的问题吧 如标题所说,窗体跳 ...
- 【Mood】在COVID-19疫情中
看完网课(这还得从一只蝙蝠说起...),本来准备刷几道题. 还是来记录下这次事件吧. 2月1号,病毒感染人数破万. 接下来4天(今日6号)疫情走向爆发期. 每日平均新增发病人数达到了3000~4000 ...
- 从头认识js-js客户端检测
常用的客户端检测方式有以下三种: 1.能力检测 2.怪癖检测 3.用户代理检测 能力检测 最常用也是最为人们广泛接受的客户端检测形式是能力检测(又称特性检测).能力检测的目标不是识别特定的浏览器,而是 ...
- No CPU/ABI system image available for this target
在创建AVD设备的时候无法正常创建虚拟设备,CPU选项不能选择. 下面报错:No CPU/ABI system image available for this target 是因为SDK里面缺少了s ...
- @常见的远程服务器连接工具:Xshell与secureCRT的比较!!!(对于刚接触的测试小白很有帮助哦)
现在比较受欢迎的终端模拟器软件当属xshell和securecrt了. XShell绝对首选,免费版也没什么限制,随便改字体随便改颜色随便改大小随便改字符集,多窗口,也比较小巧,而SecureCRT界 ...
- spring boot 调度任务
1.引入spring boot所依赖的jar包 <parent> <groupId>org.springframework.boot</groupId> < ...
- angular 动态绑定class 写法
[ngClass]="{'aaa':true,'bbb':!true}" 这个是正确的 [ngClass]="{ true ? 'aaa':'bbb'}" ...
- ARM AVI 视频播放 基于 2440 freambuffer 绘制
AVI 文件格式 图解 整理: AVI 是一种容器,里面放什么格式的数据都可以 视频编码:格式可以是 H264, MPEG-4, MJPEG ,因为 MJPEG 比较简单,所以仅支持 MJPEG 的 ...
- ECMAScript进化史(1):话说Web脚本语言王者JavaScript的加冕历史
互联网起火-Web时代的来临 在行文之前,反手就安利一下<浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战>. 浏览器始祖NCSA Mosaic在1993年1月发布(于1992 ...