国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用TensorFlow構(gòu)建LSTM模型詳細教程

人工智能 機器學習 后端
本文的目標是解釋一個可用于構(gòu)建基本LSTM模型的簡單代碼。我不會討論和分析結(jié)果。這只是為了讓您開始編寫代碼。

[[242005]]

目標

本文的目標是解釋一個可用于構(gòu)建基本LSTM模型的簡單代碼。我不會討論和分析結(jié)果。這只是為了讓您開始編寫代碼。

設置環(huán)境

我將在本文中使用python編寫LSTM代碼。環(huán)境設置如下:

我建議您下載pycharm IDE并通過IDE將Tensorflow和所有其他庫下載到您的項目中。您可以按照以下步驟設置環(huán)境。

  • 下載PyCharm IDE
  • 創(chuàng)建一個項目
  • 將Tensorflow,NumPy,SciPy,scikit-learn和Pandas下載到您的項目中。
  • 在項目中創(chuàng)建一個新的python文件

如果您想手動創(chuàng)建環(huán)境,下面列出的是python和Tensorflow的兼容版本以及您需要遵循本文的所有其他庫。

注意:不要使用與提到的不同版本的python,因為它可能與給定的Tensorflow版本不兼容。下載scikit-learn時,首先下載NumPy和SciPy軟件包。

  • Python: 3.6.5
  • Tensorflow: 1.9.0
  • scikit-learn: 0.19.1
  • Pip: 10.0.1
  • NumPy: 1.14.3
  • Pandas: 0.23.0
  • SciPy: 1.1.0

我們到底下載了什么?

  • Tensorflow:這是一個機器學習框架。
  • Pandas:這是一個有助于分析和輕松完成數(shù)據(jù)準備的庫。
  • scikit-learn:這是一個機器學習庫,它具有各種機器學習算法,并且還執(zhí)行必要的輔助函數(shù)。
  • NumPy:這是一個可以在多維數(shù)組和矩陣上執(zhí)行高級數(shù)學函數(shù)的庫。
  • SciPy:這是一個用于科學計算和技術(shù)計算的庫。
  • Pip:這是一個Python的包管理系統(tǒng),可以安裝和管理用Python編寫的軟件包。

數(shù)據(jù)?

對于本文,我們將使用在kaggle上發(fā)布的信用卡欺詐數(shù)據(jù)集。我們將使用此數(shù)據(jù)集來訓練我們的LSTM模型,以便對交易是欺詐性交易還是正常交易進行分類。

您可以在此處(https://www.kaggle.com/mlg-ulb/creditcardfraud/version/2)獲取數(shù)據(jù)集表單的csv文件。下載后,將其放入項目中以方便使用。如果您可以在開始使用數(shù)據(jù)之前瀏覽數(shù)據(jù)并閱讀并理解每列數(shù)據(jù)所代表的內(nèi)容,將會很有幫助。

注意:如果您在機器學習算法(如“隨機森林分類器”)上測試,此數(shù)據(jù)集將提供更好的分數(shù),但我們可以使用此數(shù)據(jù)集作為構(gòu)建LSTM模型的起點。此外,您應該記住,此數(shù)據(jù)集具有非常高的類不平衡。

Python代碼

首先,讓我們導入所需Python庫。 

  1. import tensorflow as tf  
  2. import pandas as pd  
  3. import numpy as np  
  4. from tensorflow.contrib import rnn  
  5. from sklearn.model_selection import train_test_split  
  6. from sklearn.metrics import f1_score, accuracy_score, recall_score, precision_score   

現(xiàn)在,我們必須將所有數(shù)據(jù)加載到我們的程序中。我們可以使用Pandas來做到這一點 

  1. data = pd.read_csv('creditcard.csv', skiprows=[0], header=None)  

上面的Python代碼將加載來自csv文件的所有數(shù)據(jù),從而省略帶有標題的行,因此加載的數(shù)據(jù)現(xiàn)在看起來像這樣:

機器學習:使用TensorFlow構(gòu)建LSTM模型詳細教程

前5行數(shù)據(jù)

接下來,我們將加載的數(shù)據(jù)分成標簽和特征。 

  1. features = data.iloc[:, 1:30]  
  2. labels = data.iloc[:, -1]  

如果您瀏覽了信用卡數(shù)據(jù),您會注意到其中有31列。第1行代碼將數(shù)據(jù)從第1列(第0列)加載到第30列,作為“特征”。

如kaggle所述,最后一列是指定交易是否存在欺詐行的列。因此,在第二行代碼中,我們將最后一列中的數(shù)據(jù)作為標簽加載。

注意:我們正在排除第0列,因為它只提供有關交易順序的信息,并沒有為我們的訓練增加實際價值。我們可以根據(jù)數(shù)據(jù)的發(fā)生順序來保留數(shù)據(jù)的順序。

我們現(xiàn)在擁有標簽和特征,我們需要將這些標簽和特征劃分為訓練集和測試集。我們可以使用scikit-learn的'train test split function'。 

  1. X_train,X_test,y_train,y_test = train_test_split(features, labels, test_size=0.2, shuffle=False, random_state=42) 

 

此功能自動將特征和標簽分為測試和訓練集。“X_train”和“X_test”是特征的訓練和測試集,“y_test”和“y_train”是標簽的訓練和測試集。參數(shù)“test_size”指定測試集應該是整個數(shù)據(jù)集的20%。“shuffle”參數(shù)指定在將數(shù)據(jù)拆分為測試和訓練集之前是否應該對數(shù)據(jù)進行混洗。這里我們將其設置為false以保留事務的發(fā)生順序。我們使用“random_state”參數(shù),以便每次運行此函數(shù)時獲得相同的輸出。

我們現(xiàn)在要指定我們的超參數(shù)

 

  1. epochs = 8  
  2. n_classes = 1  
  3. n_units = 200  
  4. n_features = 29  
  5. batch_size = 35 

 

  • epochs:epochs對應于我們將通過模型運行數(shù)據(jù)集的迭代次數(shù)。
  • n_classes:這對應于我們?yōu)榇朔诸愃龅念惖臄?shù)量。在我們的例子中,我們有一個二元分類,如果它是正常的事務我們分配0,如果它是欺詐性事務則分配1。在一個非常基礎的層面,如果我們采用一列,我們可以非常容易地表示0和1的欺詐和正常交易。因此,我們可以將類的數(shù)量設為1。
  • n_units:這對應于LSTM隱藏狀態(tài)的大小(c和h)。
  • n_features:如名稱所指定,這表示數(shù)據(jù)集中的特征數(shù)。
  • batch_size:這是指您要輸入模型的每批數(shù)據(jù)的大小。每批次將進行一次反向傳播。
  • 接下來,我們將為我們將要提供給機器學習模型的批數(shù)據(jù)定義place-holders。

 

  1. xplaceholder= tf.placeholder('float',[None,n_features])  
  2. yplaceholder = tf.placeholder('float'

 

'xplaceholder'占位符包含一批特征數(shù)據(jù),'yplaceholder'包含相應批次的標簽數(shù)據(jù)。'xplaceholder'的shape 已被指定為(<batch_size>,n_features),因為“None”值允許長度靈活到插入占位符的長度,但是fed矩陣應該具有代碼中指定的相同數(shù)量的特征。由于沒有為'yplaceholder'明確指定shape,它將是一個向量,但它的長度將取決于送入占位符的內(nèi)容。在我們的例子中,y將是一個長度為batch_size的向量。

我們已完成大部分準備工作,因此,我們現(xiàn)在將設計,訓練和測試我們的LSTM模型

 

  1. def recurrent_neural_network_model():  
  2. layer ={ 'weights': tf.Variable(tf.random_normal([n_units, n_classes])),'bias': tf.Variable(tf.random_normal([n_classes]))}  
  3. x = tf.split(xplaceholder, n_features, 1)  
  4. print(x)  
  5. lstm_cell = rnn.BasicLSTMCell(n_units)  
  6. outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)  
  7. output = tf.matmul(outputs[-1], layer['weights']) + layer['bias' 
  8. return output 

 

讓我們理解代碼。我將首先解釋'recurrent_neural_network_model()'函數(shù)內(nèi)部的代碼正在做什么,逐行解釋Python代碼如下:

  1. 在這一行中,我們手動定義權(quán)重和偏差的shapes。我們分別使用shape[rnn_size,n_classes]和[n_classes]的隨機值賦予TensorFlow變量'weight'和'bias'。
  2. 現(xiàn)在我們將數(shù)據(jù)作為序列分配給'x'。為此,我們將特征批處理沿著它的垂直維度(維度:1)分成29個切片,這是一個二維張量。每個切片是作為LSTM層的輸入給出的序列的元素。(序列的一個元素的形狀將是:(<batch_size>,1))
  3. 然后我們正在創(chuàng)建LSTM層。該函數(shù)實例化所有門的變量。
  4. 'outputs'變量包含每個時間步長的LSTM層的所有輸出,'state'包含兩個隱藏狀態(tài)(h和c)的最后狀態(tài)的值。
  5. 這里我們只使用'outputs [-1]'獲取LSTM層的最后一個輸出,并將它與先前定義的權(quán)重矩陣相乘,并將偏差值添加到它。結(jié)果值是前向傳播的logit值。
  6. 最后,我們將logit值返回給調(diào)用函數(shù)'train_neural_network()'。

 

  1. def train_neural_network():  
  2. #1  
  3. logit = recurrent_neural_network_model()  
  4. logit = tf.reshape(logit, [-1])  
  5. #3  
  6. cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=yplaceholder))  
  7. optimizer = tf.train.AdamOptimizer().minimize(cost)  
  8. with tf.Session() as sess:  
  9. #6  
  10. tf.global_variables_initializer().run()  
  11. tf.local_variables_initializer().run()  
  12. #7  
  13. for epoch in range(epochs):  
  14. epoch_loss = 0 #8  
  15. i = 0  
  16. for i in range(int(len(X_train) / batch_size)): #10  
  17. #11  
  18. start = i  
  19. end = i + batch_size  
  20. #13  
  21. batch_x = np.array(X_train[start:end])  
  22. batch_y = np.array(y_train[start:end])  
  23. #15  
  24. _, c = sess.run([optimizer, cost], feed_dict={xplaceholder: batch_x, yplaceholder: batch_y})  
  25. epoch_loss += c  
  26. i += batch_size  
  27. #18  
  28. print('Epoch', epoch, 'completed out of', epochs, 'loss:', epoch_loss)  
  29. pred = tf.round(tf.nn.sigmoid(logit)).eval({xplaceholder: np.array(X_test), yplaceholder: np.array(y_test)})  
  30. #20  
  31. f1 = f1_score(np.array(y_test), pred, average='macro' 
  32. accuracy=accuracy_score(np.array(y_test), pred)  
  33. recall = recall_score(y_true=np.array(y_test), y_pred= pred)  
  34. precision = precision_score(y_true=np.array(y_test), y_pred=pred)  
  35. #24  
  36. print("F1 Score:", f1)  
  37. print("Accuracy Score:",accuracy)  
  38. print("Recall:", recall)  
  39. print("Precision:"precision 
  40. train_neural_network() 

 

現(xiàn)在讓我們了解'train_neural_network()'函數(shù)中的代碼是做什么的,逐行解釋Python代碼如下:

  • 1.這里我們將接收的logit值分配給變量。logit值是激活的倒數(shù)。
  • 2.然后我們將矩陣重reshaping 為一個向量,因為當將它提供給損失函數(shù)時,標簽的shape和logits 應該相等。
  • 3.我們在這里定義了損失函數(shù)。使用“sigmoid_cross_entropy_with_logits”函數(shù)是因為我們正在進行二元分類。如果這是一個多類分類,我們應該使用像'softmax_cross_entropy_with_logits'這樣的損失函數(shù)。
  • 4.我們使用“AdamOptimizer()”優(yōu)化器,因為它具有相當好的性能。

直到這一點,我們討論的所有代碼都不在Tensorflow會話中。從這里開始,所有討論的代碼都將在TensorFlow會話中。

在調(diào)用“train_neural_network()”以啟動程序之后,Tensorflow會話的起點將是執(zhí)行開始的位置。

我們正在初始化到目前為止我們已聲明的所有全局變量。

  • 6.然后我們正在初始化項目中的所有局部變量。
  • 7.在這里,我們定義一個循環(huán),直到滿足我們定義的迭代次數(shù)(epoch)。
  • 8.在每個epoch開始時將epoch loss重置為0。
  • 9.定義變量以在將數(shù)據(jù)拆分為批次時跟蹤開始和結(jié)束計算
  • 10.在這里,我們再次定義一個循環(huán),直到batches 達到計算閾值為止。
  • 11.和12.我們使用'start'和'end'變量來跟蹤數(shù)據(jù)在每次迭代中的分割位置。
  • 13.和14.在每次迭代中,將分別為“batch_x”和“batch_y”變量分配一批特征和標簽。
  • 15.在這一行中,我們告訴Tensorflow運行必要的子圖來計算優(yōu)化器和成本,方法是將'batch_x'和'batch_y'變量中的值提供給前面提到的占位符。結(jié)果,將計算優(yōu)化器的值和成本,并分別分配給“throw-away”變量和“c”變量。
  • 16.當前批處理的損失將添加到“epoch_loss”變量中。
  • 17.此行有助于遍歷每批數(shù)據(jù)(特征和標簽)。
  • 18.打印那個epoch的總損失

到目前為止我們討論的是模型的訓練方面。訓練將持續(xù)到epochs數(shù)達到閾值。

接下來的幾行代碼用于測試模型。

注意:理想情況下,我們將數(shù)據(jù)集劃分為3組,即訓練,驗證和測試。我們將保留測試集并使用驗證集來查看模型的性能并更改超參數(shù)以實現(xiàn)更好的性能。當我們認為模型已經(jīng)足夠改進時,我們只會采用測試集來了解模型的表現(xiàn)。對于本文,我們只使用了兩套訓練集和測試集來保持簡單。

  • 19.這是我們將測試數(shù)據(jù)集提供給模型并告訴Tensorflow運行計算logit所需的子圖的地方。然后我們通過sigmoid激活傳遞logit值來獲得預測。四舍五入該值以刪除預測值的小數(shù)位。
  • 20.我們在這里計算F1得分。F1 Score是Precision和Recall的加權(quán)平均值。您可以從這里閱讀更多相關信息。
  • 21.然后我們計算準確度分數(shù)。
  • 22.這次召回正在計算中。召回是正確預測的陽性觀察與所有陽性觀察的比率。
  • 23.我們也在計算精度。精確度是正確預測的陽性觀察值與總預測陽性觀察值的比率。
  • 24.至27.打印出所有計算得分。

所以,我們終于完成了代碼。

我希望本文能幫助您了解使用Tensorflow構(gòu)建基本LSTM的過程。請注意,此模型是一個非常基本的版本,是構(gòu)建和改進的良好起點。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2021-11-02 09:40:50

TensorFlow機器學習人工智能

2017-07-24 13:37:42

深度學習KerasTensorFlow

2020-09-07 11:30:47

ElasticSear索引Linux

2019-07-23 10:22:11

TensorFlow.Python機器學習

2021-03-10 18:26:49

Tensorflow語音識別音頻處理

2017-09-12 16:31:21

TensorFlowLSTMCNN

2011-07-06 10:32:07

Xcode

2011-07-06 10:46:33

Xcode

2016-12-26 20:52:11

2023-01-11 07:28:49

TensorFlow分類模型

2017-03-20 17:20:35

iOSTensorFlow

2018-08-27 17:05:48

tensorflow神經(jīng)網(wǎng)絡圖像處理

2023-09-14 08:30:46

JsonPathXPath

2024-11-19 13:17:38

視覺語言模型Pytorch人工智能

2017-07-07 14:41:13

機器學習神經(jīng)網(wǎng)絡JavaScript

2017-08-28 21:31:37

TensorFlow深度學習神經(jīng)網(wǎng)絡

2020-03-12 12:31:01

開源谷歌量子AI

2020-03-26 08:00:00

機器學習人工智能AI

2017-11-20 15:12:42

PythonTensorFlowWord2Vec

2017-08-29 13:50:03

TensorFlow深度學習神經(jīng)網(wǎng)絡
點贊
收藏

51CTO技術(shù)棧公眾號

又黄又爽在线观看| 日韩精品在线中文字幕| 波多野一区二区| 亚洲福中文字幕伊人影院| 女人被男人躁得好爽免费视频 | 日韩在线观看你懂的| 日韩123区| 欧美人牲a欧美精品| 蜜桃成人在线视频| 亚洲美女屁股眼交3| 中文字幕第100页| 欧美激情一区三区| 久久人妻精品白浆国产| 91亚洲精品乱码久久久久久蜜桃| 福利视频一区二区三区四区| 国产麻豆成人精品| 日本午夜激情视频| 久久午夜电影网| 91蝌蚪视频在线观看| 中文一区二区完整视频在线观看 | 国产河南妇女毛片精品久久久| 神马影院午夜我不卡影院| 蜜桃视频一区| 在线观看日本一区| 成人一区在线观看| 色综合av综合无码综合网站| 久久综合一区二区| 一区二区三区免费播放| 国产精品黄色在线观看| 久久久久久77777| 亚洲va国产天堂va久久en| 精品乱码一区二区三四区视频| 欧美色图一区二区三区| 在线黄色网页| 一区二区欧美久久| 韩国精品福利一区二区三区| 国产精品欧美日韩久久| av不卡在线看| 性高湖久久久久久久久aaaaa| 91蜜桃免费观看视频| 亚洲一级免费观看| 午夜精品成人在线| 成人在线播放| www.亚洲免费视频| 久久99国产成人小视频| 福利视频久久| 国产精品一区二区黑丝| 欧美日韩在线观看不卡| 色综合网色综合| 国产福利电影在线播放| 色综合天天狠天天透天天伊人| 精品不卡一区| 日韩资源av在线| 国产欧美一区二区三区在线看蜜臀| 在线中文视频| 亚洲欧美在线看| 久久综合色占| 日韩电影天堂视频一区二区| wwwwww.欧美系列| 国产在线三区| 久久伊人精品视频| 欧美久久视频| r级无码视频在线观看| 亚洲精品va在线观看| 天堂8中文在线| 国产91精品不卡视频| 日日夜夜精品免费视频| 亚洲天堂网一区| 337p亚洲精品色噜噜| 动漫一区二区三区| 国产欧美日韩一区| 国产婷婷色一区二区三区在线| 91视频在线观看| 久久欧美在线电影| 久久精品国产亚洲高清剧情介绍| 116美女写真午夜一级久久| 亚洲久久久久久久久久久| 日韩在线看片| 人妻有码中文字幕| 欧美日韩国产首页| 日韩中文av| 国产资源在线免费观看| 欧美日韩一区高清| 在线视频cao| 精品福利影视| 亚洲美女在线一区| 久久av影院| 亚洲国产精品久久久久婷婷老年| 亚洲制服丝袜在线| 亚洲日日夜夜| 爱爱爱视频网站| 日韩欧美中文第一页| 国产精品极品| 黄色三级中文字幕| 日韩午夜在线影院| 国户精品久久久久久久久久久不卡| 69久久久久久| 亚洲欧洲一区二区三区久久| 伊人久久大香线蕉av超碰演员| 免费免费啪视频在线观看| 中文字幕少妇一区二区三区| 日日摸夜夜添夜夜添国产精品 | 91极品美女在线| 麻豆一区二区| 国产精品久久国产| 精品国产伦一区二区三区观看体验| 香蕉国产精品| 免费av片风间由美在线| 精品国产一区二区三区久久久 | 欧美男人的天堂| 色天使久久综合网天天| 亚洲人成精品久久久| www.日日操| 日韩在线精品一区| 国产真实乱对白精彩久久| 在线看女人毛片| 久久综合一区| 91 com成人网| 性xx色xx综合久久久xx| 在线看免费av| 国产精品一区av| 亚洲www啪成人一区二区麻豆| 在线成人动漫av| 看黄色免费网站| 日韩av理论片| 亚洲最色的网站| 日韩理论电影| 日本视频在线观看一区二区三区| 国产伦精品免费视频| 亚洲午夜国产一区99re久久| gogogo高清在线观看一区二区| 天堂中文字幕——hd| 国产精彩精品视频| 亚洲第一主播视频| 国产精品二区不卡| 日本啊v在线| 国产日韩精品久久| 91精品国产综合久久久蜜臀粉嫩| 亚洲日本免费| 成人免费高清观看| 久草视频国产在线| 欧美国产视频日韩| 亚洲一区二区三区自拍| 天天揉久久久久亚洲精品| 久久经典视频| 天堂资源在线亚洲视频| 亚洲精品网站在线播放gif| 成人激情免费网站| 欧美黄视频在线观看| 天堂中文字幕一二区| 国产精品视频地址| 在线观看一区二区视频| 日韩激情中文字幕| 免费污视频在线一区| 国产原创精品在线| 91日韩在线视频| 欧美一级片免费看| 国产成a人无v码亚洲福利| 4438五月综合| 色佬视频在线观看| 蜜桃传媒视频麻豆第一区免费观看 | 亚洲国产一区二区三区高清| 在线观看男女av免费网址| 黄色影视在线观看| 欧美成人小视频| 亚洲国产成人高清精品| 亚洲欧美日韩在线观看a三区| 日本欧美一区| 中文字幕2018| 涩涩涩999| 97超级碰碰碰| 欧美一区二区二区| 亚洲国产精品精华液ab| 伊人成人在线| 91成人app| 精品999视频| 国产无限制自拍| 91精品国产自产在线| 精品欧美一区二区三区精品久久 | 欧美日韩精品一区二区天天拍小说| 麻豆成人91精品二区三区| 亚洲二区av| 国产黄色在线| 国产黄色一级网站| 亚洲aa在线观看| 中文字幕欧美视频在线| 亚洲国产wwwccc36天堂| 青青草成人在线观看| 久久久精品国产**网站| 欧美性天天影视| 亚洲欧美在线精品| 水蜜桃一区二区三区| 热99精品只有里视频精品| 亚洲成色777777女色窝| 丰满女人性猛交| 欧美在线观看网站| 亚洲激情久久久| 亚洲成人av在线电影| 精品一区二区三区在线观看| 日韩美女一区二区三区在线观看|