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

简介: 简介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/

更新计划

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

目录
相关文章
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
101 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
21天前
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
46 5
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
77 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
79 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
81 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
119 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
2月前
|
机器学习/深度学习 移动开发 TensorFlow
深度学习之格式转换笔记(四):Keras(.h5)模型转化为TensorFlow(.pb)模型
本文介绍了如何使用Python脚本将Keras模型转换为TensorFlow的.pb格式模型,包括加载模型、重命名输出节点和量化等步骤,以便在TensorFlow中进行部署和推理。
113 0
|
4月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
89 0
|
4月前
|
C# 开发者 前端开发
揭秘混合开发新趋势:Uno Platform携手Blazor,教你一步到位实现跨平台应用,代码复用不再是梦!
【8月更文挑战第31天】随着前端技术的发展,混合开发日益受到开发者青睐。本文详述了如何结合.NET生态下的两大框架——Uno Platform与Blazor,进行高效混合开发。Uno Platform基于WebAssembly和WebGL技术,支持跨平台应用构建;Blazor则让C#成为可能的前端开发语言,实现了客户端与服务器端逻辑共享。二者结合不仅提升了代码复用率与跨平台能力,还简化了项目维护并增强了Web应用性能。文中提供了从环境搭建到示例代码的具体步骤,并展示了如何创建一个简单的计数器应用,帮助读者快速上手混合开发。
102 0
|
4月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
93 0

热门文章

最新文章