日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

标签传播算法(Label Propagation)及Python实现

發布時間:2024/9/5 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标签传播算法(Label Propagation)及Python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?眾所周知,機器學習可以大體分為三大類:監督學習、非監督學習和半監督學習。監督學習可以認為是我們有非常多的labeled標注數據來train一個模型,期待這個模型能學習到數據的分布,以期對未來沒有見到的樣本做預測。那這個性能的源頭--訓練數據,就顯得非常感覺。你必須有足夠的訓練數據,以覆蓋真正現實數據中的樣本分布才可以,這樣學習到的模型才有意義。那非監督學習就是沒有任何的labeled數據,就是平時所說的聚類了,利用他們本身的數據分布,給他們劃分類別。而半監督學習,顧名思義就是處于兩者之間的,只有少量的labeled數據,我們試圖從這少量的labeled數據和大量的unlabeled數據中學習到有用的信息。

一、半監督學習

? ? ? ?半監督學習(Semi-supervised learning)發揮作用的場合是:你的數據有一些有label,一些沒有。而且一般是絕大部分都沒有,只有少許幾個有label。半監督學習算法會充分的利用unlabeled數據來捕捉我們整個數據的潛在分布。它基于三大假設:

? ? ? ?1)Smoothness平滑假設:相似的數據具有相同的label。

? ? ? ?2)Cluster聚類假設:處于同一個聚類下的數據具有相同label。

? ? ? ?3)Manifold流形假設:處于同一流形結構下的數據具有相同label。

? ? ? ?例如下圖,只有兩個labeled數據,如果直接用他們來訓練一個分類器,例如LR或者SVM,那么學出來的分類面就是左圖那樣的。如果現實中,這個數據是右圖那邊分布的話,豬都看得出來,左圖訓練的這個分類器爛的一塌糊涂、慘不忍睹。因為我們的labeled訓練數據太少了,都沒辦法覆蓋我們未來可能遇到的情況。但是,如果右圖那樣,把大量的unlabeled數據(黑色的)都考慮進來,有個全局觀念,牛逼的算法會發現,哎喲,原來是兩個圈圈(分別處于兩個圓形的流形之上)!那算法就很聰明,把大圈的數據都歸類為紅色類別,把內圈的數據都歸類為藍色類別。因為,實踐中,labeled數據是昂貴,很難獲得的,但unlabeled數據就不是了,寫個腳本在網上爬就可以了,因此如果能充分利用大量的unlabeled數據來輔助提升我們的模型學習,這個價值就非常大。

?

? ? ?半監督學習算法有很多,下面我們介紹最簡單的標簽傳播算法(label propagation),最喜歡簡單了,哈哈。

二、標簽傳播算法

? ? ? ?標簽傳播算法(label propagation)的核心思想非常簡單:相似的數據應該具有相同的label。LP算法包括兩大步驟:1)構造相似矩陣;2)勇敢的傳播吧。

1、社區及社區發現:?
網絡圖內部連接比較緊密的節點子集合對應的子圖叫做社區(community),各社區節點集合彼此沒有交集的稱為非重疊型(disjoint)社區,有交集的稱為重疊型(overlapping)社區。對給定的網絡圖尋找其社區結構的過程稱為“社區發現”。大體上看,社區發現的過程就是一種聚類的過程。

2、基本思想?
標簽傳播算法是不重疊社區發現的經典算法,其基本思想是:將一個節點的鄰居節點的標簽中數量最多的標簽作為該節點自身的標簽。給每個節點添加標簽(label)以代表它所屬的社區,并通過標簽的“傳播”形成同一標簽的“社區”結構。

給每個節點添加標簽(label)以代表它所屬的社區,并通過標簽的“傳播”形成同一標簽的“社區”結構。一個節點的標簽取決于它鄰居節點的標簽:假設節點z的鄰居節點有z1至zk,那么哪個社區包含z的鄰居節點最多z就屬于那個社區(或者說z的鄰居中包含哪個社區的標簽最多,z就屬于哪個社區)。優點是收斂周期短,無需任何先驗參數(不需事先指定社區個數和大小),算法執行過程中不需要計算任何社區指標。

時間復雜度接近線性:對頂點分配標簽的復雜度為O(n),每次迭代時間為O( m),找出所有社區的復雜度為O (n +m),但迭代次數難以估計

3、傳播過程:?
1)初始時,給每個節點一個唯一的標簽;?
2)每個節點使用其鄰居節點的標簽中最多的標簽來更新自身的標簽。?
3)反復執行步驟2),直到每個節點的標簽都不再發生變化為止。?
一次迭代過程中一個節點標簽的更新可以分為同步和異步兩種。所謂同步更新,即節點z在第t次迭代的label依據于它的鄰居節點在第t-1次迭代時所得的label;異步更新,即節點z在第t次迭代的label依據于第t次迭代已經更新過label的節點和第t次迭代未更新過label的節點在第t-1次迭代時的label。

注:?
1、迭代次數設定一個閾值,可以防止過度運算;?
2、對于二分圖等網絡結構,同步更新會引起震蕩;?
//3、類似(“強”社區>)定義的結構(該社區>=);?
4、每個頂點在初始的時候賦予唯一的標簽,即“重要性”相同,而迭代過程又采用隨機序列,會導致同一初始狀態不同結果甚至巨型社區的出現;?
5、如果能預測“社區中心”點,能有效提高社區發現的準確度,大幅提高效率;?
6、同一節點的鄰居節點的標簽可能存在多種社區最大數目相同的情況,取“隨機”一個作為其標簽

4、算法改進思路:初始化或傳播改進?
1)給節點或邊添加權重(勢函數、模塊密度優化、LeaderRank值、局部拓撲信息的相似度、標簽從屬系數等),信息熵等描述節點的傳播優先度,進而初步確定社區中心點以提高社區劃分的精度;?
2)標簽初始化改進,如提取一些較為緊密的子結構來作為標簽傳播的初始標簽(非重疊最小極大團提取算法 orz。。。)或通過初始社區劃分算法先確定社區的雛形再進行傳播。?
3)標簽隨機選擇改進,將1)中的權值和節點鄰接點的度數等作為參考因素,對標簽更新過程進行修正。

1)在社區中尋找不重疊三角形作為起始簇的雛形,以提高算法結果的穩定性和運行效率;?
2)添加標簽熵屬性,在迭代過程中不采用隨機序列,而是根據每個節點的標簽熵來排序序列;?
3)在2)的基礎上,為了不完全消除標簽傳播算法的隨機性,將排序好的隊列平均分成三個部分,在每個部分內,節點進行隨機排列。?
4)對于同一節點的鄰居節點的標簽可能存在多種社區最大數目相同的情況,不使用隨機方法,而是分析該節點的鄰節點的鄰節點集標簽分布情況來決定該節點的標簽?
5)在社區中尋找以度最大的若干節點為中心的“雪花型”結構作為起始簇的雛形?
在實現的過程中,將上述方案進行組合衍生出更多的可行方案,初步試驗結果表明算法的隨機性與穩定性很難同時保證,設定起始簇的結構收斂速度快但有可能生成巨型社區;在節點較少的情況下,標簽熵的方法準確率和穩定性最好;至于組合方案初步的試驗驗證發現效果反而下降了。

5、評價標準:社區發現的主要評價指標有Jaccard指數,fsame指數、NMI(規范化交互信息)以及Modularity(模塊度)等,常用的訓練集是一些真實基準網絡,如:karate(空手道俱樂部,34個節點,78條邊的無向圖)、Football(美國大學橄欖球聯盟、115個節點無向圖)等?
Modularity(模塊度):網絡中連接社區內部邊所占的比例與另一網絡中的內部邊的期望值之間的差值?

2.1、相似矩陣構建

? ? ? ?LP算法是基于Graph的,因此我們需要先構建一個圖。我們為所有的數據構建一個圖,圖的節點就是一個數據點,包含labeled和unlabeled的數據。節點i和節點j的邊表示他們的相似度。這個圖的構建方法有很多,這里我們假設這個圖是全連接的,節點i和節點j的邊權重為:

? ? ? ?這里,α是超參。

? ? ? ?還有個非常常用的圖構建方法是knn圖,也就是只保留每個節點的k近鄰權重,其他的為0,也就是不存在邊,因此是稀疏的相似矩陣。

2.2、LP算法

? ? ? ?標簽傳播算法非常簡單:通過節點之間的邊傳播label。邊的權重越大,表示兩個節點越相似,那么label越容易傳播過去。我們定義一個NxN的概率轉移矩陣P:

? ? ? ?Pij表示從節點i轉移到節點j的概率。假設有C個類和L個labeled樣本,我們定義一個LxC的label矩陣YL,第i行表示第i個樣本的標簽指示向量,即如果第i個樣本的類別是j,那么該行的第j個元素為1,其他為0。同樣,我們也給U個unlabeled樣本一個UxC的label矩陣YU。把他們合并,我們得到一個NxC的soft label矩陣F=[YL;YU]。soft label的意思是,我們保留樣本i屬于每個類別的概率,而不是互斥性的,這個樣本以概率1只屬于一個類。當然了,最后確定這個樣本i的類別的時候,是取max也就是概率最大的那個類作為它的類別的。那F里面有個YU,它一開始是不知道的,那最開始的值是多少?無所謂,隨便設置一個值就可以了。

? ? ? ?千呼萬喚始出來,簡單的LP算法如下:

? ? ? ?1)執行傳播:F=PF

? ? ? ?2)重置F中labeled樣本的標簽:FL=YL

? ? ? ?3)重復步驟1)和2)直到F收斂。

? ? ? ?步驟1)就是將矩陣P和矩陣F相乘,這一步,每個節點都將自己的label以P確定的概率傳播給其他節點。如果兩個節點越相似(在歐式空間中距離越近),那么對方的label就越容易被自己的label賦予,就是更容易拉幫結派。步驟2)非常關鍵,因為labeled數據的label是事先確定的,它不能被帶跑,所以每次傳播完,它都得回歸它本來的label。隨著labeled數據不斷的將自己的label傳播出去,最后的類邊界會穿越高密度區域,而停留在低密度的間隔中。相當于每個不同類別的labeled樣本劃分了勢力范圍。

2.3、變身的LP算法

? ? ? ?我們知道,我們每次迭代都是計算一個soft label矩陣F=[YL;YU],但是YL是已知的,計算它沒有什么用,在步驟2)的時候,還得把它弄回來。我們關心的只是YU,那我們能不能只計算YU呢?Yes。我們將矩陣P做以下劃分:

? ? ? ?這時候,我們的算法就一個運算:

? ? ? ?迭代上面這個步驟直到收斂就ok了,是不是很cool。可以看到FU不但取決于labeled數據的標簽及其轉移概率,還取決了unlabeled數據的當前label和轉移概率。因此LP算法能額外運用unlabeled數據的分布特點。

? ? ? ?這個算法的收斂性也非常容易證明,具體見參考文獻[1]。實際上,它是可以收斂到一個凸解的:

? ? ? ?所以我們也可以直接這樣求解,以獲得最終的YU。但是在實際的應用過程中,由于矩陣求逆需要O(n3)的復雜度,所以如果unlabeled數據非常多,那么I – PUU矩陣的求逆將會非常耗時,因此這時候一般選擇迭代算法來實現。

三、LP算法的Python實現

? ? ? ?Python環境的搭建就不啰嗦了,可以參考前面的博客。需要額外依賴的庫是經典的numpy和matplotlib。代碼中包含了兩種圖的構建方法:RBF和KNN指定。同時,自己生成了兩個toy數據庫:兩條長形形狀和兩個圈圈的數據。第四部分我們用大點的數據庫來做實驗,先簡單的可視化驗證代碼的正確性,再前線。

? ? ? ?算法代碼:

?

[python]?view plain?copy
  • #***************************************************************************??
  • #*???
  • #*?Description:?label?propagation??
  • #*?Author:?Zou?Xiaoyi?(zouxy09@qq.com)??
  • #*?Date:???2015-10-15??
  • #*?HomePage:?http://blog.csdn.net/zouxy09??
  • #*???
  • #**************************************************************************??
  • ??
  • import?time??
  • import?numpy?as?np??
  • ??
  • #?return?k?neighbors?index??
  • def?navie_knn(dataSet,?query,?k):??
  • ????numSamples?=?dataSet.shape[0]??
  • ??
  • ????##?step?1:?calculate?Euclidean?distance??
  • ????diff?=?np.tile(query,?(numSamples,?1))?-?dataSet??
  • ????squaredDiff?=?diff?**?2??
  • ????squaredDist?=?np.sum(squaredDiff,?axis?=?1)?#?sum?is?performed?by?row??
  • ??
  • ????##?step?2:?sort?the?distance??
  • ????sortedDistIndices?=?np.argsort(squaredDist)??
  • ????if?k?>?len(sortedDistIndices):??
  • ????????k?=?len(sortedDistIndices)??
  • ??
  • ????return?sortedDistIndices[0:k]??
  • ??
  • ??
  • #?build?a?big?graph?(normalized?weight?matrix)??
  • def?buildGraph(MatX,?kernel_type,?rbf_sigma?=?None,?knn_num_neighbors?=?None):??
  • ????num_samples?=?MatX.shape[0]??
  • ????affinity_matrix?=?np.zeros((num_samples,?num_samples),?np.float32)??
  • ????if?kernel_type?==?'rbf':??
  • ????????if?rbf_sigma?==?None:??
  • ????????????raise?ValueError('You?should?input?a?sigma?of?rbf?kernel!')??
  • ????????for?i?in?xrange(num_samples):??
  • ????????????row_sum?=?0.0??
  • ????????????for?j?in?xrange(num_samples):??
  • ????????????????diff?=?MatX[i,?:]?-?MatX[j,?:]??
  • ????????????????affinity_matrix[i][j]?=?np.exp(sum(diff**2)?/?(-2.0?*?rbf_sigma**2))??
  • ????????????????row_sum?+=?affinity_matrix[i][j]??
  • ????????????affinity_matrix[i][:]?/=?row_sum??
  • ????elif?kernel_type?==?'knn':??
  • ????????if?knn_num_neighbors?==?None:??
  • ????????????raise?ValueError('You?should?input?a?k?of?knn?kernel!')??
  • ????????for?i?in?xrange(num_samples):??
  • ????????????k_neighbors?=?navie_knn(MatX,?MatX[i,?:],?knn_num_neighbors)??
  • ????????????affinity_matrix[i][k_neighbors]?=?1.0?/?knn_num_neighbors??
  • ????else:??
  • ????????raise?NameError('Not?support?kernel?type!?You?can?use?knn?or?rbf!')??
  • ??????
  • ????return?affinity_matrix??
  • ??
  • ??
  • #?label?propagation??
  • def?labelPropagation(Mat_Label,?Mat_Unlabel,?labels,?kernel_type?=?'rbf',?rbf_sigma?=?1.5,?\??
  • ????????????????????knn_num_neighbors?=?10,?max_iter?=?500,?tol?=?1e-3):??
  • ????#?initialize??
  • ????num_label_samples?=?Mat_Label.shape[0]??
  • ????num_unlabel_samples?=?Mat_Unlabel.shape[0]??
  • ????num_samples?=?num_label_samples?+?num_unlabel_samples??
  • ????labels_list?=?np.unique(labels)??
  • ????num_classes?=?len(labels_list)??
  • ??????
  • ????MatX?=?np.vstack((Mat_Label,?Mat_Unlabel))??
  • ????clamp_data_label?=?np.zeros((num_label_samples,?num_classes),?np.float32)??
  • ????for?i?in?xrange(num_label_samples):??
  • ????????clamp_data_label[i][labels[i]]?=?1.0??
  • ??????
  • ????label_function?=?np.zeros((num_samples,?num_classes),?np.float32)??
  • ????label_function[0?:?num_label_samples]?=?clamp_data_label??
  • ????label_function[num_label_samples?:?num_samples]?=?-1??
  • ??????
  • ????#?graph?construction??
  • ????affinity_matrix?=?buildGraph(MatX,?kernel_type,?rbf_sigma,?knn_num_neighbors)??
  • ??????
  • ????#?start?to?propagation??
  • ????iter?=?0;?pre_label_function?=?np.zeros((num_samples,?num_classes),?np.float32)??
  • ????changed?=?np.abs(pre_label_function?-?label_function).sum()??
  • ????while?iter?<?max_iter?and?changed?>?tol:??
  • ????????if?iter?%?1?==?0:??
  • ????????????print?"--->?Iteration?%d/%d,?changed:?%f"?%?(iter,?max_iter,?changed)??
  • ????????pre_label_function?=?label_function??
  • ????????iter?+=?1??
  • ??????????
  • ????????#?propagation??
  • ????????label_function?=?np.dot(affinity_matrix,?label_function)??
  • ??????????
  • ????????#?clamp??
  • ????????label_function[0?:?num_label_samples]?=?clamp_data_label??
  • ??????????
  • ????????#?check?converge??
  • ????????changed?=?np.abs(pre_label_function?-?label_function).sum()??
  • ??????
  • ????#?get?terminate?label?of?unlabeled?data??
  • ????unlabel_data_labels?=?np.zeros(num_unlabel_samples)??
  • ????for?i?in?xrange(num_unlabel_samples):??
  • ????????unlabel_data_labels[i]?=?np.argmax(label_function[i+num_label_samples])??
  • ??????
  • ????return?unlabel_data_labels??
  • ?

    ? ? ? ?測試代碼:

    ?

    [python]?view plain?copy
  • #***************************************************************************??
  • #*???
  • #*?Description:?label?propagation??
  • #*?Author:?Zou?Xiaoyi?(zouxy09@qq.com)??
  • #*?Date:???2015-10-15??
  • #*?HomePage:?http://blog.csdn.net/zouxy09??
  • #*???
  • #**************************************************************************??
  • ??
  • import?time??
  • import?math??
  • import?numpy?as?np??
  • from?label_propagation?import?labelPropagation??
  • ??
  • #?show??
  • def?show(Mat_Label,?labels,?Mat_Unlabel,?unlabel_data_labels):???
  • ????import?matplotlib.pyplot?as?plt???
  • ??????
  • ????for?i?in?range(Mat_Label.shape[0]):??
  • ????????if?int(labels[i])?==?0:????
  • ????????????plt.plot(Mat_Label[i,?0],?Mat_Label[i,?1],?'Dr')????
  • ????????elif?int(labels[i])?==?1:????
  • ????????????plt.plot(Mat_Label[i,?0],?Mat_Label[i,?1],?'Db')??
  • ????????else:??
  • ????????????plt.plot(Mat_Label[i,?0],?Mat_Label[i,?1],?'Dy')??
  • ??????
  • ????for?i?in?range(Mat_Unlabel.shape[0]):??
  • ????????if?int(unlabel_data_labels[i])?==?0:????
  • ????????????plt.plot(Mat_Unlabel[i,?0],?Mat_Unlabel[i,?1],?'or')????
  • ????????elif?int(unlabel_data_labels[i])?==?1:????
  • ????????????plt.plot(Mat_Unlabel[i,?0],?Mat_Unlabel[i,?1],?'ob')??
  • ????????else:??
  • ????????????plt.plot(Mat_Unlabel[i,?0],?Mat_Unlabel[i,?1],?'oy')??
  • ??????
  • ????plt.xlabel('X1');?plt.ylabel('X2')???
  • ????plt.xlim(0.0,?12.)??
  • ????plt.ylim(0.0,?12.)??
  • ????plt.show()????
  • ??
  • ??
  • def?loadCircleData(num_data):??
  • ????center?=?np.array([5.0,?5.0])??
  • ????radiu_inner?=?2??
  • ????radiu_outer?=?4??
  • ????num_inner?=?num_data?/?3??
  • ????num_outer?=?num_data?-?num_inner??
  • ??????
  • ????data?=?[]??
  • ????theta?=?0.0??
  • ????for?i?in?range(num_inner):??
  • ????????pho?=?(theta?%?360)?*?math.pi?/?180??
  • ????????tmp?=?np.zeros(2,?np.float32)??
  • ????????tmp[0]?=?radiu_inner?*?math.cos(pho)?+?np.random.rand(1)?+?center[0]??
  • ????????tmp[1]?=?radiu_inner?*?math.sin(pho)?+?np.random.rand(1)?+?center[1]??
  • ????????data.append(tmp)??
  • ????????theta?+=?2??
  • ??????
  • ????theta?=?0.0??
  • ????for?i?in?range(num_outer):??
  • ????????pho?=?(theta?%?360)?*?math.pi?/?180??
  • ????????tmp?=?np.zeros(2,?np.float32)??
  • ????????tmp[0]?=?radiu_outer?*?math.cos(pho)?+?np.random.rand(1)?+?center[0]??
  • ????????tmp[1]?=?radiu_outer?*?math.sin(pho)?+?np.random.rand(1)?+?center[1]??
  • ????????data.append(tmp)??
  • ????????theta?+=?1??
  • ??????
  • ????Mat_Label?=?np.zeros((2,?2),?np.float32)??
  • ????Mat_Label[0]?=?center?+?np.array([-radiu_inner?+?0.5,?0])??
  • ????Mat_Label[1]?=?center?+?np.array([-radiu_outer?+?0.5,?0])??
  • ????labels?=?[0,?1]??
  • ????Mat_Unlabel?=?np.vstack(data)??
  • ????return?Mat_Label,?labels,?Mat_Unlabel??
  • ??
  • ??
  • def?loadBandData(num_unlabel_samples):??
  • ????#Mat_Label?=?np.array([[5.0,?2.],?[5.0,?8.0]])??
  • ????#labels?=?[0,?1]??
  • ????#Mat_Unlabel?=?np.array([[5.1,?2.],?[5.0,?8.1]])??
  • ??????
  • ????Mat_Label?=?np.array([[5.0,?2.],?[5.0,?8.0]])??
  • ????labels?=?[0,?1]??
  • ????num_dim?=?Mat_Label.shape[1]??
  • ????Mat_Unlabel?=?np.zeros((num_unlabel_samples,?num_dim),?np.float32)??
  • ????Mat_Unlabel[:num_unlabel_samples/2,?:]?=?(np.random.rand(num_unlabel_samples/2,?num_dim)?-?0.5)?*?np.array([3,?1])?+?Mat_Label[0]??
  • ????Mat_Unlabel[num_unlabel_samples/2?:?num_unlabel_samples,?:]?=?(np.random.rand(num_unlabel_samples/2,?num_dim)?-?0.5)?*?np.array([3,?1])?+?Mat_Label[1]??
  • ????return?Mat_Label,?labels,?Mat_Unlabel??
  • ??
  • ??
  • #?main?function??
  • if?__name__?==?"__main__":??
  • ????num_unlabel_samples?=?800??
  • ????#Mat_Label,?labels,?Mat_Unlabel?=?loadBandData(num_unlabel_samples)??
  • ????Mat_Label,?labels,?Mat_Unlabel?=?loadCircleData(num_unlabel_samples)??
  • ??????
  • ????##?Notice:?when?use?'rbf'?as?our?kernel,?the?choice?of?hyper?parameter?'sigma'?is?very?import!?It?should?be??
  • ????##?chose?according?to?your?dataset,?specific?the?distance?of?two?data?points.?I?think?it?should?ensure?that??
  • ????##?each?point?has?about?10?knn?or?w_i,j?is?large?enough.?It?also?influence?the?speed?of?converge.?So,?may?be??
  • ????##?'knn'?kernel?is?better!??
  • ????#unlabel_data_labels?=?labelPropagation(Mat_Label,?Mat_Unlabel,?labels,?kernel_type?=?'rbf',?rbf_sigma?=?0.2)??
  • ????unlabel_data_labels?=?labelPropagation(Mat_Label,?Mat_Unlabel,?labels,?kernel_type?=?'knn',?knn_num_neighbors?=?10,?max_iter?=?400)??
  • ????show(Mat_Label,?labels,?Mat_Unlabel,?unlabel_data_labels)??
  • ??????
  • ?

    ? ? ? ?該注釋的,代碼都注釋的,有看不明白的,歡迎交流。不同迭代次數時候的結果如下:

    ?

    是不是很漂亮的傳播過程?!在數值上也是可以看到隨著迭代的進行逐漸收斂的,迭代的數值變化過程如下:

    ?

    [python]?view plain?copy
  • --->?Iteration?0/400,?changed:?1602.000000??
  • --->?Iteration?1/400,?changed:?6.300182??
  • --->?Iteration?2/400,?changed:?5.129996??
  • --->?Iteration?3/400,?changed:?4.301994??
  • --->?Iteration?4/400,?changed:?3.819295??
  • --->?Iteration?5/400,?changed:?3.501743??
  • --->?Iteration?6/400,?changed:?3.277122??
  • --->?Iteration?7/400,?changed:?3.105952??
  • --->?Iteration?8/400,?changed:?2.967030??
  • --->?Iteration?9/400,?changed:?2.848606??
  • --->?Iteration?10/400,?changed:?2.743997??
  • --->?Iteration?11/400,?changed:?2.649270??
  • --->?Iteration?12/400,?changed:?2.562057??
  • --->?Iteration?13/400,?changed:?2.480885??
  • --->?Iteration?14/400,?changed:?2.404774??
  • --->?Iteration?15/400,?changed:?2.333075??
  • --->?Iteration?16/400,?changed:?2.265301??
  • --->?Iteration?17/400,?changed:?2.201107??
  • --->?Iteration?18/400,?changed:?2.140209??
  • --->?Iteration?19/400,?changed:?2.082354??
  • --->?Iteration?20/400,?changed:?2.027376??
  • --->?Iteration?21/400,?changed:?1.975071??
  • --->?Iteration?22/400,?changed:?1.925286??
  • --->?Iteration?23/400,?changed:?1.877894??
  • --->?Iteration?24/400,?changed:?1.832743??
  • --->?Iteration?25/400,?changed:?1.789721??
  • --->?Iteration?26/400,?changed:?1.748706??
  • --->?Iteration?27/400,?changed:?1.709593??
  • --->?Iteration?28/400,?changed:?1.672284??
  • --->?Iteration?29/400,?changed:?1.636668??
  • --->?Iteration?30/400,?changed:?1.602668??
  • --->?Iteration?31/400,?changed:?1.570200??
  • --->?Iteration?32/400,?changed:?1.539179??
  • --->?Iteration?33/400,?changed:?1.509530??
  • --->?Iteration?34/400,?changed:?1.481182??
  • --->?Iteration?35/400,?changed:?1.454066??
  • --->?Iteration?36/400,?changed:?1.428120??
  • --->?Iteration?37/400,?changed:?1.403283??
  • --->?Iteration?38/400,?changed:?1.379502??
  • --->?Iteration?39/400,?changed:?1.356734??
  • --->?Iteration?40/400,?changed:?1.334906??
  • --->?Iteration?41/400,?changed:?1.313983??
  • --->?Iteration?42/400,?changed:?1.293921??
  • --->?Iteration?43/400,?changed:?1.274681??
  • --->?Iteration?44/400,?changed:?1.256214??
  • --->?Iteration?45/400,?changed:?1.238491??
  • --->?Iteration?46/400,?changed:?1.221474??
  • --->?Iteration?47/400,?changed:?1.205126??
  • --->?Iteration?48/400,?changed:?1.189417??
  • --->?Iteration?49/400,?changed:?1.174316??
  • --->?Iteration?50/400,?changed:?1.159804??
  • --->?Iteration?51/400,?changed:?1.145844??
  • --->?Iteration?52/400,?changed:?1.132414??
  • --->?Iteration?53/400,?changed:?1.119490??
  • --->?Iteration?54/400,?changed:?1.107032??
  • --->?Iteration?55/400,?changed:?1.095054??
  • --->?Iteration?56/400,?changed:?1.083513??
  • --->?Iteration?57/400,?changed:?1.072397??
  • --->?Iteration?58/400,?changed:?1.061671??
  • --->?Iteration?59/400,?changed:?1.051324??
  • --->?Iteration?60/400,?changed:?1.041363??
  • --->?Iteration?61/400,?changed:?1.031742??
  • --->?Iteration?62/400,?changed:?1.022459??
  • --->?Iteration?63/400,?changed:?1.013494??
  • --->?Iteration?64/400,?changed:?1.004836??
  • --->?Iteration?65/400,?changed:?0.996484??
  • --->?Iteration?66/400,?changed:?0.988407??
  • --->?Iteration?67/400,?changed:?0.980592??
  • --->?Iteration?68/400,?changed:?0.973045??
  • --->?Iteration?69/400,?changed:?0.965744??
  • --->?Iteration?70/400,?changed:?0.958682??
  • --->?Iteration?71/400,?changed:?0.951848??
  • --->?Iteration?72/400,?changed:?0.945227??
  • --->?Iteration?73/400,?changed:?0.938820??
  • --->?Iteration?74/400,?changed:?0.932608??
  • --->?Iteration?75/400,?changed:?0.926590??
  • --->?Iteration?76/400,?changed:?0.920765??
  • --->?Iteration?77/400,?changed:?0.915107??
  • --->?Iteration?78/400,?changed:?0.909628??
  • --->?Iteration?79/400,?changed:?0.904309??
  • --->?Iteration?80/400,?changed:?0.899143??
  • --->?Iteration?81/400,?changed:?0.894122??
  • --->?Iteration?82/400,?changed:?0.889259??
  • --->?Iteration?83/400,?changed:?0.884530??
  • --->?Iteration?84/400,?changed:?0.879933??
  • --->?Iteration?85/400,?changed:?0.875464??
  • --->?Iteration?86/400,?changed:?0.871121??
  • --->?Iteration?87/400,?changed:?0.866888??
  • --->?Iteration?88/400,?changed:?0.862773??
  • --->?Iteration?89/400,?changed:?0.858783??
  • --->?Iteration?90/400,?changed:?0.854879??
  • --->?Iteration?91/400,?changed:?0.851084??
  • --->?Iteration?92/400,?changed:?0.847382??
  • --->?Iteration?93/400,?changed:?0.843779??
  • --->?Iteration?94/400,?changed:?0.840274??
  • --->?Iteration?95/400,?changed:?0.836842??
  • --->?Iteration?96/400,?changed:?0.833501??
  • --->?Iteration?97/400,?changed:?0.830240??
  • --->?Iteration?98/400,?changed:?0.827051??
  • --->?Iteration?99/400,?changed:?0.823950??
  • --->?Iteration?100/400,?changed:?0.820906??
  • --->?Iteration?101/400,?changed:?0.817946??
  • --->?Iteration?102/400,?changed:?0.815053??
  • --->?Iteration?103/400,?changed:?0.812217??
  • --->?Iteration?104/400,?changed:?0.809437??
  • --->?Iteration?105/400,?changed:?0.806724??
  • --->?Iteration?106/400,?changed:?0.804076??
  • --->?Iteration?107/400,?changed:?0.801480??
  • --->?Iteration?108/400,?changed:?0.798937??
  • --->?Iteration?109/400,?changed:?0.796448??
  • --->?Iteration?110/400,?changed:?0.794008??
  • --->?Iteration?111/400,?changed:?0.791612??
  • --->?Iteration?112/400,?changed:?0.789282??
  • --->?Iteration?113/400,?changed:?0.786984??
  • --->?Iteration?114/400,?changed:?0.784728??
  • --->?Iteration?115/400,?changed:?0.782516??
  • --->?Iteration?116/400,?changed:?0.780355??
  • --->?Iteration?117/400,?changed:?0.778216??
  • --->?Iteration?118/400,?changed:?0.776139??
  • --->?Iteration?119/400,?changed:?0.774087??
  • --->?Iteration?120/400,?changed:?0.772072??
  • --->?Iteration?121/400,?changed:?0.770085??
  • --->?Iteration?122/400,?changed:?0.768146??
  • --->?Iteration?123/400,?changed:?0.766232??
  • --->?Iteration?124/400,?changed:?0.764356??
  • --->?Iteration?125/400,?changed:?0.762504??
  • --->?Iteration?126/400,?changed:?0.760685??
  • --->?Iteration?127/400,?changed:?0.758889??
  • --->?Iteration?128/400,?changed:?0.757135??
  • --->?Iteration?129/400,?changed:?0.755406??
  • ?

    四、LP算法MPI并行實現

    ? ? ? ?這里,我們測試的是LP的變身版本。從公式,我們可以看到,第二項PULYL迭代過程并沒有發生變化,所以這部分實際上從迭代開始就可以計算好,從而避免重復計算。不過,不管怎樣,LP算法都要計算一個UxU的矩陣PUU和一個UxC矩陣FU的乘積。當我們的unlabeled數據非常多,而且類別也很多的時候,計算是很慢的,同時占用的內存量也非常大。另外,構造Graph需要計算兩兩的相似度,也是O(n2)的復雜度,當我們數據的特征維度很大的時候,這個計算量也是非常客觀的。所以我們就得考慮并行處理了。而且最好是能放到集群上并行。那如何并行呢?

    ? ? ? ?對算法的并行化,一般分為兩種:數據并行和模型并行。

    ? ? ? ?數據并行很好理解,就是將數據劃分,每個節點只處理一部分數據,例如我們構造圖的時候,計算每個數據的k近鄰。例如我們有1000個樣本和20個CPU節點,那么就平均分發,讓每個CPU節點計算50個樣本的k近鄰,然后最后再合并大家的結果。可見這個加速比也是非常可觀的。

    ? ? ? ?模型并行一般發生在模型很大,無法放到單機的內存里面的時候。例如龐大的深度神經網絡訓練的時候,就需要把這個網絡切開,然后分別求解梯度,最后有個leader的節點來收集大家的梯度,再反饋給大家去更新。當然了,其中存在更細致和高效的工程處理方法。在我們的LP算法中,也是可以做模型并行的。假如我們的類別數C很大,把類別數切開,讓不同的CPU節點處理,實際上就相當于模型并行了。

    ? ? ? ?那為啥不切大矩陣PUU,而是切小點的矩陣FU,因為大矩陣PUU沒法獨立分塊,并行的一個原則是處理必須是獨立的。 矩陣FU依賴的是所有的U,而把PUU切開分發到其他節點的時候,每次FU的更新都需要和其他的節點通信,這個通信的代價是很大的(實際上,很多并行系統沒法達到線性的加速度的瓶頸是通信!線性加速比是,我增加了n臺機器,速度就提升了n倍)。但是對類別C也就是矩陣FU切分,就不會有這個問題,因為他們的計算是獨立的。只是決定樣本的最終類別的時候,將所有的FU收集回來求max就可以了。

    ? ? ? ?所以,在下面的代碼中,是同時包含了數據并行和模型并行的雛形的。另外,還值得一提的是,我們是迭代算法,那決定什么時候迭代算法停止?除了判斷收斂外,我們還可以讓每迭代幾步,就用測試label測試一次結果,看模型的整體訓練性能如何。特別是判斷訓練是否過擬合的時候非常有效。因此,代碼中包含了這部分內容。

    ? ? ? ?好了,代碼終于來了。大家可以搞點大數據庫來測試,如果有MPI集群條件的話就更好了。

    ?

    ? ? ? ?下面的代碼依賴numpy、scipy(用其稀疏矩陣加速計算)和mpi4py。其中mpi4py需要依賴openmpi和Cpython,可以參考我之前的博客進行安裝。

    ?

    [python]?view plain?copy
  • #***************************************************************************??
  • #*???
  • #*?Description:?label?propagation??
  • #*?Author:?Zou?Xiaoyi?(zouxy09@qq.com)??
  • #*?Date:???2015-10-15??
  • #*?HomePage:?http://blog.csdn.net/zouxy09??
  • #*???
  • #**************************************************************************??
  • ??
  • import?os,?sys,?time??
  • import?numpy?as?np??
  • from?scipy.sparse?import?csr_matrix,?lil_matrix,?eye??
  • import?operator??
  • import?cPickle?as?pickle??
  • import?mpi4py.MPI?as?MPI??
  • ??
  • #??
  • #???Global?variables?for?MPI??
  • #??
  • ??
  • #?instance?for?invoking?MPI?related?functions??
  • comm?=?MPI.COMM_WORLD??
  • #?the?node?rank?in?the?whole?community??
  • comm_rank?=?comm.Get_rank()??
  • #?the?size?of?the?whole?community,?i.e.,?the?total?number?of?working?nodes?in?the?MPI?cluster??
  • comm_size?=?comm.Get_size()??
  • ??
  • #?load?mnist?dataset??
  • def?load_MNIST():??
  • ????import?gzip??
  • ????f?=?gzip.open("mnist.pkl.gz",?"rb")??
  • ????train,?val,?test?=?pickle.load(f)??
  • ????f.close()??
  • ??????
  • ????Mat_Label?=?train[0]??
  • ????labels?=?train[1]??
  • ????Mat_Unlabel?=?test[0]??
  • ????groundtruth?=?test[1]??
  • ????labels_id?=?[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]??
  • ??
  • ????return?Mat_Label,?labels,?labels_id,?Mat_Unlabel,?groundtruth??
  • ??
  • #?return?k?neighbors?index??
  • def?navie_knn(dataSet,?query,?k):??
  • ????numSamples?=?dataSet.shape[0]??
  • ??
  • ????##?step?1:?calculate?Euclidean?distance??
  • ????diff?=?np.tile(query,?(numSamples,?1))?-?dataSet??
  • ????squaredDiff?=?diff?**?2??
  • ????squaredDist?=?np.sum(squaredDiff,?axis?=?1)?#?sum?is?performed?by?row??
  • ??
  • ????##?step?2:?sort?the?distance??
  • ????sortedDistIndices?=?np.argsort(squaredDist)??
  • ????if?k?>?len(sortedDistIndices):??
  • ????????k?=?len(sortedDistIndices)??
  • ????return?sortedDistIndices[0:k]??
  • ??
  • ??
  • #?build?a?big?graph?(normalized?weight?matrix)??
  • #?sparse?U?x?(U?+?L)?matrix??
  • def?buildSubGraph(Mat_Label,?Mat_Unlabel,?knn_num_neighbors):??
  • ????num_unlabel_samples?=?Mat_Unlabel.shape[0]??
  • ????data?=?[];?indices?=?[];?indptr?=?[0]??
  • ????Mat_all?=?np.vstack((Mat_Label,?Mat_Unlabel))??
  • ????values?=?np.ones(knn_num_neighbors,?np.float32)?/?knn_num_neighbors??
  • ????for?i?in?xrange(num_unlabel_samples):??
  • ????????k_neighbors?=?navie_knn(Mat_all,?Mat_Unlabel[i,?:],?knn_num_neighbors)??
  • ????????indptr.append(np.int32(indptr[-1])?+?knn_num_neighbors)??
  • ????????indices.extend(k_neighbors)??
  • ????????data.append(values)???
  • ????return?csr_matrix((np.hstack(data),?indices,?indptr))??
  • ??
  • ??
  • #?build?a?big?graph?(normalized?weight?matrix)??
  • #?sparse?U?x?(U?+?L)?matrix??
  • def?buildSubGraph_MPI(Mat_Label,?Mat_Unlabel,?knn_num_neighbors):??
  • ????num_unlabel_samples?=?Mat_Unlabel.shape[0]??
  • ????local_data?=?[];?local_indices?=?[];?local_indptr?=?[0]??
  • ????Mat_all?=?np.vstack((Mat_Label,?Mat_Unlabel))??
  • ????values?=?np.ones(knn_num_neighbors,?np.float32)?/?knn_num_neighbors??
  • ????sample_offset?=?np.linspace(0,?num_unlabel_samples,?comm_size?+?1).astype('int')??
  • ????for?i?in?range(sample_offset[comm_rank],?sample_offset[comm_rank+1]):??
  • ????????k_neighbors?=?navie_knn(Mat_all,?Mat_Unlabel[i,?:],?knn_num_neighbors)??
  • ????????local_indptr.append(np.int32(local_indptr[-1])?+?knn_num_neighbors)??
  • ????????local_indices.extend(k_neighbors)??
  • ????????local_data.append(values)??
  • ????data?=?np.hstack(comm.allgather(local_data))??
  • ????indices?=?np.hstack(comm.allgather(local_indices))??
  • ????indptr_tmp?=?comm.allgather(local_indptr)??
  • ????indptr?=?[]??
  • ????for?i?in?range(len(indptr_tmp)):??
  • ????????if?i?==?0:??
  • ????????????indptr.extend(indptr_tmp[i])??
  • ????????else:??
  • ????????????last_indptr?=?indptr[-1]??
  • ????????????del(indptr[-1])??
  • ????????????indptr.extend(indptr_tmp[i]?+?last_indptr)??
  • ????return?csr_matrix((np.hstack(data),?indices,?indptr),?dtype?=?np.float32)??
  • ??
  • ??
  • #?label?propagation??
  • def?run_label_propagation_sparse(knn_num_neighbors?=?20,?max_iter?=?100,?tol?=?1e-4,?test_per_iter?=?1):??
  • ????#?load?data?and?graph??
  • ????print?"Processor?%d/%d?loading?graph?file..."?%?(comm_rank,?comm_size)??
  • ????#Mat_Label,?labels,?Mat_Unlabel,?groundtruth?=?loadFourBandData()??
  • ????Mat_Label,?labels,?labels_id,?Mat_Unlabel,?unlabel_data_id?=?load_MNIST()??
  • ????if?comm_size?>?len(labels_id):??
  • ????????raise?ValueError("Sorry,?the?processors?must?be?less?than?the?number?of?classes")??
  • ????#affinity_matrix?=?buildSubGraph(Mat_Label,?Mat_Unlabel,?knn_num_neighbors)??
  • ????affinity_matrix?=?buildSubGraph_MPI(Mat_Label,?Mat_Unlabel,?knn_num_neighbors)??
  • ??????
  • ????#?get?some?parameters??
  • ????num_classes?=?len(labels_id)??
  • ????num_label_samples?=?len(labels)??
  • ????num_unlabel_samples?=?Mat_Unlabel.shape[0]??
  • ??
  • ????affinity_matrix_UL?=?affinity_matrix[:,?0:num_label_samples]??
  • ????affinity_matrix_UU?=?affinity_matrix[:,?num_label_samples:num_label_samples+num_unlabel_samples]??
  • ??
  • ????if?comm_rank?==?0:??
  • ????????print?"Have?%d?labeled?images,?%d?unlabeled?images?and?%d?classes"?%?(num_label_samples,?num_unlabel_samples,?num_classes)??
  • ??????
  • ????#?divide?label_function_U?and?label_function_L?to?all?processors??
  • ????class_offset?=?np.linspace(0,?num_classes,?comm_size?+?1).astype('int')??
  • ??????
  • ????#?initialize?local?label_function_U??
  • ????local_start_class?=?class_offset[comm_rank]??
  • ????local_num_classes?=?class_offset[comm_rank+1]?-?local_start_class??
  • ????local_label_function_U?=?eye(num_unlabel_samples,?local_num_classes,?0,?np.float32,?format='csr')??
  • ??????
  • ????#?initialize?local?label_function_L??
  • ????local_label_function_L?=?lil_matrix((num_label_samples,?local_num_classes),?dtype?=?np.float32)??
  • ????for?i?in?xrange(num_label_samples):??
  • ????????class_off?=?int(labels[i])?-?local_start_class??
  • ????????if?class_off?>=?0?and?class_off?<?local_num_classes:??
  • ????????????local_label_function_L[i,?class_off]?=?1.0??
  • ????local_label_function_L?=?local_label_function_L.tocsr()??
  • ????local_label_info?=?affinity_matrix_UL.dot(local_label_function_L)??
  • ????print?"Processor?%d/%d?has?to?process?%d?classes..."?%?(comm_rank,?comm_size,?local_label_function_L.shape[1])??
  • ??????
  • ????#?start?to?propagation??
  • ????iter?=?1;?changed?=?100.0;??
  • ????evaluation(num_unlabel_samples,?local_start_class,?local_label_function_U,?unlabel_data_id,?labels_id)??
  • ????while?True:??
  • ????????pre_label_function?=?local_label_function_U.copy()??
  • ??????????
  • ????????#?propagation??
  • ????????local_label_function_U?=?affinity_matrix_UU.dot(local_label_function_U)?+?local_label_info??
  • ??????????
  • ????????#?check?converge??
  • ????????local_changed?=?abs(pre_label_function?-?local_label_function_U).sum()??
  • ????????changed?=?comm.reduce(local_changed,?root?=?0,?op?=?MPI.SUM)??
  • ????????status?=?'RUN'??
  • ????????test?=?False??
  • ????????if?comm_rank?==?0:??
  • ????????????if?iter?%?1?==?0:??
  • ????????????????norm_changed?=?changed?/?(num_unlabel_samples?*?num_classes)??
  • ????????????????print?"--->?Iteration?%d/%d,?changed:?%f"?%?(iter,?max_iter,?norm_changed)??
  • ????????????if?iter?>=?max_iter?or?changed?<?tol:??
  • ????????????????status?=?'STOP'??
  • ????????????????print?"**************?Iteration?over!?****************"??
  • ????????????if?iter?%?test_per_iter?==?0:??
  • ????????????????test?=?True??
  • ????????????iter?+=?1??
  • ????????test?=?comm.bcast(test?if?comm_rank?==?0?else?None,?root?=?0)??
  • ????????status?=?comm.bcast(status?if?comm_rank?==?0?else?None,?root?=?0)??
  • ????????if?status?==?'STOP':??
  • ????????????break??
  • ????????if?test?==?True:??
  • ????????????evaluation(num_unlabel_samples,?local_start_class,?local_label_function_U,?unlabel_data_id,?labels_id)??
  • ????evaluation(num_unlabel_samples,?local_start_class,?local_label_function_U,?unlabel_data_id,?labels_id)??
  • ??
  • ??
  • def?evaluation(num_unlabel_samples,?local_start_class,?local_label_function_U,?unlabel_data_id,?labels_id):??
  • ????#?get?local?label?with?max?score??
  • ????if?comm_rank?==?0:??
  • ????????print?"Start?to?combine?local?result..."??
  • ????local_max_score?=?np.zeros((num_unlabel_samples,?1),?np.float32)???
  • ????local_max_label?=?np.zeros((num_unlabel_samples,?1),?np.int32)??
  • ????for?i?in?xrange(num_unlabel_samples):??
  • ????????local_max_label[i,?0]?=?np.argmax(local_label_function_U.getrow(i).todense())??
  • ????????local_max_score[i,?0]?=?local_label_function_U[i,?local_max_label[i,?0]]??
  • ????????local_max_label[i,?0]?+=?local_start_class??
  • ??????????
  • ????#?gather?the?results?from?all?the?processors??
  • ????if?comm_rank?==?0:??
  • ????????print?"Start?to?gather?results?from?all?processors"??
  • ????all_max_label?=?np.hstack(comm.allgather(local_max_label))??
  • ????all_max_score?=?np.hstack(comm.allgather(local_max_score))??
  • ??????
  • ????#?get?terminate?label?of?unlabeled?data??
  • ????if?comm_rank?==?0:??
  • ????????print?"Start?to?analysis?the?results..."??
  • ????????right_predict_count?=?0??
  • ????????for?i?in?xrange(num_unlabel_samples):??
  • ????????????if?i?%?1000?==?0:??
  • ????????????????print?"***",?all_max_score[i]??
  • ????????????max_idx?=?np.argmax(all_max_score[i])??
  • ????????????max_label?=?all_max_label[i,?max_idx]??
  • ????????????if?int(unlabel_data_id[i])?==?int(labels_id[max_label]):??
  • ????????????????right_predict_count?+=?1??
  • ????????accuracy?=?float(right_predict_count)?*?100.0?/?num_unlabel_samples??
  • ????????print?"Have?%d?samples,?accuracy:?%.3f%%!"?%?(num_unlabel_samples,?accuracy)??
  • ??
  • ??
  • if?__name__?==?'__main__':??
  • ????run_label_propagation_sparse(knn_num_neighbors?=?20,?max_iter?=?30) ?
  • 五、參考資料

    [1]Semi-SupervisedLearning with Graphs.pdf

    ?

    轉載于:https://www.cnblogs.com/yuluoxingkong/p/7910105.html

    總結

    以上是生活随笔為你收集整理的标签传播算法(Label Propagation)及Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    蜜桃av人人夜夜澡人人爽 | 国产精品激情偷乱一区二区∴ | 亚洲精品综合一区二区 | 久草视频免费在线播放 | 精品国产福利在线 | 国产不卡片| 日韩视频一区二区在线观看 | 国产亚州精品视频 | 国产一区二区三区 在线 | 免费看短 | 欧美日韩aa | 视频1区2区 | 96av在线| 国产精品麻豆欧美日韩ww | 久久精品婷婷 | 少妇性aaaaaaaaa视频 | 欧美 日韩 性 | 欧美色图狠狠干 | 婷婷电影网| 亚洲天堂毛片 | 国产亚洲91 | 日韩av在线小说 | 特级毛片在线免费观看 | 免费三级网 | 欧美日韩二三区 | 激情综合网五月 | 超碰av在线播放 | 美女黄频视频大全 | 成年人在线免费视频观看 | 国产精品久久久久久久久久久久冷 | 中文字幕乱在线伦视频中文字幕乱码在线 | 麻豆94tv免费版 | 欧美激情视频在线免费观看 | a亚洲视频| 久久撸在线视频 | 国产色a在线观看 | 成人在线免费小视频 | 久久伊人八月婷婷综合激情 | 奇人奇案qvod | 亚洲 欧洲av | 国产精品自产拍在线观看中文 | 激情伊人五月天久久综合 | 91精品国产一区二区三区 | 久久免费视频4 | 中文字幕免费国产精品 | 免费福利片2019潦草影视午夜 | 四虎免费av| 亚洲成人在线免费 | 国产a级免费 | 91免费版在线 | 在线观看国产区 | 久久精品99国产国产精 | 日日操日日干 | 亚洲一区二区观看 | 96久久久| 91传媒在线 | 久草香蕉在线 | 国产免费嫩草影院 | 久久久久国产免费免费 | 精品久久久久一区二区国产 | 久久永久免费 | 一级理论片在线观看 | 日韩中文字幕一区 | 久久中文精品视频 | 日韩高清免费电影 | 亚洲毛片一区二区三区 | 成人高清在线 | 色天天天 | 91精品国产高清 | 91精品国产麻豆国产自产影视 | 在线免费观看视频一区二区三区 | 波多野结衣视频一区 | 在线观看亚洲a | 欧美精品国产综合久久 | 国产精品美女久久久久久久 | 久久国产热视频 | 中文字幕av专区 | 黄a在线 | 911国产| 久草精品视频在线观看 | 国产99精品在线观看 | 麻豆传媒在线免费看 | 97超碰人人干 | 国产视频在 | 91亚洲综合 | 天天操天天插 | 96久久欧美麻豆网站 | 黄色av网站在线观看免费 | av网站手机在线观看 | 久久特级毛片 | 国产探花 | 成人免费视频播放 | 亚洲免费av电影 | 久久国产精品久久国产精品 | 日韩在线观看一区 | 久久久国产99久久国产一 | 日韩欧美成人网 | 国产精品久久久久久久久久白浆 | 国产国产人免费人成免费视频 | 五月天亚洲综合 | 精品久久久久久亚洲综合网站 | 一区二区视频在线免费观看 | 婷婷丁香花五月天 | 欧美调教网站 | 中文字幕a在线 | 日韩在线观看视频在线 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 日韩免费在线播放 | 午夜精品久久久99热福利 | 精品国自产在线观看 | 九色porny真实丨国产18 | 国产精品成人免费 | 午夜av剧场 | 中文字幕在线播放第一页 | 日日爱999| 中国一区二区视频 | 日韩理论片| 91精品亚洲影视在线观看 | 天天色天天草天天射 | 黄色视屏免费在线观看 | av午夜电影| 国产第一页在线播放 | 婷婷综合成人 | 久久久一本精品99久久精品 | 国产v视频 | 国产成人亚洲精品自产在线 | 免费亚洲黄色 | 三级av在线免费观看 | 亚洲 欧美日韩 国产 中文 | 国产午夜激情视频 | 色视频网址 | 午夜电影久久久 | 91九色pron| 国产在线探花 | 二区视频在线观看 | 国产精品 欧美 日韩 | 久久久久免费精品国产小说色大师 | 97国产精品一区二区 | 成人app在线免费观看 | 久久久一本精品99久久精品66 | 久久精品一二区 | 日韩在线观看网址 | h视频日本 | 一本一本久久a久久 | 99精品福利视频 | 91亚洲网| 婷婷色综合网 | 国产资源在线视频 | 国产高清中文字幕 | 国产在线日韩 | 欧美日韩裸体免费视频 | 久久久久久久久久久高潮一区二区 | 亚洲作爱视频 | 91探花国产综合在线精品 | 久久免费精彩视频 | 国产亚洲人| 日韩电影黄色 | 91免费高清在线观看 | 久久久久久久久爱 | 国产成人一区二区三区在线观看 | 五月婷婷操 | 日韩三级精品 | 日韩欧美电影在线 | 精品欧美一区二区三区久久久 | 免费看三级黄色片 | 免费a网址| 99视频偷窥在线精品国自产拍 | 97视频免费在线观看 | 91免费看黄 | 欧美日韩国产在线观看 | 久久综合影视 | 日韩精品一区在线观看 | 婷婷色在线资源 | 亚洲精品videossex少妇 | 97精品国自产拍在线观看 | 四虎亚洲精品 | 黄色一级免费电影 | 777奇米四色 | 午夜婷婷网 | 99视频| 国产成人精品免费在线观看 | 欧美日韩a视频 | 欧美日韩网站 | 99久久www| 久久久国产精品一区二区中文 | 中文字幕在线视频网站 | 欧美性色网站 | 欧美三人交 | 97人人人人| 黄污网| 婷婷色五| 国产精品亚洲成人 | 亚州精品在线视频 | 国产成人免费在线观看 | 成人av资源网 | 91麻豆免费看 | 亚洲精品午夜久久久久久久 | 国产精品久久久久高潮 | 国产成人精品av在线 | 国产免费黄视频在线观看 | 91av在线免费视频 | av在线看片 | 成人在线观看资源 | 国产精品一区二区久久精品 | 亚洲视频六区 | 天天爽天天爽夜夜爽 | 综合久久综合久久 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 中文字幕av日韩 | 在线观看的a站 | 日韩视频中文 | 99精品视频中文字幕 | 看av免费| 久草综合在线观看 | 一区二区三区中文字幕在线 | 白丝av免费观看 | 国产精品成人自产拍在线观看 | 久草在线高清视频 | 中文字幕乱码日本亚洲一区二区 | 精品亚洲国产视频 | 中文字幕在线观看第三页 | 欧美怡红院视频 | 国产偷国产偷亚洲清高 | 日韩三级视频 | 国产视频高清 | 日韩在线免费看 | 久草视频在线免费播放 | 99久久久国产精品 | 国产午夜精品一区二区三区四区 | 中文字幕一区二区三区在线视频 | 亚洲国产精品资源 | 国产精品一区二区果冻传媒 | 久久久久伊人 | 精品亚洲国产视频 | 欧女人精69xxxxxx | 国产精品久久久久久影院 | 欧美久久久久久久久久久久久 | 久久久久久久久久免费视频 | 久久夜色精品国产欧美乱 | 色夜影院 | 久久久久久久久久久久久久免费看 | 中文字幕精品一区二区精品 | 99久久99热这里只有精品 | 波多野结衣在线视频免费观看 | 日本久久中文 | 亚洲首页| 国产精品麻豆欧美日韩ww | 五月婷婷在线观看视频 | 国产 欧美 在线 | 美女禁18| 蜜臀一区二区三区精品免费视频 | 国产成人久久精品一区二区三区 | 玖玖精品视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 中文字幕在线观看视频一区 | 色偷偷88888欧美精品久久 | 精品黄色在线观看 | 天天综合久久综合 | 日韩免费在线网站 | 国产资源免费 | 日韩二区在线观看 | 91亚洲精品久久久中文字幕 | 天天天色综合a | 91av网站在线观看 | av中文字幕日韩 | 国产午夜麻豆影院在线观看 | 少妇bbw搡bbbb搡bbbb | 久草在线观 | av中文字幕剧情 | 日韩av影视在线观看 | 日免费视频 | 久久久久久久久久电影 | 亚洲国产操 | 免费网站黄 | 亚洲视频综合在线 | 日韩欧美在线国产 | av免费线看| 五月激情婷婷丁香 | 粉嫩av一区二区三区免费 | 91精品对白一区国产伦 | 一区二区免费不卡在线 | 黄色大片免费网站 | 天天综合色网 | www夜夜操| 日本中文在线播放 | 99热这里有 | 亚洲乱亚洲乱妇 | 一区二区三区精品在线 | 99精品视频在线播放免费 | 久久免费视频8 | 亚洲免费国产视频 | 成人午夜黄色 | 综合色中文 | 欧美色图一区 | 日韩av一区二区三区在线观看 | 日韩在线视频一区 | 2019精品手机国产品在线 | 国产一级片在线播放 | 色婷婷视频在线 | 久久久久久久久免费 | 免费视频久久久久久久 | 激情视频在线高清看 | 91成人免费 | 天天亚洲综合 | 麻花豆传媒一二三产区 | a在线观看免费视频 | av免费看在线 | 久久久久国产精品免费网站 | 久操视频在线 | 最新日韩电影 | 免费国产在线观看 | 日本久久久亚洲精品 | 97在线观看免费高清 | 成片视频免费观看 | 日韩欧美在线一区二区 | 国产精品免费观看国产网曝瓜 | 最新亚洲视频 | 一区二区三区中文字幕在线 | 麻豆视频一区 | 婷婷午夜激情 | 国产精品av久久久久久无 | 国产在线观看免费 | 日韩高清免费电影 | 激情视频91| 欧美一区二视频在线免费观看 | 国产精品一区二区免费 | 久久av中文字幕片 | 日韩理论片 | 欧美日韩视频在线观看免费 | 免费观看国产视频 | 日本动漫做毛片一区二区 | 天天鲁一鲁摸一摸爽一爽 | 粉嫩av一区二区三区四区五区 | 午夜久久久久久久久久影院 | 人人看黄色 | 成人久久国产 | 亚洲一片黄 | 国产精品99久久久精品 | 免费视频xnxx com | 亚洲电影久久久 | 正在播放 久久 | 日韩av在线一区二区 | www.综合网.com | 91九色国产在线 | 久久久91精品国产一区二区精品 | 黄色小说免费观看 | 中文字幕一区二区三区久久蜜桃 | 天天亚洲 | 久久久综合香蕉尹人综合网 | 久久99欧美 | 日韩午夜高清 | 韩日在线一区 | 在线观看日本韩国电影 | 国产视频一区在线免费观看 | 日韩电影中文字幕在线观看 | 欧美日韩国产网站 | 精品影院一区二区久久久 | 欧美电影在线观看 | 欧美日韩国产一区二区三区 | 久久大片 | 成年人看片网站 | 91女神的呻吟细腰翘臀美女 | 天天操天天添天天吹 | 亚洲成av人影院 | 在线免费视频a | 全黄网站| 欧美调教网站 | 日韩激情视频在线观看 | 一级性视频 | 天天综合日日夜夜 | 黄色影院在线播放 | 国产一区欧美日韩 | 丁香av | 国产精品一区二区三区在线播放 | 黄色亚洲片 | 国产精品久久久一区二区三区网站 | 国产91精品一区二区麻豆亚洲 | av日韩国产 | 97视频免费在线看 | 成人免费一级片 | 亚洲最大av在线播放 | 四虎国产永久在线精品 | 天天拍天天爽 | 天天干天天操天天入 | 久久综合五月 | 特级西西444www大精品视频免费看 | 91精品国产三级a在线观看 | 亚洲精品国产麻豆 | 岛国一区在线 | av中文字幕av | 男女视频国产 | 日本女人在线观看 | 色999视频 | 久久国产三级 | 国产xx视频 | 中文资源在线播放 | www.久久久.com| 欧美日韩在线观看一区 | 日韩精品一区在线播放 | 婷婷色六月天 | 免费高清在线一区 | 国产在线观看免费 | 日韩电影中文字幕在线观看 | 亚洲国产电影在线观看 | 97视频在线观看播放 | 国产91全国探花系列在线播放 | 黄色三级视频片 | 97在线观看免费高清完整版在线观看 | 欧洲精品久久久久毛片完整版 | 最近更新中文字幕 | 亚洲天堂网站视频 | 国产高清专区 | 日韩免费一级a毛片在线播放一级 | 高清不卡毛片 | 国产美女精品视频 | 亚洲精品综合欧美二区变态 | 久久激情精品 | 亚洲天堂在线观看完整版 | 五月婷av | 久久久成人精品 | 韩国一区二区在线观看 | www黄色com| 中文字幕乱码电影 | 操操色 | 啪啪av在线| 国产精品免费在线播放 | 天天操人人要 | 欧美激情在线网站 | 亚洲日日日 | 亚洲精品国产精品乱码在线观看 | 久久精品www人人爽人人 | 欧美激情视频免费看 | 欧美精品三级在线观看 | 韩国在线一区 | 手机在线永久免费观看av片 | 国产xxxx | 亚洲国产日韩精品 | 日韩在线观看第一页 | 亚洲精品xx | 亚洲蜜桃在线 | 日韩中字在线 | 天天操天天干天天玩 | 波多野结衣视频一区二区 | 国产精品亚洲片在线播放 | 成人a视频| 三级av片| 国产资源在线视频 | www.在线看片.com | 久久久穴 | 亚洲视频在线视频 | 精品一区二区三区久久 | 亚洲 中文 在线 精品 | 日韩欧美高清在线 | 婷婷中文字幕综合 | 国产美女精品 | 国产91在线看 | 国产精品麻豆果冻传媒在线播放 | 亚洲一区二区三区毛片 | 久久精品一二三 | 97超碰免费 | 精品亚洲午夜久久久久91 | 综合色狠狠| 天天操夜夜操夜夜操 | 深爱激情婷婷网 | 国产精品久久久久影院 | 日韩大片在线 | 日本中文字幕在线视频 | 波多野结衣电影一区二区三区 | 99在线高清视频在线播放 | 一区三区视频在线观看 | 天天玩天天干 | 在线中文字幕观看 | 国内丰满少妇猛烈精品播 | 香蕉视频在线播放 | 日韩视 | 成人手机在线视频 | 精品99999 | www.天天综合 | 亚洲国产三级在线 | 精品美女国产在线 | 精品v亚洲v欧美v高清v | 国产精品免费久久久久影院仙踪林 | 亚洲午夜精品在线观看 | 天天爱天天插 | 国产在线观看av | 久久精品中文字幕一区二区三区 | 色在线免费 | 免费人成在线观看 | 午夜视频不卡 | 国产精品毛片一区视频播不卡 | 国产99久久久国产 | 成人cosplay福利网站 | 成人国产精品免费观看 | 精品99在线观看 | 国产精品久久久久久高潮 | 久草在线免费新视频 | 狠狠操欧美 | 日韩字幕在线观看 | 99久久这里有精品 | 欧美激情第一页xxx 午夜性福利 | 日韩中文在线电影 | 久久九九影视网 | 国产一区国产二区在线观看 | 久久精品中文 | 91麻豆免费版 | 欧美日韩在线播放一区 | 亚洲综合色视频在线观看 | 国产一区在线免费 | 超碰在线人人 | 天天操天天草 | 亚洲欧美日韩在线一区二区 | 久久少妇av| 成人免费一级片 | 成人黄色电影免费观看 | 久久久婷 | 色999在线 | 色999在线 | 久久专区| 精品久久久久亚洲 | 一级黄色片在线观看 | 97精品国产91久久久久久久 | 中文字幕在线观看完整版电影 | 在线视频欧美亚洲 | 国产精品一区欧美 | 久久免费视频在线观看6 | 日韩精品视频一二三 | 涩涩网站在线 | 国产亚洲精品久久 | 国产黄色免费在线观看 | 狠狠干五月天 | 日本高清久久久 | 99精品久久久久久久 | 精品亚洲va在线va天堂资源站 | 国产成人精品免费在线观看 | 国产精品手机在线播放 | av在线h | 成人97视频一区二区 | 国产精品18毛片一区二区 | 日韩特级片 | 欧美成人h版在线观看 | 天天操天天射天天爽 | 国产精品岛国久久久久久久久红粉 | 午夜123 | 久久精品视频观看 | 91插插插网站 | 91超国产 | 国产精品成人国产乱 | 国产一区高清在线 | 欧美日韩性 | 超碰在线人 | 中文av日韩 | 免费久久99精品国产婷婷六月 | 成人三级视频 | 欧美激情一区不卡 | 91毛片在线观看 | 五月婷婷在线视频观看 | 成人97视频一区二区 | 亚洲精品字幕在线观看 | 亚洲精品一区二区三区高潮 | 夜夜视频资源 | 国产成人一区二 | 91在线看黄 | 日韩精品一区二区三区不卡 | 国产成人精品综合 | 亚洲狠狠婷婷 | 狠狠狠狠狠狠 | 九色精品免费永久在线 | 岛国av在线免费 | av日韩精品 | 国产精品毛片 | 国产91国语对白在线 | 91av在线免费播放 | 亚洲va在线va天堂 | 亚洲精品免费在线观看视频 | 成人久久毛片 | 色婷婷色 | 久久精品com| 日韩免费b | 在线观看国产麻豆 | 91免费的视频在线播放 | 97超碰资源总站 | 免费观看一级特黄欧美大片 | 免费精品久久久 | 99精品视频在线观看免费 | 色综合中文字幕 | 国产精品欧美久久久久三级 | 精品一区二区免费视频 | 日韩精品一区在线播放 | 日韩黄色在线观看 | 免费观看av | 天天色天天综合网 | 超碰免费观看 | 久久综合久久久 | 成人免费视频在线观看 | 亚洲国产欧洲综合997久久, | 在线看欧美 | 精品少妇一区二区三区在线 | 亚洲久在线 | 日韩一区二区免费视频 | 国产精品久久久久久久久久妇女 | 国产精品大片免费观看 | 国产精品免费在线播放 | 亚洲国产影院 | 国产精品久久久网站 | 久久爱资源网 | 人人要人人澡人人爽人人dvd | 日韩一级片网址 | 久热爱 | 国产专区日韩专区 | 中文字幕久久精品一区 | 欧美激情综合五月色丁香 | 日日夜日日干 | 国产亚洲欧美在线视频 | 久久免费99精品久久久久久 | 国产精品一区二区你懂的 | 国产午夜一区二区 | 一区二区 不卡 | 天天操天天色天天射 | 亚洲va欧洲va国产va不卡 | 69国产成人综合久久精品欧美 | av超碰在线 | 99久久久国产精品免费观看 | 精品一二三四五区 | 免费观看成年人视频 | 日本69hd | 美女网站黄在线观看 | 亚洲国产成人av网 | 国产香蕉97碰碰久久人人 | wwwwww国产| av在线播放中文字幕 | 免费在线国产精品 | 在线观看国产区 | 欧美粗又大 | 麻豆一区在线观看 | 日韩精品视频第一页 | 国产亚洲高清视频 | av天天干 | 在线观看mv的中文字幕网站 | 在线观看不卡的av | 亚洲精品乱码久久久久久蜜桃欧美 | 亚洲精品三级 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 日韩免费在线视频 | 久久成人一区二区 | 精品久久久久久亚洲综合网 | 日韩精品一区二区三区免费观看 | 日韩二区三区在线 | 免费高清影视 | 亚洲国产成人在线观看 | 网址你懂的在线观看 | 色婷婷av一区 | 在线播放精品一区二区三区 | 日本三级在线观看中文字 | 麻豆国产精品永久免费视频 | 亚洲激情小视频 | 欧美激情第八页 | 91视频在线播放视频 | 欧美大片在线观看一区 | 国产亚洲在线视频 | 青草草在线 | 久久精品一二区 | 婷婷丁香在线视频 | 亚洲欧美精品一区 | a天堂最新版中文在线地址 久久99久久精品国产 | 一区二区不卡视频在线观看 | av片无限看| 国产精品theporn | 日韩一三区| 超碰在线亚洲 | 蜜臀av夜夜澡人人爽人人桃色 | 国产精品免费在线视频 | 日韩免费小视频 | 亚洲精品综合一区二区 | 中文字幕a∨在线乱码免费看 | 成人黄色大片在线观看 | 国产精品久久久久毛片大屁完整版 | 亚洲精品久久久久中文字幕二区 | 伊人天天狠天天添日日拍 | 日韩免费看视频 | 日韩超碰 | 福利网址在线观看 | 久久久视屏| 亚洲情感电影大片 | 麻豆久久久久久久 | 国产原创中文在线 | 成人在线观看免费视频 | 国产精品综合久久久 | 日韩成人不卡 | 欧美不卡视频在线 | 右手影院亚洲欧美 | 一区二区欧美激情 | 蜜臀av夜夜澡人人爽人人桃色 | 久草免费福利在线观看 | 国产高清中文字幕 | 在线观看免费福利 | 黄色三级免费 | 国产精品视频观看 | 国产精品第7页 | 亚洲精品在线视频播放 | 在线精品亚洲一区二区 | 夜夜高潮夜夜爽国产伦精品 | 亚洲视频资源在线 | 成人av在线电影 | www操操| www.69xx| 91精品在线免费观看 | 久久国产精品久久国产精品 | 色插综合| 亚洲影视九九影院在线观看 | 最近2019中文免费高清视频观看www99 | 国产一区二区三区免费视频 | 黄色软件在线观看视频 | 色综合亚洲精品激情狠狠 | 91精品入口 | 亚洲激情国产精品 | av免费在线网 | 日韩乱理| 五月天网站在线 | www.伊人色.com | 日韩在线国产 | av在线永久免费观看 | 精品成人免费 | 亚洲免费观看在线视频 | 色资源网在线观看 | 91香蕉视频污在线 | 91视频免费看网站 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 日韩理论片在线观看 | 久久免费精彩视频 | 波多野结衣久久精品 | 亚洲精品中文在线 | 日韩电影中文 | 国产一区二区不卡在线 | 午夜精品久久久久久久久久 | 99久久这里有精品 | 成人 国产 在线 | 深夜福利视频在线观看 | 美女精品在线观看 | 99r国产精品| 精品国产一区二 | 日韩精品一区二区在线 | 亚洲男人天堂a | 国产一级片在线播放 | 韩国av永久免费 | 国产伦理一区二区 | 九九爱免费视频 | 狠狠的日 | 亚洲另类久久 | av免费电影在线 | 亚洲一区网站 | 超碰国产人人 | 成人黄大片视频在线观看 | 国产91精品看黄网站 | 欧美一级久久 | 天天色官网 | 午夜国产福利视频 | 久久久久国产成人精品亚洲午夜 | 天天综合网天天 | 欧美极品一区二区三区 | 国产在线一区观看 | av色一区| 91成人蝌蚪 | 69av视频在线观看 | av在线免费播放网站 | 久草视频中文 | 国产99久久久国产精品 | 在线高清一区 | 免费视频一区二区 | 不卡的av在线播放 | 国产手机视频 | 日韩精品一区二区三区电影 | 国产欧美三级 | 成人免费视频网站在线观看 | 天天做天天爱天天爽综合网 | 日韩免费一级a毛片在线播放一级 | 在线免费观看黄色 | 国产在线视频导航 | www.久久91| 日韩影片在线观看 | 91理论片午午伦夜理片久久 | 日韩在线视频在线观看 | 精品久久久久国产免费第一页 | 2019中文字幕第一页 | av免费看看| 欧美日韩亚洲第一页 | 999国内精品永久免费视频 | 色99导航 | 性色av免费观看 | 久久精品久久久精品美女 | 黄色a大片| 欧美性成人| 四虎在线永久免费观看 | 国产中文字幕一区二区三区 | 亚洲黄色免费网站 | 综合激情av| 日韩剧情| 亚洲第一香蕉视频 | 激情五月色播五月 | 亚洲va综合va国产va中文 | 国产精品美女免费视频 | 欧美一级片在线播放 | 毛片黄色一级 | 久久国产日韩 | 91精品久久久久久久久久久久久 | 最新国产中文字幕 | 精品久久久免费视频 | 91热这里只有精品 | 欧美影片| a亚洲视频 | www.激情五月.com | 激情视频免费在线观看 | 久久99热这里只有精品国产 | 日韩欧美网址 | 天天操狠狠操 | 久久精品久久综合 | 美女黄网站视频免费 | 中文字幕免费不卡视频 | 国产一卡久久电影永久 | 欧美激情精品久久久 | 天天色天天操天天爽 | 最近中文字幕mv免费高清在线 | 最近中文字幕免费大全 | 在线观看你懂的网站 | 成人影音在线 | 在线观看国产高清视频 | 亚洲九九九在线观看 | 久久不卡日韩美女 | 亚洲日本黄色 | 日韩一三区 | 在线精品视频免费播放 | 亚洲在线观看av | 久久综合久色欧美综合狠狠 | 精品国产一区二区三区在线 | 国产精品乱码久久久久 | 在线中文字幕播放 | 色香蕉视频 | 国产系列 在线观看 | 成人黄色在线视频 | 国产91全国探花系列在线播放 | 亚a在线 | 欧美日本不卡 | 欧美永久视频 | 国产视频首页 | 久久视频6| 国内精品久久久久久久久 | 国产高清视频在线免费观看 | 亚洲精品视频网址 | 天天干天天操天天射 | 天天爽天天搞 | 国产婷婷精品 | .国产精品成人自产拍在线观看6 | 中文字幕亚洲高清 | 久久在线免费观看 | 国产成人av一区二区三区在线观看 | 91九色精品国产 | 国产91在线免费视频 | 午夜精品区 | 中文字幕免费久久 | 能在线看的av | 久热这里有精品 | 亚洲更新最快 | 国产99久久九九精品 | 国产老妇av | 国产精品欧美日韩在线观看 | 91日韩免费 | 欧美日韩国产xxx | 国产一级片免费观看 | 天天操夜 | 精品久久五月天 | 午夜电影 电影 | 成人毛片一区二区三区 | 日韩在线视频一区二区三区 | 另类老妇性bbwbbw高清 | 最新中文字幕视频 | 亚洲一区在线看 | 国产午夜三级一区二区三桃花影视 | 亚洲欧洲精品一区二区精品久久久 | 狠狠狠色 | 这里有精品在线视频 | 久久精品中文字幕一区二区三区 | 欧美色图另类 | 日日操日日操 | 国产手机在线观看 | 99久久日韩精品免费热麻豆美女 | 久久国色夜色精品国产 | 午夜视频黄 | 久久久久久久久久久久久久免费看 | 国产综合视频在线观看 | 一区二区三区在线观看免费 | 久精品一区 | 玖草在线观看 | 欧美视频99 | 日韩不卡高清 | 999视频在线播放 | 一区二区三区免费网站 | 国产一区二区免费在线观看 | 黄色视屏在线免费观看 | 91丨九色丨首页 | 波多野结衣视频一区 | 国产原创91 | 国产精品久久影院 | 国产免费观看视频 | 99 国产精品| 精品国产三级 | 久久这里只有精品视频99 | 黄色小说免费观看 | 久久精品视频播放 | 欧美精品国产综合久久 | 中文av不卡 | 九九视频免费在线观看 | 亚洲综合丁香 | 成年人电影免费看 | 精品国产1区2区3区 国产欧美精品在线观看 | 日韩在线观看中文字幕 | 欧美男同视频网站 | 久久精品老司机 | 中文字幕在线观看一区 | 国产精品18久久久久久久久久久久 | 国产色视频网站 | 日本中文字幕网址 | 国产黑丝袜在线 | 青青射 | 午夜电影中文字幕 | 国产高清中文字幕 | 久草精品视频在线播放 | 婷婷狠狠操 | 中文字幕一区二区三区在线播放 | 欧美乱大交 | aaa日本高清在线播放免费观看 | 在线免费成人 | 国产色综合天天综合网 | 国产一区二区三区免费观看视频 | 在线观看成人av | 国产视频久久久久 | 精品亚洲国产视频 | 一区二区三区高清 | 黄色成人在线 | 欧美日韩在线播放一区 | 三级免费黄| 亚洲精品久 | 欧美一性一交一乱 | 一区二区三区免费在线播放 | 麻豆精品传媒视频 | 欧美一级淫片videoshd | 91免费在线 | 丁香九月婷婷 | 手机色在线 | 欧美一级特黄高清视频 | 91在线看网站 | 91免费版在线观看 | 97精品一区二区三区 | 少妇搡bbbb搡bbb搡69 | 免费的成人av| 午夜久久| 色激情五月 | 欧美一区三区四区 | 欧美伦理电影一区二区 | 黄色免费网站大全 | www久久99 | 久久乐九色婷婷综合色狠狠182 | 成人影视免费看 | 亚洲va欧美va国产va黑人 | 色婷婷久久久 | 精品综合久久 | 99热最新地址 | 操操爽| 看污网站 | 91av观看 | 国产一区二区在线免费播放 | 91看片麻豆 | 中文在线中文资源 | 免费视频网 | 久久婷亚洲五月一区天天躁 | 九九视频精品免费 | 久久人视频| 奇米影视8888在线观看大全免费 | 九九精品久久 | 精品久久久久久国产91 | 最近在线中文字幕 | 免费又黄又爽的视频 | 一二区精品 | 99精品国产免费久久久久久下载 | 中文字幕精品一区久久久久 | 激情五月婷婷网 | 丁香六月在线 | 日韩激情小视频 | 一级黄毛片 | 国色天香永久免费 | 性色va | 欧洲一区精品 | 亚洲第一区在线观看 | 国产精品久免费的黄网站 | 国产一二三区av | 91日韩在线| 日韩av黄 | 色婷婷综合成人av | 精品中文字幕在线 | 国产午夜免费视频 |