精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

自創數據集,用TensorFlow預測股票教程

人工智能 深度學習
本文非常適合初學者了解如何使用 TensorFlow 構建基本的神經網絡,它全面展示了構建一個 TensorFlow 模型所涉及的概念與模塊。本文所使用的數據集可以直接下載,所以有一定基礎的讀者也可以嘗試使用更強的循環神經網絡處理這一類時序數據。

[[211061]]

STATWORX 團隊近日從 Google Finance API 中精選出了 S&P 500 數據,該數據集包含 S&P 500 的指數和股價信息。有了這些數據,他們就希望能利用深度學習模型和 500 支成分股價預測 S&P 500 指數。STATWORX 團隊的數據集十分新穎,但只是利用四個隱藏層的全連接網絡實現預測,讀者也可以下載該數據嘗試更加優秀的循環神經網絡。

本文非常適合初學者了解如何使用 TensorFlow 構建基本的神經網絡,它全面展示了構建一個 TensorFlow 模型所涉及的概念與模塊。本文所使用的數據集可以直接下載,所以有一定基礎的讀者也可以嘗試使用更強的循環神經網絡處理這一類時序數據。

數據集地址:http://files.statworx.com/sp500.zip

導入和預處理數據

STATWORX 團隊從服務器爬取股票數據,并將它們保存為 csv 格式的文件。該數據集包含 n=41266 分鐘的記錄,范圍從 2017 年的 4 月到 8 月的 500 支股票和 S&P 500 指數,股票和股指的范圍分布十分廣。

  1. # Import data 
  2.  
  3. data = pd.read_csv('data_stocks.csv'
  4.  
  5. # Dimensions of dataset 
  6.  
  7. n = data.shape[0] 
  8.  
  9. p = data.shape[1] 

該數據集已經經過了清理與預處理,即損失的股票和股指都通過 LOCF’ed 處理(下一個觀測數據復制前面的),所以該數據集沒有任何缺損值。

我們可以使用 pyplot.plot(‘SP500’) 語句繪出 S&P 時序數據。

 

S&P 500 股指時序繪圖

  • 預備訓練和測試數據

該數據集需要被分割為訓練和測試數據,訓練數據包含總數據集 80% 的記錄。該數據集并不需要擾亂而只需要序列地進行切片。訓練數據可以從 2017 年 4 月選取到 2017 年 7 月底,而測試數據再選取剩下到 2017 年 8 月的數據。

  1. # Training and test data 
  2.  
  3. train_start = 0 
  4.  
  5. train_end = int(np.floor(0.8*n)) 
  6.  
  7. test_start = train_end + 1 
  8.  
  9. test_end = n 
  10.  
  11. data_train = data[np.arange(train_start, train_end), :] 
  12.  
  13. data_test = data[np.arange(test_start, test_end), :] 

時序交叉驗證有很多不同的方式,例如有或沒有再擬合(refitting)而執行滾動式預測、或者如時序 bootstrap 重采樣等更加詳細的策略等。后者涉及時間序列周期性分解的重復樣本,以便模擬與原時間序列相同周期性模式的樣本,但這并不不是簡單的復制他們的值。

  • 數據標準化

大多數神經網絡架構都需要標準化數據,因為 tanh 和 sigmoid 等大多數神經元的激活函數都定義在 [-1, 1] 或 [0, 1] 區間內。目前線性修正單元 ReLU 激活函數是最常用的,但它的值域有下界無上界。不過無論如何我們都應該重新縮放輸入和目標值的范圍,這對于我們使用梯度下降算法也很有幫助??s放取值可以使用 sklearn 的 MinMaxScaler 輕松地實現。

  1. # Scale data 
  2.  
  3. from sklearn.preprocessing import MinMaxScaler 
  4.  
  5. scaler = MinMaxScaler() 
  6.  
  7. scaler.fit(data_train) 
  8.  
  9. scaler.transform(data_train) 
  10.  
  11. scaler.transform(data_test) 
  12.  
  13. # Build X and y 
  14.  
  15. X_train = data_train[:, 1:] 
  16.  
  17. y_train = data_train[:, 0] 
  18.  
  19. X_test = data_test[:, 1:] 
  20.  
  21. y_test = data_test[:, 0]pycharm 

注意,我們必須謹慎地確定什么時候該縮放哪一部分數據。比較常見的錯誤就是在拆分測試和訓練數據集之前縮放整個數據集。因為我們在執行縮放時會涉及到計算統計數據,例如一個變量的***和最小值。但在現實世界中我們并沒有來自未來的觀測信息,所以必須對訓練數據按比例進行統計計算,并將統計結果應用于測試數據中。不然的話我們就使用了未來的時序預測信息,這常常令預測度量偏向于正向。

TensorFlow 簡介

TensorFlow 是一個十分優秀的框架,目前是深度學習和神經網絡方面用戶最多的框架。它基于 C++的底層后端,但通常通過 Python 進行控制。TensorFlow 利用強大的靜態圖表征我們需要設計的算法與運算。這種方法允許用戶指定運算為圖中的結點,并以張量的形式傳輸數據而實現高效的算法設計。由于神經網絡實際上是數據和數學運算的計算圖,所以 TensorFlow 能很好地支持神經網絡和深度學習。

總的來說,TensorFlow 是一種采用數據流圖(data flow graphs),用于數值計算的開源軟件庫。其中 Tensor 代表傳遞的數據為張量(多維數組),Flow 代表使用計算圖進行運算。數據流圖用「結點」(nodes)和「邊」(edges)組成的有向圖來描述數學運算?!附Y點」一般用來表示施加的數學操作,但也可以表示數據輸入的起點和輸出的終點,或者是讀取/寫入持久變量(persistent variable)的終點。邊表示結點之間的輸入/輸出關系。這些數據邊可以傳送維度可動態調整的多維數據數組,即張量(tensor)。

 

執行加法的簡單計算圖

在上圖中,兩個零維張量(標量)將執行相加任務,這兩個張量儲存在兩個變量 a 和 b 中。這兩個值流過圖形在到達正方形結點時被執行相加任務,相加的結果被儲存在變量 c 中。實際上,a、b 和 c 可以被看作占位符,任何輸入到 a 和 b 的值都將會相加到 c。這正是 TensorFlow 的基本原理,用戶可以通過占位符和變量定義模型的抽象表示,然后再用實際的數據填充占位符以產生實際的運算,下面的代碼實現了上圖簡單的計算圖:

  1. # Import TensorFlow 
  2.  
  3. import tensorflow as tf 
  4.  
  5. # Define a and b as placeholders 
  6.  
  7. a = tf.placeholder(dtype=tf.int8) 
  8.  
  9. b = tf.placeholder(dtype=tf.int8) 
  10.  
  11. # Define the addition 
  12.  
  13. c = tf.add(a, b) 
  14.  
  15. # Initialize the graph 
  16.  
  17. graph = tf.Session() 
  18.  
  19. # Run the graph 
  20.  
  21. graph.run(c, feed_dict{a: 5, b: 4}) 

如上在導入 TensorFlow 庫后,使用 tf.placeholder() 定義兩個占位符來預儲存張量 a 和 b。隨后定義運算后就能執行運算圖得出結果。

  • 占位符

正如前面所提到的,神經網絡的初始源自占位符。所以現在我們先要定義兩個占位符以擬合模型,X 包含神經網絡的輸入(所有 S&P 500 在時間 T=t 的股票價格),Y 包含神經網絡的輸出(S&P 500 在時間 T=t+1 的指數值)。

因此輸入數據占位符的維度可定義為 [None, n_stocks],輸出占位符的維度為 [None],它們分別代表二維張量和一維張量。理解輸入和輸出張量的維度對于構建整個神經網絡十分重要。

  1. # Placeholder 
  2.  
  3. X = tf.placeholder(dtype=tf.float32, shape=[None, n_stocks]) 
  4.  
  5. Y = tf.placeholder(dtype=tf.float32, shape=[None]) 

以上代碼中的 None 指代我們暫時不知道每個批量傳遞到神經網絡的數量,所以使用 None 可以保持靈活性。我們后面會定義控制每次訓練時使用的批量大小 batch_size。

  • 變量

除了占位符,變量是 TensorFlow 表征數據和運算的另一個重要元素。雖然占位符在計算圖內通常用于儲存輸入和輸出數據,但變量在計算圖內部是非常靈活的容器,它可以在執行中進行修改與傳遞。神經網絡的權重和偏置項一般都使用變量定義,以便在訓練中可以方便地進行調整,變量需要進行初始化,后文將詳細解釋這一點。

該模型由四個隱藏層組成,***層包含 1024 個神經元,然后后面三層依次以 2 的倍數減少,即 512、256 和 128 個神經元。后面的層級的神經元依次減少就壓縮了前面層級中抽取的特征。當然,我們還能使用其它神經網絡架構和神經元配置以更好地處理數據,例如卷積神經網絡架構適合處理圖像數據、循環神經網絡適合處理時序數據,但本文只是為入門者簡要地介紹如何使用全連接網絡處理時序數據,所以那些復雜的架構本文并不會討論。

  1. # Model architecture parameters 
  2.  
  3. n_stocks = 500 
  4.  
  5. n_neurons_1 = 1024 
  6.  
  7. n_neurons_2 = 512 
  8.  
  9. n_neurons_3 = 256 
  10.  
  11. n_neurons_4 = 128 
  12.  
  13. n_target = 1 
  14.  
  15. # Layer 1: Variables for hidden weights and biases 
  16.  
  17. W_hidden_1 = tf.Variable(weight_initializer([n_stocks, n_neurons_1])) 
  18.  
  19. bias_hidden_1 = tf.Variable(bias_initializer([n_neurons_1])) 
  20.  
  21. # Layer 2: Variables for hidden weights and biases 
  22.  
  23. W_hidden_2 = tf.Variable(weight_initializer([n_neurons_1, n_neurons_2])) 
  24.  
  25. bias_hidden_2 = tf.Variable(bias_initializer([n_neurons_2])) 
  26.  
  27. # Layer 3: Variables for hidden weights and biases 
  28.  
  29. W_hidden_3 = tf.Variable(weight_initializer([n_neurons_2, n_neurons_3])) 
  30.  
  31. bias_hidden_3 = tf.Variable(bias_initializer([n_neurons_3])) 
  32.  
  33. # Layer 4: Variables for hidden weights and biases 
  34.  
  35. W_hidden_4 = tf.Variable(weight_initializer([n_neurons_3, n_neurons_4])) 
  36.  
  37. bias_hidden_4 = tf.Variable(bias_initializer([n_neurons_4])) 
  38. Output layer: Variables for output weights and biases 
  39.  
  40. W_out = tf.Variable(weight_initializer([n_neurons_4, n_target])) 
  41.  
  42. bias_out = tf.Variable(bias_initializer([n_target])) 

理解輸入層、隱藏層和輸出層之間變量的維度變換對于理解整個網絡是十分重要的。作為多層感知機的一個經驗性法則,后面層級的***個維度對應于前面層級權重變量的第二個維度。這可能聽起來比較復雜,但實際上只是將每一層的輸出作為輸入傳遞給下一層。偏置項的維度等于當前層級權重的第二個維度,也等于該層中的神經元數量。

設計神經網絡的架構

在定義完神經網絡所需要的權重矩陣與偏置項向量后,我們需要指定神經網絡的拓撲結構或網絡架構。因此占位符(數據)和變量(權重和偏置項)需要組合成一個連續的矩陣乘法系統。

此外,網絡隱藏層中的每一個神經元還需要有激活函數進行非線性轉換。激活函數是網絡體系結構非常重要的組成部分,因為它們將非線性引入了系統。目前有非常多的激活函數,其中最常見的就是線性修正單元 ReLU 激活函數,本模型也將使用該激活函數。

  1. # Hidden layer 
  2.  
  3. hidden_1 = tf.nn.relu(tf.add(tf.matmul(X, W_hidden_1), bias_hidden_1)) 
  4.  
  5. hidden_2 = tf.nn.relu(tf.add(tf.matmul(hidden_1, W_hidden_2), bias_hidden_2)) 
  6.  
  7. hidden_3 = tf.nn.relu(tf.add(tf.matmul(hidden_2, W_hidden_3), bias_hidden_3)) 
  8.  
  9. hidden_4 = tf.nn.relu(tf.add(tf.matmul(hidden_3, W_hidden_4), bias_hidden_4)) 
  10.  
  11. Output layer (must be transposed) 
  12.  
  13. out = tf.transpose(tf.add(tf.matmul(hidden_4, W_out), bias_out)) 

下圖將展示本文構建的神經網絡架構,該模型主要由三個構建塊組成,即輸入層、隱藏層和輸出層。這種架構被稱為前饋網絡或全連接網絡,前饋表示輸入的批量數據只會從左向右流動,其它如循環神經網絡等架構也允許數據向后流動。

前饋網絡的核心架構

  • 損失函數

該網絡的損失函數主要是用于生成網絡預測與實際觀察到的訓練目標之間的偏差值。對回歸問題而言,均方誤差(MSE)函數最為常用。MSE 計算預測值與目標值之間的平均平方誤差。

  1. # Cost function 
  2.  
  3. mse = tf.reduce_mean(tf.squared_difference(out, Y)) 

然而,MSE 的特性在常見的優化問題上很有優勢。

  • 優化器

優化器處理的是訓練過程中用于適應網絡權重和偏差變量的必要計算。這些計算調用梯度計算結果,指示訓練過程中,權重和偏差需要改變的方向,從而最小化網絡的代價函數。穩定、快速的優化器的開發,一直是神經網絡和深度學習領域的重要研究。

  1. # Optimizer 
  2.  
  3. opt = tf.train.AdamOptimizer().minimize(mse) 

以上是用到了 Adam 優化器,是目前深度學習中的默認優化器。Adam 表示適應性矩估計,可被當作 AdaGrad 和 RMSProp 這兩個優化器的結合。

  • 初始化器

初始化器被用于在訓練之前初始化網絡的變量。因為神經網絡是使用數值優化技術訓練的,優化問題的起點是找到好的解決方案的重點。TensorFlow 中有不同的初始化器,每個都有不同的初始化方法。在這篇文章中,我使用的是 tf.variance_scaling_initializer(),是一種默認的初始化策略。

  1. # Initializers 
  2.  
  3. sigma = 
  4.  
  5. weight_initializer = tf.variance_scaling_initializer(mode="fan_avg", distribution="uniform", scale=sigma) 
  6.  
  7. bias_initializer = tf.zeros_initializer() 

注意,用 TensorFlow 的計算圖可以對不同的變量定義多個初始化函數。然而,在大多數情況下,一個統一的初始化函數就夠了。

擬合神經網絡

完成對網絡的占位符、變量、初始化器、代價函數和優化器的定義之后,就可以開始訓練模型了,通常會使用小批量訓練方法。在小批量訓練過程中,會從訓練數據隨機提取數量為 n=batch_size 的數據樣本饋送到網絡中。訓練數據集將分成 n/batch_size 個批量按順序饋送到網絡中。此時占位符 X 和 Y 開始起作用,它們保存輸入數據和目標數據,并在網絡中分別表示成輸入和目標。

X 的一個批量數據會在網絡中向前流動直到到達輸出層。在輸出層,TensorFlow 將會比較當前批量的模型預測和實際觀察目標 Y。然后,TensorFlow 會進行優化,使用選擇的學習方案更新網絡的參數。更新完權重和偏差之后,下一個批量被采樣并重復以上過程。這個過程將一直進行,直到所有的批量都被饋送到網絡中去,即完成了一個 epoch。

當訓練達到了 epoch 的***值或其它的用戶自定義的停止標準的時候,網絡的訓練就會停止。

  1. # Run initializer 
  2.  
  3. net.run(tf.global_variables_initializer()) 
  4.  
  5.  
  6.  
  7. # Setup interactive plot 
  8.  
  9. plt.ion() 
  10.  
  11. fig = plt.figure() 
  12.  
  13. ax1 = fig.add_subplot(111) 
  14.  
  15. line1, = ax1.plot(y_test) 
  16.  
  17. line2, = ax1.plot(y_test*0.5) 
  18.  
  19. plt.show() 
  20.  
  21.  
  22.  
  23. # Number of epochs and batch size 
  24.  
  25. epochs = 10 
  26.  
  27. batch_size = 256for e in range(epochs): 
  28.  
  29.  
  30.  
  31. # Shuffle training data 
  32.  
  33. shuffle_indices = np.random.permutation(np.arange(len(y_train))) 
  34.  
  35. X_train = X_train[shuffle_indices] 
  36.  
  37. y_train = y_train[shuffle_indices] 
  38.  
  39.  
  40.  
  41. # Minibatch training 
  42.  
  43. for i in range(0, len(y_train) // batch_size): 
  44.  
  45. start = i * batch_size 
  46.  
  47. batch_x = X_train[start:start + batch_size] 
  48.  
  49. batch_y = y_train[start:start + batch_size] 
  50.  
  51. # Run optimizer with batch 
  52.  
  53. net.run(opt, feed_dict={X: batch_x, Y: batch_y}) 
  54.  
  55.  
  56.  
  57. # Show progress 
  58.  
  59. if np.mod(i, 5) == 0: 
  60.  
  61. # Prediction 
  62.  
  63. pred = net.run(out, feed_dict={X: X_test}) 
  64.  
  65. line2.set_ydata(pred) 
  66.  
  67. plt.title('Epoch ' + str(e) + ', Batch ' + str(i)) 
  68.  
  69. file_name = 'img/epoch_' + str(e) + '_batch_' + str(i) + '.jpg' 
  70.  
  71. plt.savefig(file_name) 
  72.  
  73. plt.pause(0.01) 

在訓練過程中,我們在測試集(沒有被網絡學習過的數據)上評估了網絡的預測能力,每訓練 5 個 batch 進行一次,并展示結果。此外,這些圖像將被導出到磁盤并組合成一個訓練過程的視頻動畫。模型能迅速學習到測試數據中的時間序列的位置和形狀,并在經過幾個 epoch 的訓練之后生成準確的預測。太棒了!

可以看到,網絡迅速地適應了時間序列的基本形狀,并能繼續學習數據的更精細的模式。這歸功于 Adam 學習方案,它能在模型訓練過程中降低學習率,以避免錯過最小值。經過 10 個 epoch 之后,我們***地擬合了測試數據!***的測試 MSE 等于 0.00078,這非常低,因為目標被縮放過。測試集的預測的平均百分誤差率等于 5.31%,這是很不錯的結果。

 

預測和實際 S&P 價格的散點圖(已縮放)

請注意其實還有很多種方法能進一步優化這個結果:層和神經元的設計、不同的初始化和激活方案的選擇、引入神經元的 dropout 層、早期停止法的應用,等等。此外,其它不同類型的深度學習模型,比如循環神經網絡也許能在這個任務中達到更好的結果。不過,這在我們的討論范圍之外。

結論和展望

TensorFlow 的發布是深度學習研究的里程碑事件,其高度的靈活性和強大的性能使研究者能開發所有種類的復雜神經網絡架構以及其它機器學習算法。然而,相比使用高級 API 如 Keras 或 MxNet,靈活性的代價是更長的建模時間。盡管如此,我相信 TensorFlow 將繼續發展,并成為神經網路和和深度學習開發的研究和實際應用的現實標準。我們很多客戶都已經在使用 TensorFlow,或正在開發應用 TensorFlow 模型的項目。我們的 STATWORX 的數據科學顧問(https://www.statworx.com/de/data-science/)基本都是用 TensorFlow 研究課開發深度學習以及神經網絡。

 

谷歌未來針對 TensorFlow 的計劃會是什么呢?至少在我看來,TensorFlow 缺少一個簡潔的圖形用戶界面,用于在 TensorFlow 后端設計和開發神經網絡架構。也許這就是谷歌未來的一個目標 

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2022-02-18 10:34:19

邏輯回歸KNN預測

2021-08-20 10:12:35

Python蒙特卡洛股票

2016-12-26 20:52:11

2020-08-12 09:46:46

TensorFlow數據機器學習

2020-07-15 13:51:48

TensorFlow數據機器學習

2009-08-27 10:45:03

ibmdw云計算

2022-08-16 09:00:00

機器學習人工智能數據庫

2021-09-23 10:36:55

TensorFlow數據機器學習

2021-01-04 10:40:37

Python不平衡數據機器學習

2019-04-26 13:26:00

預測股票深度學習股票

2023-03-16 07:27:30

CnosDB數據庫

2020-08-06 16:37:25

機器學習技術股票

2017-12-01 15:24:04

TensorFlow深度學習教程

2018-08-30 09:36:10

編程語言Python機器學習

2020-08-21 09:23:22

Python開發工具

2017-03-20 17:20:35

iOSTensorFlow

2021-09-13 11:59:30

Python股票代碼

2018-06-14 16:59:42

TensorFlowEager深度學習

2014-12-03 09:48:36

編程語言

2009-07-24 13:07:59

BLL類
點贊
收藏

51CTO技術棧公眾號

水蜜桃精品av一区二区| 51漫画成人app入口| 久久国产精品99久久久久久老狼 | 国内av一区二区| 亚洲羞羞网站| 国产婷婷色一区二区三区四区 | 欧美日韩夜夜| 欧美日韩国产高清一区二区 | 日韩精品最新网址| 国产精品欧美激情在线观看| 九七电影韩国女主播在线观看| 不卡高清视频专区| 国产精品影院在线观看| 国产亚洲精品久久久久久打不开| 蜜桃tv一区二区三区| 9191国产精品| 日本不卡在线观看视频| 日本在线观看视频| 久久亚洲欧美国产精品乐播| 亚洲在线免费观看| 欧美男人亚洲天堂| 亚洲精品韩国| 久久久久北条麻妃免费看| 97超碰在线资源| 国产一区二区三区亚洲| 91精品欧美综合在线观看最新| 777米奇影视第四色| 91亚洲天堂| 成人免费视频在线观看| 欧美亚洲精品日韩| 天天操天天干天天插| 韩国午夜理伦三级不卡影院| 国产精品18久久久久久首页狼| 国产在线视频二区| 伊人久久大香线蕉精品组织观看| 亚洲午夜女主播在线直播| av鲁丝一区鲁丝二区鲁丝三区| 成人在线精品| 91精品免费在线观看| 黑人粗进入欧美aaaaa| 少妇视频在线观看| 亚洲高清一区二区三区| 在线观看av的网址| a级影片在线观看| 最新国产成人在线观看| 亚洲国产精品一区二区第四页av| 青青青免费视频在线2| www.成人在线| 国产精品免费一区二区三区观看| 国产丰满美女做爰| 国产精品性做久久久久久| 91精品视频免费看| 国产毛片一区二区三区va在线| 奇米影视在线99精品| 国产精品扒开腿做爽爽爽的视频| 日韩综合在线观看| 亚洲欧美日韩在线观看a三区| 69精品小视频| 在线观看日本视频| 日韩制服丝袜先锋影音| 国产精品美女999| 在线播放亚洲精品| 激情图片小说一区| 亚洲精品日产aⅴ| www.成人精品| av午夜精品一区二区三区| 激情伦成人综合小说| 色视频在线观看福利| 国产三级精品在线| 亚洲日本精品| 最爽无遮挡行房视频在线| 一区二区欧美精品| av高清在线免费观看| 中文日产幕无线码一区二区| 日本道色综合久久| 欧美成人乱码一二三四区免费| 999色成人| 亚洲高清在线观看| 国产一二三四五区| 99久久精品费精品国产| 色综合久久精品亚洲国产| 日韩av男人天堂| 视频一区视频二区中文| 国产精品18久久久久久麻辣| 国产一区二区波多野结衣| 国产成人综合在线观看| 久久偷看各类wc女厕嘘嘘偷窃 | 久久久999精品免费| 国产精品白嫩白嫩大学美女| 99精品视频免费观看视频| 国产极品精品在线观看| 精品国产无码一区二区三区| 99久久国产综合精品女不卡| 亚洲自拍偷拍二区| av老司机免费在线| 欧美日韩一本到| 99久久久无码国产精品性波多 | 亚洲深夜福利在线| 超碰手机在线观看| 久久一区亚洲| 岛国视频一区免费观看| 男操女在线观看| 一区二区在线免费观看| www.欧美日本| julia中文字幕一区二区99在线| 亚洲欧美第一页| 免费一级片视频| 美女视频一区二区三区| 精品国产免费久久久久久尖叫 | 欧美精品videos| 欧美成人精品网站| 高清不卡一区二区在线| 亚洲国产精品视频一区| 国产一二三在线| 日韩色视频在线观看| 色噜噜噜噜噜噜| 国产日韩欧美一区在线 | 亚洲精品成av人片天堂无码| 国产肉丝袜一区二区| 丰满少妇大力进入| 国产aⅴ精品一区二区四区| 亚洲人成伊人成综合网久久久| 九九精品在线观看视频 | 中文字幕一区二区三区人妻在线视频| 欧美日韩精品一区二区视频| 91国产美女在线观看| aaaa一级片| 成人免费在线视频观看| 亚洲天堂网一区| 国产精品片aa在线观看| 2019中文字幕免费视频| 丰满肉嫩西川结衣av| 亚洲乱码一区二区三区在线观看| 九九九在线观看视频| 宅男在线一区| 日本视频久久久| 日韩精品视频无播放器在线看| 亚洲第一狼人社区| 影音先锋资源av| 欧美日韩日本国产亚洲在线| 91中文字幕在线| 超碰porn在线| 欧美一级日韩不卡播放免费| 老熟妇高潮一区二区三区| 久久av老司机精品网站导航| 亚洲图片欧洲图片日韩av| 欧美日韩在线精品一区二区三区激情综合| 日韩高清中文字幕| 天堂中文在线网| 久久久国产精华| 少妇激情一区二区三区| 国产影视一区| 91精品久久久久久久久久久久久 | 欧美在线观看网址综合| 午夜在线视频观看| 欧美视频在线观看 亚洲欧| 精品中文字幕在线播放| 亚洲一区二区免费看| 欧美精品亚洲| 日韩电影精品| 美女少妇精品视频| 韩国av免费在线| 欧美日韩美女视频| 成人国产精品久久久网站| 青青草原综合久久大伊人精品优势| 日本黑人久久| 韩国三级成人在线| 久久久久久久久爱| 久久手机免费观看| 欧美日韩久久久一区| 看免费黄色录像| 成人午夜电影久久影院| 亚洲 高清 成人 动漫| 欧美女优在线视频| 国产综合香蕉五月婷在线| 欧美xxxx做受欧美88bbw| 亚洲第一精品夜夜躁人人爽| 久久精品久久久久久久| 综合电影一区二区三区| 人妻av一区二区| 日韩精品91亚洲二区在线观看| eeuss中文| 欧美综合自拍| 国产在线日韩在线| 九九精品调教| 亚洲三级免费看| 国产成人精品一区二三区四区五区| 亚瑟在线精品视频| 亚洲高潮女人毛茸茸| 成人高清视频在线观看| 亚洲成人av免费看| 狠狠久久婷婷| 亚洲高清视频在线观看| 国产精品视屏| 成人写真视频福利网| 欧美13videosex性极品| 久久影视电视剧免费网站| 午夜激情小视频| 91麻豆精品国产91久久久更新时间| 在线观看精品国产| 亚洲天堂久久久久久久| 精品夜夜澡人妻无码av| 国产毛片精品视频| 麻豆一区二区三区视频| 亚洲第一伊人| 免费看污污视频| 国产日产精品_国产精品毛片| 1卡2卡3卡精品视频| jizz欧美| 琪琪亚洲精品午夜在线| 日本资源在线| 精品国模在线视频| 国产在线免费观看| 日韩大片在线观看视频| 精品女同一区二区三区| 精品视频一区二区三区免费| 天天综合网久久综合网| 亚洲高清久久久| 欧美日韩综合一区二区| 国产精品素人一区二区| 精品无码人妻一区| 99久久婷婷国产精品综合| 一本之道在线视频| 国产在线视频一区二区| 嫩草av久久伊人妇女超级a| 国产欧美日韩一级| 久久艹国产精品| 一区二区电影在线观看| 在线视频一区观看| 色婷婷亚洲mv天堂mv在影片| 欧美aaaaa喷水| 色天下一区二区三区| 国产在线精品一区二区三区| www.国产精品一区| 99re在线观看视频| 欧美激情精品| 91黄色精品| 深夜福利一区| 99中文视频在线| 天堂精品久久久久| 99国产高清| 97人人澡人人爽91综合色| 成人看片视频| 国产成人在线中文字幕| 国产a一区二区| 国产一区二区在线视频你懂的| 国产伦理久久久| 日韩大片在线免费观看| 久久福利电影| 久操成人av| 先锋在线资源一区二区三区| 欧美艳星介绍134位艳星| 性欧美大战久久久久久久免费观看 | 日本视频在线免费| 中文字幕日韩一区二区| 日本在线一级片| 尤物在线观看一区| 国产精品18p| 一本大道久久精品懂色aⅴ| 亚洲欧美偷拍一区| 欧美日韩精品一区二区天天拍小说| 怡春院在线视频| 日韩一区二区影院| 水莓100在线视频| 亚洲一区二区黄| 免费在线午夜视频| 欧美激情视频在线| 成人免费无遮挡| 国产精品尤物福利片在线观看| 91精品国产自产观看在线| 97国产超碰| 秋霞在线一区| 亚洲午夜精品福利| 伊人久久综合| 成年人在线看片| 精品一区二区三区日韩| 国产51自产区| 国产精品免费看片| 69av.com| 色婷婷综合久色| 国产乱色精品成人免费视频| 日韩一二三四区| 色呦呦中文字幕| 国产性色av一区二区| www视频在线看| 欧美亚洲成人精品| 亚洲男人在线| 麻豆91蜜桃| 综合精品久久| 欧美三级午夜理伦三级| youjizz亚洲| 成人久久视频在线观看| 国产成人精品视频免费看| 日韩av午夜在线观看| 欧美精品色视频| 91麻豆精品秘密| 亚洲av无码一区二区三区在线| 精品欧美一区二区三区| 国产精品污视频| 亚洲精品wwwww| 精产国品自在线www| 日韩女优在线播放| 91精品国产自产在线丝袜啪| 秋霞毛片久久久久久久久| 黄色在线一区| 欧美大片久久久| 国产午夜久久久久| 久草精品视频在线观看| 欧美日韩一区二区在线视频| 午夜黄色小视频| 精品自在线视频| 91国产一区| 午夜精品一区二区三区四区| 99视频一区| 日本人妻一区二区三区| 亚洲欧洲日韩av| 中文字幕一区二区久久人妻| 亚洲加勒比久久88色综合| 在线免费观看污| 国产精品一区二区女厕厕| 九九热爱视频精品视频| 加勒比成人在线| 国产成人午夜视频| 日韩成人短视频| 精品视频1区2区| 成人免费高清在线播放| 日本高清视频一区| 偷拍亚洲精品| 久久99久久久久久| 国产成人激情av| 欧美卡一卡二卡三| 91精品欧美久久久久久动漫| 国产福利视频在线| 91精品久久久久久久久久另类 | 亚洲国产欧美日韩精品| 日韩精品分区| 超碰97在线播放| 国产精品mm| 男人的天堂影院| 亚洲va欧美va人人爽| 日韩有码第一页| 2019中文字幕在线| 九一精品国产| 国产一区二区在线免费播放| 国产精品视频第一区| 在线观看一二三区| 美日韩在线视频| 涩爱av色老久久精品偷偷鲁| 国产一级不卡视频| 成年人网站91| 午夜毛片在线观看| 亚洲女人天堂av| 91在线亚洲| 日本特级黄色大片| 国产高清亚洲一区| 日本五十路女优| 精品亚洲一区二区三区在线播放| 欧美巨大丰满猛性社交| 欧美一级日本a级v片| 日本va欧美va欧美va精品| 成人精品一二三区| 日韩一级高清毛片| 草草视频在线| 日韩.欧美.亚洲| 韩国午夜理伦三级不卡影院| 日韩免费一二三区| 亚洲美女av在线| 日本中文字幕视频一区| 久久久久久久久影视| 99视频国产精品| 天堂网一区二区| 欧美超级免费视 在线| 欧美一级全黄| 中日韩av在线播放| 亚洲综合免费观看高清完整版在线| 天堂在线中文网| 国产精品夜间视频香蕉| 欧美99在线视频观看| 无码人妻aⅴ一区二区三区| 欧美日韩在线一区二区| 日本三级在线观看网站| 日本精品二区| 豆国产96在线|亚洲| 久久久久久久亚洲| 欧美激情a在线| 精品国产精品国产偷麻豆| 午夜免费视频网站| 色婷婷综合中文久久一本| 色呦呦在线资源| 日韩av不卡播放| av一区二区三区黑人| 在线观看国产精品入口男同| 久久久久亚洲精品成人网小说| 妖精一区二区三区精品视频 | 99久久er热在这里只有精品15| 国产精品免费无遮挡无码永久视频| 欧美大胆a视频| 成人同人动漫免费观看| 国产黑丝在线观看| 在线不卡欧美精品一区二区三区|