摘要:對(duì)于以比特幣為首的數(shù)字貨幣近期的表現(xiàn),只能用瘋狂來形容。比特幣的成交記錄就是事件序列上的加個(gè)數(shù)據(jù),可以基于過去的成交記錄序列來對(duì)未來的價(jià)格作出預(yù)測(cè),和的模型比較合適。最后采用了,用爬取,它包含比特幣的個(gè)交易記錄。
簡(jiǎn)介
TensorFlow-Bitcoin-Robot:一個(gè)基于 TensorFlow LSTM 模型的 Bitcoin 價(jià)格預(yù)測(cè)機(jī)器人。
文章包括一下幾個(gè)部分:
1.為什么要嘗試做這個(gè)項(xiàng)目?
2.為什么選取了這個(gè)模型?
3.模型的數(shù)據(jù)從哪里來?
4.模型的優(yōu)化過程?
5.項(xiàng)目可以進(jìn)一步提升的方向。
對(duì)于以比特幣為首的數(shù)字貨幣近期的表現(xiàn),只能用瘋狂來形容。來自比特幣交易平臺(tái)的最新價(jià)格行情顯示,就在此前一天,比特幣盤中最高價(jià)格達(dá)到29838.5元,距離3萬元大關(guān)僅有咫尺之遙。比特幣最近火熱的行情,吸引了眾多的關(guān)注,還有一個(gè)人工智能似乎無所不能,那么問題來了,能否用人工智能來進(jìn)行比特幣交易呢?
使用什么模型來進(jìn)行價(jià)格預(yù)測(cè)?現(xiàn)在熱門的 深度神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò),因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)更適合處理圖片,循環(huán)神經(jīng)網(wǎng)絡(luò)比較適合處理序列化內(nèi)容,尤其是 LSTM 是 RNN 的升級(jí)版。
LSTM(Long Short-Term Memory)是長(zhǎng)短期記憶網(wǎng)絡(luò),是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測(cè)時(shí)間序列中間隔和延遲相對(duì)較長(zhǎng)的重要事件。LSTM 已經(jīng)在科技領(lǐng)域有了多種應(yīng)用?;?LSTM 的系統(tǒng)可以學(xué)習(xí)翻譯語言、控制機(jī)器人、圖像分析、文檔摘要、語音識(shí)別圖像識(shí)別、手寫識(shí)別、控制聊天機(jī)器人、預(yù)測(cè)疾病、點(diǎn)擊率和股票、合成音樂等等任務(wù)。比特幣的成交記錄就是事件序列上的加個(gè)數(shù)據(jù),可以基于過去的成交記錄序列來對(duì)未來的價(jià)格作出預(yù)測(cè),和 LSTM 的模型比較合適。接下來的價(jià)格可以作為預(yù)測(cè)結(jié)果。
數(shù)據(jù)集新的問題來了,數(shù)據(jù)從哪里來?
需要的數(shù)據(jù)是一個(gè)包含成交價(jià)格的序列,然后可以截取一部分作為輸入值,接下來的一部分作為預(yù)測(cè)值。后來找了一下,主流的交易平臺(tái)都提供了部分歷史數(shù)據(jù),但都不是很多。最后采用了 btctrade ,用 requests 爬取,它包含比特幣的 50 個(gè)交易記錄。
獲取數(shù)據(jù)集的腳本
get_trades.py 會(huì)獲取這些交易記錄,重新轉(zhuǎn)化為 json ,并且用圖片的方式展示出來,供下一步數(shù)據(jù)分析使用。
運(yùn)行前需要安裝的依賴:
為了爬取數(shù)據(jù),需要使用 requests 庫(kù),一個(gè)非常好用的 HTTP 庫(kù)。為了把交易的數(shù)據(jù)可視化,使用了 matplotlib。
pip install requests pip install matplotlib模型
rnn_predicter.py
使用 LSMT 模型。截取 10個(gè)交易記錄作為輸入,如果 第 11個(gè)價(jià)格比第10個(gè)高,就把輸出設(shè)置為 [1,0,0],如果低就設(shè)置為 [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])下一步定義模型:
tensorflow lstm 模型,需要把 tensor 拆分成序列,然后傳入模型。否則回報(bào)錯(cuò),也就是代碼中的 x = tf.unstack(x, n_steps, 1) 。def RNN(x, weights, biases): #首先把數(shù)據(jù)拆分為 n 個(gè)序列,每一個(gè)的維度 (batch_size, n_input) x = tf.unstack(x, n_steps, 1) # 定一個(gè) lstm cell lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0) # 獲得 lstm 的輸出 outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32) # 加個(gè)線性激活 return tf.matmul(outputs[-1], weights["out"]) + biases["out"]獲得結(jié)果,定義損失函數(shù)和優(yōu)化函數(shù)如何優(yōu)化模型?
預(yù)測(cè)值獲取之后,對(duì)比實(shí)際的價(jià)格,會(huì)有一個(gè)損失函數(shù)。損失函數(shù)使用 softmax_cross_entropy_with_logits 來計(jì)算預(yù)測(cè)值和標(biāo)記值的差,然后用 AdamOptimizer 來優(yōu)化損失函數(shù)優(yōu)化模型。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))項(xiàng)目開源地址和訓(xùn)練結(jié)果https://github.com/TensorFlow...
訓(xùn)練設(shè)備:
GeForce GTX 980 Ti
訓(xùn)練結(jié)果:
Iter 998000, Minibatch Loss= 0.730588, Training Accuracy= 0.75000 Optimization Finished!
后續(xù)更新發(fā)布http://www.tensorflownews.com/
更新計(jì)劃因?yàn)榻灰灼脚_(tái)提供的歷史交易記錄非常少,所以為了進(jìn)一步提高訓(xùn)練效果,后續(xù)要持續(xù)的自己保存歷史交易數(shù)據(jù)或者是找到更好的數(shù)據(jù)來源。還有一個(gè)方面是,模型訓(xùn)練完了之后,保存下來,后續(xù)可以直接使用。還有針對(duì)模型本身還可以做一定的優(yōu)化,現(xiàn)在只是預(yù)測(cè),漲,跌,維持,后續(xù)可以進(jìn)行更加精細(xì)的評(píng)分,按照歷史數(shù)據(jù)進(jìn)行回測(cè)等等。
模型持久化,訓(xùn)練數(shù)據(jù)集持久化,測(cè)試數(shù)據(jù)集。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40734.html
摘要:簡(jiǎn)介一個(gè)比特幣交易機(jī)器人基于模型,僅供娛樂。數(shù)據(jù)集數(shù)據(jù)來自,用爬取,它包含比特幣的個(gè)交易記錄。會(huì)獲取這些交易記錄并且用圖片的方式展示出來。訓(xùn)練結(jié)果之前的項(xiàng)目推薦后續(xù)更新發(fā)布更新計(jì)劃模型持久化,訓(xùn)練數(shù)據(jù)集持久化。 簡(jiǎn)介 一個(gè)比特幣交易機(jī)器人基于 Tensorflow LSTM 模型,僅供娛樂。A Bitcoin trade robot based on Tensorflow LSTM m...
Introduction [Under developing,it is not working well yet.But you can just train,and run it.]ChatGirl is an AI ChatBot based on TensorFlow Seq2Seq Model. TensorFlowNews TensorFlow CNN Model Project:h...
摘要:和分別是樣本輸入和輸出二進(jìn)制值第位,對(duì)于每個(gè)樣本有兩個(gè)值,分別是和對(duì)應(yīng)第位。最簡(jiǎn)單實(shí)現(xiàn),沒有考慮偏置變量,只有兩個(gè)神經(jīng)元。存儲(chǔ)神經(jīng)元狀態(tài),包括,是內(nèi)部狀態(tài)矩陣記憶,是隱藏層神經(jīng)元輸出矩陣。表示當(dāng)前時(shí)序表示時(shí)序記憶單元。下載甄環(huán)傳小說原文。 真正掌握一種算法,最實(shí)際的方法,完全手寫出來。 LSTM(Long Short Tem Memory)特殊遞歸神經(jīng)網(wǎng)絡(luò),神經(jīng)元保存歷史記憶,解決自然...
摘要:令人驚訝的是,創(chuàng)作出了一個(gè)有一定含義的故事。再次聲明,本文中的示例只為了簡(jiǎn)化討論。這是由于精度依賴于初始參數(shù)的隨機(jī)設(shè)定。訓(xùn)練次數(shù)越多超過次精度也會(huì)相應(yīng)提高。 在深度學(xué)習(xí)中,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是一系列善于從序列數(shù)據(jù)中學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)。由于對(duì)長(zhǎng)期依賴問題的魯棒性,長(zhǎng)短期記憶(LSTM)是一類已經(jīng)有實(shí)際應(yīng)用的循環(huán)神經(jīng)網(wǎng)絡(luò)?,F(xiàn)在已有大量關(guān)于 LSTM 的文章和文獻(xiàn),其中推薦如下兩篇:Goodfel...
摘要:本文詳細(xì)討論了自然語言理解的難點(diǎn),并進(jìn)一步針對(duì)自然語言理解的兩個(gè)核心問題,詳細(xì)介紹了規(guī)則方法和深度學(xué)習(xí)的應(yīng)用。引言自然語言理解是人工智能的核心難題之一,也是目前智能語音交互和人機(jī)對(duì)話的核心難題。 摘要:自然語言理解是人工智能的核心難題之一,也是目前智能語音交互和人機(jī)對(duì)話的核心難題。之前寫過一篇文章自然語言理解,介紹了當(dāng)時(shí)NLU的系統(tǒng)方案,感興趣的可以再翻一番,里面介紹過的一些內(nèi)容不再贅...
閱讀 2918·2023-04-26 00:26
閱讀 3521·2023-04-25 14:30
閱讀 3412·2021-10-09 09:44
閱讀 3703·2021-09-28 09:35
閱讀 1898·2021-09-22 16:02
閱讀 1284·2021-09-03 10:30
閱讀 3248·2019-08-30 15:53
閱讀 2190·2019-08-30 14:07