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

預(yù)測電影偏好?如何利用自編碼器實現(xiàn)協(xié)同過濾方法

開發(fā) 開發(fā)工具 深度學(xué)習(xí)
深度自編碼器(Deep Autoencoder)由兩個對稱的深度信念網(wǎng)絡(luò)組成,它相比常見的自編碼器加入了更多隱藏層。在本文中,作者將嘗試使用該工具進(jìn)行協(xié)同過濾,幫助人們研究和預(yù)測大量用戶對于不同電影的喜好。

推薦系統(tǒng)使用協(xié)同過濾的方法,通過收集用戶的偏好信息來預(yù)測特定用戶的興趣。協(xié)同過濾技術(shù)的基本假設(shè)是,如果用戶 A 對某個問題與人 B 有相同的口味或意見,那么 A 就更有可能在其他問題上擁有與 B 的相同的意見。

本文將介紹如何根據(jù)用戶的偏好、觀看歷史、相同評級和其他電影的其他用戶的評價預(yù)測用戶對電影的評分。

[[229848]]

一、介紹

自動編碼器是一種深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)架構(gòu),可實現(xiàn)協(xié)同過濾領(lǐng)域最佳的性能。文章的第一部是理論概述,將會介紹簡單的自動編碼器及深度自編碼器的基礎(chǔ)數(shù)學(xué)概念。在第二部分中,我們將深入實際展示如何在 TensorFlow 中逐步應(yīng)用這一技術(shù)。本文僅覆蓋和評價模型中最重要的部分。

整個模型的輸入渠道和預(yù)處理可以在相應(yīng)的 GitHub 中查看:

https://github.com/artem-oppermann/Deep-Autoencoders-For-Collaborative-Filtering

二、深度自編碼器

1. 自編碼器

討論深度自編碼器之前,我們先來介紹它稍微簡單些的版本。自編碼器(Autoencoder)是一種人工神經(jīng)網(wǎng)絡(luò),用于學(xué)習(xí)一組輸入數(shù)據(jù)的表示(編碼),通常用于實現(xiàn)降維。

在結(jié)構(gòu)上,自編碼器的形式是一個前饋神經(jīng)網(wǎng)絡(luò),由輸入層、一個隱藏層和一個輸出層(圖 1)構(gòu)成。輸出層與輸入層的神經(jīng)元數(shù)量相同,因此自編碼器屬于無監(jiān)督學(xué)習(xí),這意味著它不需要標(biāo)記數(shù)據(jù)——只需要一組輸入數(shù)據(jù)即可,而不是輸入—輸出對。

典型的 AutoEncoder 架構(gòu)

圖 1. 典型的 AutoEncoder 架構(gòu)

自編碼器的隱藏層比輸入層小,這使得模型可以通過學(xué)習(xí)數(shù)據(jù)中的相關(guān)性在隱藏層中創(chuàng)建數(shù)據(jù)的壓縮表示。

輸入層到隱藏層的轉(zhuǎn)換被稱為編碼步驟,從隱藏層到輸出層的轉(zhuǎn)換稱為解碼步驟。我們也可以在數(shù)學(xué)上將這些轉(zhuǎn)換定義為映射:

該映射是通過將輸入數(shù)據(jù)向量乘以權(quán)重矩陣,添加一個偏差項并將所得到的向量應(yīng)用于非線性運(yùn)算,如 sigmoid,tanh 或整流線性單元來實現(xiàn)的。

2. 自編碼器的訓(xùn)練

在訓(xùn)練期間,編碼器接收輸入數(shù)據(jù)樣本 x 并將其映射到所謂的隱藏層或隱層表示 z 上。然后解碼器將 z 映射到輸出向量 x' 上,后者是(在最好的情況下)輸入數(shù)據(jù) x 的準(zhǔn)確表示。需要注意的是,通常情況下準(zhǔn)確地重建 x 是不可能的。

具有輸出 x' 的訓(xùn)練包括應(yīng)用隨機(jī)梯度下降以最小化預(yù)定損失,例如均方誤差:

3. 深度自編碼器

簡單自動編碼器的擴(kuò)展版是 Deep Autoencoder(圖 2)。從圖 2 中可以看出,它與簡單的計數(shù)器部分唯一的區(qū)別在于隱藏層的數(shù)量。

深度自編碼器的架構(gòu)

圖 2. 深度自編碼器的架構(gòu)

額外的隱藏層使自編碼器可以從數(shù)學(xué)上學(xué)習(xí)數(shù)據(jù)中更復(fù)雜的底層模式。深度自編碼器的第一層可以學(xué)習(xí)原始輸入中的一階特征(例如圖像中的邊緣)。第二層可以學(xué)習(xí)對應(yīng)于一階特征的外觀中的圖案的二階特征(例如,根據(jù)哪些邊緣傾向于一起發(fā)生——例如以形成輪廓或角檢測器)。深度自編碼器更深層的特性往往可以學(xué)習(xí)到更高階的特性。

把所有東西放在一起:我們需要更多的層來處理更為復(fù)雜的數(shù)據(jù)——比如我們在協(xié)作過濾中使用的數(shù)據(jù)。

三、實現(xiàn)

如前文所述,你將學(xué)會預(yù)測用戶對電影的評級。就此而言,我們將使用著名的 MovieLens 數(shù)據(jù)集

(https://grouplens.org/datasets/movielens/)。MovieLensis 是一個基于網(wǎng)絡(luò)的推薦系統(tǒng)和推薦用戶觀看電影的在線社區(qū)。

更具體地說,我們將使用 ml_1m.zip 數(shù)據(jù)集,該數(shù)據(jù)集包含 6,040 個 MovieLens 用戶制作的,約 3,900 部電影的 1,000,209 個匿名評級。我們需要的導(dǎo)入文件是 ratings.dat。該文件包含 1,000,209 行,全部格式如下:user_id :: movie_id :: rating:time_stamp。

例如 ratings.dat 中的第一行:

  1. 1::595::5::978824268   

這意味著用戶 1 給了 595 號電影打了五星評分。評分時間可以被忽略,因為在這里我們不會使用它。

我們的深度學(xué)習(xí)模型需要一個特定的數(shù)據(jù)結(jié)構(gòu)來進(jìn)行訓(xùn)練和測試。這種數(shù)據(jù)結(jié)構(gòu)是一個 UxM 矩陣,其中 U 是用戶數(shù)量,M 是電影數(shù)量。每行 i∈U 是唯一的用戶 ID,每列 j∈M 是唯一的電影 ID。這種矩陣的可視化效果如圖 3 所示。

矩陣的可視化效果

此矩陣中的每個條目都是用戶給出特定電影的評分。輸入 0 意味著用戶沒有給這部電影任何評價。例如。上圖中,1 號用戶給電影 3 的評級為四星,而電影第 1 則根本沒有評級。

由于本教程將重點(diǎn)介紹深度學(xué)習(xí)模型的實現(xiàn),因此不會在這里介紹使用 User-Movie-Matrix 超出 ratings.dat 文件的步驟。對于關(guān)于這個主題的進(jìn)一步問題,你可以去我的 GitHub 頁面

(https://github.com/artem-oppermann/Deep-Autoencoders-For-Collaborative-Filtering/blob/master/data/preprocess_data.py), 查看相應(yīng)的 python 腳本。

1. 訓(xùn)練和測試數(shù)據(jù)集

在模型實現(xiàn)和訓(xùn)練之前,我們需要對數(shù)據(jù)進(jìn)行其他重新處理步驟,將數(shù)據(jù)劃分為訓(xùn)練和測試數(shù)據(jù)集。這一步驟簡單明了。到目前為止,我們有一個 User-Movie Matrix,其中每一行都是評級列表。要從列表中獲得訓(xùn)練和測試集,我們需要從每一行中取一部分評級,并將它們用于訓(xùn)練,其余子集則用于測試。

作為描述過程的一個例子,我們考慮一個僅包含 15 部電影的小得多的數(shù)據(jù)集。一個特定的用戶可能出給這樣的電影評級:

  1. Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
  2. Rating:     5 0 2 4 0 0 2 1 5  1  0  4  5  1  3 

請記住,0 表示該電影未被評級。現(xiàn)在我們將前 10 部電影中的一部分作為訓(xùn)練集并假設(shè)其余的還沒有被評分:

  1. Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
  2. Rating:     5 0 2 4 0 0 2 1 5  0  0  0  0  0  0 

因此,原始數(shù)據(jù)的最后 5 個電影等級被用作測試數(shù)據(jù),而電影 1-10 被掩蓋為未被評級:

  1. Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
  2. Rating:     0 0 0 0 0 0 0 0 0  1  0  4  5  1  3 

此處僅僅簡單演示了如何獲得不同的組合。在原始的 MovieLens 數(shù)據(jù)集中,我僅使用每個用戶的 10 個電影評級進(jìn)行測試,其余(絕大多數(shù))用于模型的訓(xùn)練。

2. TensorFlow 實現(xiàn)

(1) 模型架構(gòu)

深度自編碼器在這里作為一個類來實現(xiàn),其中包含所有必需的操作,如類內(nèi)的推理、優(yōu)化、損失、準(zhǔn)確性等。

在構(gòu)造器中,內(nèi)核初始化器設(shè)置了權(quán)重和偏差。下一步,網(wǎng)絡(luò)中的所有權(quán)重和偏差都會被初始化。權(quán)重是遵從正態(tài)分布的,平均值為 0.0,方差為 0.02,而偏差在開始時都設(shè)置為 0.0。

在這個特定的例子中,網(wǎng)絡(luò)有三個隱藏層,每層包含 128 個神經(jīng)元。輸入層(和輸出層)的大小對應(yīng)于數(shù)據(jù)集中所有當(dāng)前影片的數(shù)量。

  1. class DAE: 
  2.     ''' Implementation of Deep Autoencoder class''' 
  3.  
  4.     def __init__(self, FLAGS):     
  5.         self.FLAGS=FLAGS 
  6.         self.weight_initializer=model_helper._get_weight_initializer() 
  7.         self.bias_initializer=model_helper._get_bias_initializer() 
  8.         self.init_parameters() 
  9.  
  10.  
  11.     def init_parameters(self): 
  12.         ''' Initializing the weights and biasis of the neural network.''' 
  13.  
  14.         with tf.name_scope('weights'): 
  15.             self.W_1=tf.get_variable(name='weight_1'shape=(self.FLAGS.num_v,self.FLAGS.num_h),  
  16.                                      initializer=self.weight_initializer) 
  17.             self.W_2=tf.get_variable(name='weight_2'shape=(self.FLAGS.num_h,self.FLAGS.num_h),  
  18.                                      initializer=self.weight_initializer) 
  19.             self.W_3=tf.get_variable(name='weight_3'shape=(self.FLAGS.num_h,self.FLAGS.num_h),  
  20.                                      initializer=self.weight_initializer) 
  21.             self.W_4=tf.get_variable(name='weight_5'shape=(self.FLAGS.num_h,self.FLAGS.num_v),  
  22.                                      initializer=self.weight_initializer) 
  23.  
  24.         with tf.name_scope('biases'): 
  25.             self.b1=tf.get_variable(name='bias_1'shape=(self.FLAGS.num_h),  
  26.                                     initializer=self.bias_initializer) 
  27.             self.b2=tf.get_variable(name='bias_2'shape=(self.FLAGS.num_h),  
  28.                                     initializer=self.bias_initializer) 
  29.             self.b3=tf.get_variable(name='bias_3'shape=(self.FLAGS.num_h),  
  30.                                     initializer=self.bias_initializer) 

(2) 訓(xùn)練

給定一個輸入數(shù)據(jù)樣本 x(用戶—電影矩陣的一行),正向傳遞并計算網(wǎng)絡(luò)輸出。隱藏層使用 sigmoid 作為激活函數(shù)。請注意,最后一層沒有非線性或偏置項。

  1. def _inference(self, x): 
  2.     '''Making one forward pass. Predicting the outputs, given the inputs.''' 
  3.  
  4.     with tf.name_scope('inference'): 
  5.          a1=tf.nn.sigmoid(tf.nn.bias_add(tf.matmul(x, self.W_1),self.b1)) 
  6.          a2=tf.nn.sigmoid(tf.nn.bias_add(tf.matmul(a1, self.W_2),self.b2)) 
  7.          a3=tf.nn.sigmoid(tf.nn.bias_add(tf.matmul(a2, self.W_3),self.b3))    
  8.          a4=tf.matmul(a3, self.W_4)  
  9.     return a4 

通過網(wǎng)絡(luò)預(yù)測,我們可以計算這些預(yù)測與相應(yīng)標(biāo)簽(網(wǎng)絡(luò)輸入 x)之間的損失。為了計算損失的平均值,我們還需要知道非零標(biāo)簽的數(shù)量——也就是訓(xùn)練集中用戶的總評分?jǐn)?shù)。

  1. def _compute_loss(self, predictions, labels,num_labels): 
  2.    ''' Computing the Mean Squared Error loss between the input and output of the network. 
  3.  
  4.     @param predictions: predictions of the stacked autoencoder 
  5.     @param labels: input values of the stacked autoencoder which serve as labels at the same time 
  6.     @param num_labels: number of labels !=0 in the data set to compute the mean 
  7.  
  8.     @return mean squared error loss tf-operation 
  9.     ''' 
  10.          with tf.name_scope('loss'): 
  11.          loss_op=tf.div(tf.reduce_sum(tf.square(tf.subtract(predictions,labels))),num_labels) 
  12.          return loss_op 

網(wǎng)絡(luò)的優(yōu)化/訓(xùn)練步驟似乎有點(diǎn)棘手,讓我們一步一步討論。給定輸入 x,計算相應(yīng)的輸出。你可能已經(jīng)注意到,輸入 x 中的大部分值都是零值,因為用戶肯定沒有觀看和評估數(shù)據(jù)集中的所有 5953 部電影。因此,建議不要直接使用網(wǎng)絡(luò)的原始預(yù)測。相反,我們必須確定數(shù)據(jù)輸入 x 中零值的索引,并將與這些索引相對應(yīng)的預(yù)測向量中的值也設(shè)置為零。這種預(yù)測操縱極大地減少了網(wǎng)絡(luò)的訓(xùn)練時間,使網(wǎng)絡(luò)有機(jī)會將訓(xùn)練努力集中在用戶實際給出的評分上。

在此步驟之后,可以計算損失以及正則化損失(可選)。AdamOptimizer 會將損失函數(shù)最小化。請注意,該方法會返回一個均方根誤差(RMSE)而不是均方誤差(MSE),以測得更好的精度。

  1. def _optimizer(self, x): 
  2.         '''Optimization of the network parameter through stochastic gradient descent. 
  3.  
  4.             @param x: input values for the stacked autoencoder. 
  5.  
  6.             @return: tensorflow training operation 
  7.             @return: ROOT!! mean squared error 
  8.         ''' 
  9.  
  10.         outputs=self._inference(x) 
  11.         mask=tf.where(tf.equal(x,0.0), tf.zeros_like(x), x) # indices of zero values in the training set (no ratings) 
  12.         num_train_labels=tf.cast(tf.count_nonzero(mask),dtype=tf.float32) # number of non zero values in the training set 
  13.         bool_mask=tf.cast(mask,dtype=tf.bool) # boolean mask 
  14.         outputs=tf.where(bool_mask, outputs, tf.zeros_like(outputs)) # set the output values to zero if corresponding input values are zero 
  15.  
  16.         MSE_loss=self._compute_loss(outputs,x,num_train_labels) 
  17.  
  18.         if self.FLAGS.l2_reg==True: 
  19.             l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()]) 
  20.             MSE_lossMSE_loss = MSE_loss +  self.FLAGS.lambda_ * l2_loss 
  21.  
  22.         train_op=tf.train.AdamOptimizer(self.FLAGS.learning_rate).minimize(MSE_loss) 
  23.         RMSE_loss=tf.sqrt(MSE_loss) 
  24.  
  25.         return train_op, RMSE_loss 

(3) 測試

訓(xùn)練幾個 epoch 之后,神經(jīng)網(wǎng)絡(luò)已經(jīng)在訓(xùn)練集中看到每個用戶的所有評分以及時間了。此時該模型應(yīng)該已經(jīng)了解數(shù)據(jù)中潛在的隱藏模式以及用戶對應(yīng)的電影評級規(guī)律。給定用戶評分訓(xùn)練樣本 x,該模型預(yù)測輸出 x'。該向量由輸入值 x 的重構(gòu)(如預(yù)期)組成,但現(xiàn)在還包含輸入 x 中先前為零的值。這意味著該模型在給未評分的電影打分。這個評級對應(yīng)于用戶的偏好——模型從數(shù)據(jù)中已識別和學(xué)習(xí)到的偏好。

為了能夠測量模型的準(zhǔn)確性,我們需要訓(xùn)練和測試數(shù)據(jù)集。根據(jù)訓(xùn)練集進(jìn)行預(yù)測。類似于訓(xùn)練階段,我們只考慮對應(yīng)于測試集中非零值的索引的輸出值。

現(xiàn)在我們可以計算預(yù)測值與實際評分之間的均方根誤差損失(RMSE)。RMSE 表示預(yù)測值與觀測值之間差異的樣本標(biāo)準(zhǔn)偏差。例如,RMSE 為 0.5 意味著平均預(yù)測評分與實際評分相差 0.5 星。

  1. def _validation_loss(self, x_train, x_test): 
  2.         ''' Computing the loss during the validation time. 
  3.         @param x_train: training data samples 
  4.         @param x_test: test data samples 
  5.         @return networks predictions 
  6.         @return root mean squared error loss between the predicted and actual ratings 
  7.         ''' 
  8.         outputs=self._inference(x_train) # use training sample to make prediction 
  9.         mask=tf.where(tf.equal(x_test,0.0), tf.zeros_like(x_test), x_test) # identify the zero values in the test ste 
  10.         num_test_labels=tf.cast(tf.count_nonzero(mask),dtype=tf.float32) # count the number of non zero values 
  11.         bool_mask=tf.cast(mask,dtype=tf.bool)  
  12.         outputs=tf.where(bool_mask, outputs, tf.zeros_like(outputs)) 
  13.  
  14.         MSE_loss=self._compute_loss(outputs, x_test, num_test_labels) 
  15.         RMSE_loss=tf.sqrt(MSE_loss) 
  16.  
  17.         return outputs, RMSE_loss 

(4) 訓(xùn)練結(jié)果

最后一步包括執(zhí)行訓(xùn)練過程并檢查模型性能。在這一點(diǎn)上,我不會詳細(xì)討論構(gòu)建數(shù)據(jù)輸入管道、圖表、會話等細(xì)節(jié)。因為這些步驟通常是已知的。對此主題感興趣的讀者可以在我的 GitHub 中查看這些步驟:https://github.com/artem-oppermann/Deep-Autoencoders-For-Collaborative-Filtering/blob/master/train.py

在這里,你可以看到前 50 個迭代次數(shù)的訓(xùn)練和測試表現(xiàn)。50 次后,測試集的預(yù)測和實際評分間的偏差是 0.929 星。

  1. epoch_nr: 0, train_loss: 1.169, test_loss: 1.020 
  2. epoch_nr: 10, train_loss: 0.936, test_loss: 0.959  
  3. epoch_nr: 20, train_loss: 0.889, test_loss: 0.931  
  4. epoch_nr: 30, train_loss: 0.873, test_loss: 0.923  
  5. epoch_nr: 40, train_loss: 0.859, test_loss: 0.925  
  6. epoch_nr: 50, train_loss: 0.844, test_loss: 0.929 

原文地址:

https://towardsdatascience.com/deep-autoencoders-for-collaborative-filtering-6cf8d25bbf1d

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-03-22 10:52:13

人工智能深度學(xué)習(xí)自編碼器

2021-03-29 11:37:50

人工智能深度學(xué)習(xí)

2017-07-19 13:40:42

卷積自編碼器降噪

2017-12-26 10:48:37

深度學(xué)習(xí)原始數(shù)據(jù)

2024-10-21 16:47:56

2025-04-10 11:52:55

2016-08-18 01:36:14

協(xié)同過濾推薦電影用戶

2021-02-20 20:57:16

深度學(xué)習(xí)編程人工智能

2017-11-10 12:45:16

TensorFlowPython神經(jīng)網(wǎng)絡(luò)

2023-10-31 16:46:45

2017-04-27 18:09:26

item embedd推薦系統(tǒng)算法

2021-11-15 12:45:44

協(xié)同過濾算法架構(gòu)

2022-07-20 23:04:59

矩陣分解算法Spark

2024-06-18 08:52:50

LLM算法深度學(xué)習(xí)

2020-06-28 07:30:00

推薦算法推薦系統(tǒng)

2020-04-26 11:26:02

人臉合成編碼器數(shù)據(jù)

2022-04-02 21:46:27

深度學(xué)習(xí)編碼器圖像修復(fù)

2019-05-05 09:00:00

數(shù)據(jù)分析算法推薦系統(tǒng)

2025-09-22 09:43:04

2022-09-13 15:26:40

機(jī)器學(xué)習(xí)算法數(shù)據(jù)
點(diǎn)贊
收藏

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

丰满少妇xbxb毛片日本| 国产精品乱子乱xxxx| 在线观看日本中文字幕| 国产福利91精品一区二区| 综合色中文字幕| 国内一区二区在线视频观看| 天堂av免费在线观看| 综合久久久久| 国产午夜精品一区二区三区| 亚欧精品在线视频| 欧美成a人片在线观看久| 亚洲欧洲av色图| 久久久人人爽| 国产熟女精品视频| 日韩精品一级中文字幕精品视频免费观看 | 99免费视频观看| 羞羞污视频在线观看| 国产丝袜在线精品| 国产伦精品一区二区三区高清| 精品人妻一区二区三区潮喷在线| 欧美一区二区三区久久精品茉莉花 | 天堂中文在线观看视频| 日精品一区二区| 久久久久久成人精品| 999精品久久久| 亚洲精品亚洲人成在线观看| 欧美成人性福生活免费看| www.色偷偷.com| 欧美激情20| 亚洲一区二区在线播放相泽| 中文网丁香综合网| 成年人在线观看| 久久综合成人精品亚洲另类欧美| 国产精品国产精品| 精品人妻一区二区三区蜜桃| 美女国产一区二区三区| 国产成人短视频| 亚洲黄色激情视频| 亚洲激精日韩激精欧美精品| 欧美久久精品午夜青青大伊人 | 国产精品成人一区二区三区夜夜夜| 精品欧美一区二区精品久久| 丁香六月天婷婷| 国产成人亚洲综合色影视| 国产欧美中文字幕| 亚洲无码精品国产| 久久99精品网久久| 成人午夜在线视频一区| 国产又黄又粗又硬| 国产在线国偷精品产拍免费yy| 国产欧美精品在线| 国产精品特级毛片一区二区三区| 久久一区二区三区超碰国产精品| 欧美诱惑福利视频| 少妇高潮av久久久久久| 性欧美精品高清| 日本高清久久天堂| 羞羞色院91蜜桃| 免费在线观看精品| 91久久国产精品91久久性色| 国产情侣av在线| 国产成人亚洲综合色影视| 999精品视频一区二区三区| 亚洲乱色熟女一区二区三区| 成人激情文学综合网| 国产视频精品网| 亚洲av电影一区| 久久久蜜臀国产一区二区| 青青草成人网| 在线视频91p| 亚洲视频香蕉人妖| 欧美日韩福利在线| 天堂av在线| 欧美性xxxxxxxx| 超碰91在线播放| 美国成人xxx| 亚洲天堂久久av| 三级黄色在线观看| 亚洲经典在线看| 国产精品久久久久久av下载红粉| 中文字幕在线播出| 国产成人精品aa毛片| 精品蜜桃传媒| 精品自拍一区| 精品日韩美女的视频高清| 韩国中文字幕av| 中文字幕视频精品一区二区三区| 亚洲精品国产精品久久清纯直播 | 韩国av永久免费| 久久综合999| 欧洲xxxxx| 乱人伦视频在线| 欧美精品视频www在线观看 | 国产精品秘入口18禁麻豆免会员| 久九九久频精品短视频| 69堂成人精品免费视频| av2014天堂网| 99久久久久国产精品| 97久久精品人搡人人玩 | 欧美sm极限捆绑bd| 谁有免费的黄色网址| 中文一区一区三区免费在线观看| 国a精品视频大全| 欧美一区免费看| 国产精品羞羞答答xxdd| 欧美少妇一区| 青春草视频在线| 欧美日韩激情一区二区| 97香蕉碰碰人妻国产欧美| 色综合久久网| 日本久久久久久久| 亚洲欧美激情在线观看| 中文字幕亚洲区| 欧美二区在线视频| 一区二区三区四区精品视频| 中文字幕国产精品| 黄色大片网站在线观看| 国产激情精品久久久第一区二区| 日韩三级在线播放| 九九色在线视频| 欧美三级欧美一级| 黄色在线观看av| 狠狠综合久久| 91理论片午午论夜理片久久| 国产女主播在线写真| 精品国产乱码久久久久久婷婷| 国产精品熟女一区二区不卡| 成人精品影院| 国产激情999| 蜜桃视频在线播放| 欧美性xxxx极品高清hd直播| 老司机午夜免费福利| 中文字幕免费一区二区| 国产日本欧美一区二区三区在线| 国产美女视频一区二区三区| 亚洲r级在线视频| aaa黄色大片| 自拍偷拍欧美| 999久久久| 中文在线手机av| 欧美一区二区二区| 欧美xxxx黑人xyx性爽| 精品一区二区三区久久| 宅男一区二区三区| 日韩av黄色| 久热在线中文字幕色999舞| 一级全黄裸体免费视频| 国产精品久久久久久妇女6080| 国产区二区三区| 日本高清免费电影一区| 国产精品视频一区国模私拍| 97电影在线观看| 欧美日韩精品高清| 精品无码一区二区三区蜜臀| 激情五月婷婷综合网| 裸体裸乳免费看| 深夜福利一区| 午夜免费日韩视频| 欧洲天堂在线观看| 欧美性生活影院| 丁香六月激情综合| 国产一区二区三区免费观看| 欧美高清中文字幕| 欧美亚洲色图校园春色| 热久久免费国产视频| 国产在线观看网站| 欧美精品免费视频| 久久久美女视频| 91丨九色porny丨蝌蚪| 国产男女激情视频| 日韩在线欧美| 成人一区二区在线| 手机在线理论片| 在线视频欧美日韩精品| 国产视频手机在线观看| 亚洲h动漫在线| 欧洲av一区二区三区| 麻豆国产欧美一区二区三区| 日韩视频一二三| 久久香蕉精品香蕉| 国产精品一区二区久久久| av观看在线| 亚洲女人天堂成人av在线| 中文字幕视频免费观看| 亚洲综合色丁香婷婷六月图片| 双性尿奴穿贞c带憋尿| 石原莉奈在线亚洲二区| 三上悠亚免费在线观看| 亚洲精品一级二级三级| 91精品视频播放| 成人片免费看| 欧美成人午夜影院| 暖暖视频在线免费观看| 91精品国产一区二区三区香蕉| 日本视频免费在线| 亚洲丝袜精品丝袜在线| 久久久久成人精品无码中文字幕| 美女视频网站久久| 国产97在线 | 亚洲| 中文无码久久精品| 水蜜桃一区二区三区| 成人av婷婷| 91视频国产高清| 超碰国产一区| 久久免费观看视频| 黄色av网站在线播放| 亚洲人成电影网站色| 国产黄色片免费| 欧美三级中文字幕| 69成人免费视频| 亚洲福利电影网| 欧美爱爱免费视频| 国产欧美精品一区二区三区四区| 妖精视频一区二区| 精品一区二区三区久久| 日本a√在线观看| 国产模特精品视频久久久久| 污污污污污污www网站免费| 日韩在线不卡| 四虎永久国产精品| 国产影视精品一区二区三区| 黄色国产精品一区二区三区| 日韩视频一二区| 成人午夜高潮视频| 粉嫩91精品久久久久久久99蜜桃| 欧美在线一级va免费观看| 免费电影网站在线视频观看福利| 久久精品中文字幕电影| 国产51人人成人人人人爽色哟哟| 日韩电影中文字幕在线观看| 欧美熟妇另类久久久久久不卡| 日韩一区二区三区视频在线| 国产青青草视频| 91麻豆精品国产| 91麻豆成人精品国产| 欧美性一区二区| 波多野结衣高清视频| 狠狠躁夜夜躁人人爽天天天天97| 精品91久久久| 欧美视频专区一二在线观看| 日韩美女黄色片| 亚洲成va人在线观看| 免费在线观看黄色av| 亚洲精品网站在线观看| 超碰手机在线观看| 亚洲人成7777| 麻豆视频在线观看| 亚洲一二三四在线| 欧美国产精品一二三| 亚洲一区二区在线免费看| 麻豆changesxxx国产| 亚洲国产wwwccc36天堂| 久久精品女人毛片国产| 黄网动漫久久久| 国产三级av片| 欧洲精品一区二区| 中文天堂在线视频| 555www色欧美视频| 99热这里只有精品在线观看| 日韩精品一区二区三区在线观看 | 在线播放日韩精品| 免费网站看v片在线a| 久久久国产一区| 在线看一级片| 欧美制服第一页| 国产精品黄色片| 91精品久久久久久蜜桃| 成人精品毛片| 日韩高清国产一区在线观看| 国产精品99久久精品| 精品视频在线观看一区二区| 亚洲青涩在线| 国内自拍视频网| 国产精品自拍av| 精品无码在线视频| 中文一区二区在线观看| 欧美日韩精品亚洲精品| 欧美日韩中文字幕综合视频| 欧美 亚洲 另类 激情 另类| 日韩一区二区免费视频| 天天综合网在线观看| 色爱精品视频一区| а√天堂8资源在线| 国产精品爱久久久久久久| 久久的色偷偷| 欧美日韩精品一区| 欧美在线日韩| 国产一区二区视频免费在线观看| 国内精品久久久久影院一蜜桃| 一级黄色免费视频| 国产精品网站在线| 日韩激情在线播放| 欧美日韩成人高清| 亚洲aaaaaaa| 免费成人高清视频| 五月激情久久| 国产精品视频免费一区二区三区| 成人直播大秀| 又粗又黑又大的吊av| 九九热在线视频观看这里只有精品| 精品人妻伦一二三区久| 国产欧美中文在线| 国产在线观看99| 欧美区在线观看| 四虎影视精品成人| 欧美国产在线视频| 亚洲久草在线| 日韩高清av| 性欧美videos另类喷潮| 苍井空张开腿实干12次| 中文字幕中文字幕中文字幕亚洲无线| 国产一区二区三区影院| 欧美一二三区在线观看| 成人在线高清视频| 秋霞成人午夜鲁丝一区二区三区| 亚洲精品aⅴ| 国产大尺度在线观看| 青娱乐精品视频| 超碰97人人干| 亚洲h在线观看| 亚洲精品第五页| 久久91精品国产| 国产免费av国片精品草莓男男 | 亚洲欧美综合国产精品一区| 视频二区在线播放| 国产免费观看久久| 丰满少妇xoxoxo视频| 日韩国产一区三区| 波多野结衣乳巨码无在线观看| 91九色露脸| 中文无码久久精品| 91香蕉视频在线观看视频| 亚洲视频小说图片| av官网在线观看| 欧美成aaa人片免费看| 国产一区二区高清在线| www.-级毛片线天内射视视| 国产美女视频91| 老司机成人免费视频| 欧美美女视频在线观看| 在线观看麻豆| 成人网在线免费观看| 国产精品福利在线观看播放| 欧美特黄aaa| 亚洲欧洲韩国日本视频| 91久久国语露脸精品国产高跟| 日韩在线视频观看| av在线亚洲一区| 成人区一区二区| www.亚洲精品| 日本中文字幕第一页| 亚洲欧美日韩直播| 国产精品.xx视频.xxtv| 伊人久久大香线蕉成人综合网| 久热成人在线视频| 日本老熟俱乐部h0930| 欧美大片国产精品| 欧产日产国产精品视频| 日本欧美色综合网站免费| 蜜桃视频免费观看一区| 在线免费看av网站| 欧美xxxx老人做受| 亚洲优女在线| 亚洲日本精品一区| 国产乱码精品一区二区三| 国产精品白浆一区二小说| 精品一区二区三区三区| 本网站久久精品| 男女啪啪免费观看| 久久久美女毛片| 国产乱码精品一区二区三区精东| 欧美高清在线播放| 免费视频亚洲| 亚洲av无日韩毛片久久| 亚洲va欧美va天堂v国产综合| 男女污污视频在线观看| 亚洲a级在线观看| 国产一区二区三区久久久久久久久| 欧美另类z0zx974| 91精品国产乱码| 欧美第一视频| 中文字幕乱码免费| 2欧美一区二区三区在线观看视频| 在线观看日韩一区二区| 欧美激情精品久久久| 成人激情电影在线| 久久性爱视频网站| 欧美视频在线一区| heyzo在线欧美播放| 日本不卡在线观看| 成人综合婷婷国产精品久久蜜臀| 91久久国产综合久久91| 欧美成人免费一级人片100| 婷婷综合电影| 麻豆传媒在线看| 欧美亚洲一区二区在线观看| 黄色污污视频在线观看| 亚洲欧洲日韩综合二区| 99精品桃花视频在线观看| 国产精品视频一区二区三区,|