区块链网站|NFTS BTC教学指南 比特币和以太坊可以测量吗?教你用LSTM网络建立预测模型!

比特币和以太坊可以测量吗?教你用LSTM网络建立预测模型!

广告位

比特币和以太坊价格可测?教你用LSTM网络建预测模型!

2017年是人工智能和加密货币的伟大一年。现在人工智能行业已经有很多研究和突破,人工智能是当今最热门的技术之一,未来还会有更多。今年可以说是一轮大规模的牛市,各种加密比、比特币、莱特币、波纹币的投资都收到了一些回报。

许多ML专家和爱好者将这些技术应用于加密货币市场,因为机器学习和深度学习的模型以各种方式用于股票市场。

构建单点预测模型可能是探索时间序列(比如价格数据)深度学习的一个很好的起点。当然,这不会是它的终点,总会有改进的空间和更多的输入数据。使用深度强化学习作为自动交易代理是一个很好的方法。然而,第一步非常重要。本文首先讨论的是学会使用LSTM网络,建立一个好的预测模型。

先决条件和开发环境

像往常一样,假设你有一些Python的编程技巧和机器学习的基础知识,尤其是在深度学习领域。如果你还是小白,可以多关注AI中国,不定期发布一些干货知识。

这里选择的开发环境是Google的Colab。选择Colab是因为其环境设置简单,可以使用免费的GPU,对训练时间影响很大。以下是如何在Google的云硬盘中设置和使用colab的教程。你可以在GitHub上找到完整的Colab笔记本。(https://github . com/SiaFahim/lstm-crypto-predictor/blob/master/lstm _ crypto _ price _ prediction . ipynb)

如果你想搭建一个AWS环境,可以看看这个教程(https://towardsdatascience。com/how-to-set-up-deep-learning-machine-on-AWS-GPU-instance-3bb 18 b 0a 2579),并介绍如何在GPU上用Docker设置一个AWS实例。

回到正题,本文将使用带有TensorFlow后端的Keras库建立模型,训练历史数据。

什么是递归神经网络?

为了解释循环神经网络,我们首先回到简单的具有隐藏层的感知网络。这种网络可以很好地解决简单的分类问题。通过添加更多的隐藏层,网络将能够在我们的输入数据中推断出更复杂的模式,并提高预测的准确性。然而,这些类型的网络适合于与时间顺序和历史无关的任务。例如,训练集中的前一个样本不会影响下一个样本的图像分类。换句话说,感知机没有过去的记忆。对于卷积神经网络,这是一个更复杂的图像识别感知器架构。

具有一个隐藏层和两个输出的简单感知器神经网络

递归神经网络(Recurrent neural network,RNN)是一种神经网络,它通过在前一时间步的隐藏状态中循环,并与当前输入样本相结合,解决了感知器的过去记忆问题。

接下来,我们更详细地解释一下这一点。在每一个时间步中,当一个新的样本进入时,网络将会忘记前一步中的样本。解决时间序列问题的一种方法是引入以前的输入对当前样本进行采样,这样我们的网络就可以了解以前发生了什么,但这样我们就无法捕捉到上一步之前时间序列的完整历史。比较好的方法是从之前的输入样本中得到隐含层(隐含层的权重矩阵),和当前的输入样本一起输入到我们的网络中。

隐层的权矩阵被视为网络的状态。如果我们这样看,隐藏层以所有神经元的权重分布的形式捕捉了过去,这是一个更丰富的网络。下面的图片将提供RNN正在发生的可视化。

当Xt进入时,来自Xt-1的隐态将与Xt串联,在时间t成为网络的输入,这个过程将对时间序列中的每个样本重复进行。

尽量保持简单。如果你想更多地了解RNN,这里有一些关于RNN的好资源:

RNN简介(http://www . wild ml . com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/)

面向初学者的递归神经网络(https://medium.com/@ camrongodbut/面向初学者的递归神经网络-7aca4e933b82)

递归神经网络的不合理的有效性(http://karpathy.github.io/2015/05/21/rnn-effectiveness/)

什么是长期和短期记忆网络(LSTM)?

在我告诉你什么是LSTM之前,让我告诉你关于递归神经网络的最大问题。一切看起来都很好,直到我们通过反向传播进行训练。当我们的训练样本的梯度通过我们的网络反向传播时,它会变得越来越弱。当它到达代表我们时间序列中较旧数据点的神经元时,它没有能量来适当地调整它们。这个问题叫做梯度消失。LSTM单元是一种递归神经网络,它存储关于过去的重要信息,并忘记不重要的部分。这样,当梯度向后传播时,就不会被不必要的信息所消耗。

看书的时候,往往会在读完一章后想到自己。虽然你能记住上一章的内容,但你可能记不住关于它的所有要点。解决这个问题的一个办法是,我们强调并记录那些重要的点,从而记住并忽略对主题不重要的解释和填充。

让我们一起来看看代码。

首先,我们导入项目所需的库。

历史数据

这里用的是www.coinmarketcap.com的史料。您也可以使用其他来源。使用它的原因是这篇文章简单明了。我们会得到比特币的每日价格数据。但是,在colab笔记本中,你也会看到以太坊的代码。下面是以这种方式编写的代码,其他加密货币可以重用。

现在让我们写一个函数来获取市场数据。

现在让我们获取比特币的数据,并将其加载到变量“btc_data”中,并显示我们数据的前五行。

BTC市场数据

我们来看看比特币的收盘价和日交易量。

数据准备

构建任何深度学习模型,很大一部分都是为了给神经网络训练或预测准备我们的数据。根据我们使用的数据类型,这一步称为预处理,可能包括多个步骤。在我们的案例中,作为预处理的一部分,我们将执行以下任务:

数据清理,填补缺失数据点。

合并多个数据通道。比特币和以太坊在一个数据框里。

计算价格波动并将其添加为新列。

删除不必要的列

按日期排序数据。

拆分培训和测试数据

创建输入样本,并在0和1之间对其进行归一化。

创建训练集和测试集的目标输出。

将我们的数据转换成模型的numpy数组。

在我们加载数据的第一个函数中已经完成了数据清理部分。您可以在下面找到执行上述任务所需的功能:

这里我们将调用上面的函数来创建我们模型的最终数据集。

现在让我们建立我们的LSTM-RNN模型。在这个模型中,使用了三层LSTM,每层有512个神经元,每个LSTM层后面有0.25个Dropout以防止过拟合,最后形成一个密集层来产生我们的输出。

这里“tanh”用作激活函数,绝对平均误差用作损失,“adam”用作优化器。您可以尝试这些函数的不同选择,看看它们如何影响模型的性能。

以下是我们模型的总结:

在代码的开始,超参数已经被解码成一个完整的代码,这样更容易从一个地方改变不同的变体。这是超参数:

现在是时候对我们收集的数据进行模型训练了。

以上代码可能需要一些时间来完成,这取决于计算能力。完成后,你的培训模型就完成了。

我们来看看BTC和ETH的结果(BTC:市值最大的虚拟货币;ETH:市值第二大的虚拟货币,也是以太坊平台运营需要的令牌)

对新手来说还不错!

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/btb/btbjiaoxue/49590.html

作者: 区块链动态

上一篇
下一篇

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部