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

【深度學習系列】PaddlePaddle之數據預處理

人工智能 開發工具
上篇文章講了卷積神經網絡的基本知識,本來這篇文章準備繼續深入講CNN的相關知識和手寫CNN,但是有很多同學跟我發郵件或私信問我關于PaddlePaddle如何讀取數據、做數據預處理相關的內容。

上篇文章講了卷積神經網絡的基本知識,本來這篇文章準備繼續深入講CNN的相關知識和手寫CNN,但是有很多同學跟我發郵件或私信問我關于PaddlePaddle如何讀取數據、做數據預處理相關的內容。網上看的很多教程都是幾個常見的例子,數據集不需要自己準備,所以不需要關心,但是實際做項目的時候做數據預處理感覺一頭霧水,所以我就寫一篇文章匯總一下,講講如何用PaddlePaddle做數據預處理。


 

PaddlePaddle的基本數據格式

  根據官網的資料,總結出PaddlePaddle支持多種不同的數據格式,包括四種數據類型和三種序列格式:

四種數據類型:

  • dense_vector:稠密的浮點數向量。
  • sparse_binary_vector:稀疏的二值向量,即大部分值為0,但有值的地方必須為1。
  • sparse_float_vector:稀疏的向量,即大部分值為0,但有值的部分可以是任何浮點數。
  • integer:整型格式

api如下:

  • paddle.v2.data_type.dense_vector(dimseq_type=0)
    • 說明:稠密向量,輸入特征是一個稠密的浮點向量。舉個例子,手寫數字識別里的輸入圖片是28*28的像素,Paddle的神經網絡的輸入應該是一個784維的稠密向量。
    • 參數:
      • dim(int) 向量維度
      • seq_type(int)輸入的序列格式
    • 返回類型:InputType
  • paddle.v2.data_type.sparse_binary_vector(dimseq_type=0)
    • 說明:稀疏的二值向量。輸入特征是一個稀疏向量,這個向量的每個元素要么是0,要么是1
    • 參數:同上
    • 返回類型:同上
  • paddle.v2.data_type.sparse_vector(dimseq_type=0)
    • 說明:稀疏向量,向量里大多數元素是0,其他的值可以是任意的浮點值
    • 參數:同上
    • 返回類型:同上
  • paddle.v2.data_type.integer_value(value_rangeseq_type=0)
    • 說明:整型格式
    • 參數:
      • seq_type(int):輸入的序列格式
      • value_range(int):每個元素的范圍
    • 返回類型:InputType

三種序列格式:

  • SequenceType.NO_SEQUENCE:不是一條序列
  • SequenceType.SEQUENCE:是一條時間序列
  • SequenceType.SUB_SEQUENCE: 是一條時間序列,且序列的每一個元素還是一個時間序列。

api如下:

  • paddle.v2.data_type.dense_vector_sequence(dimseq_type=0)
    • 說明:稠密向量的序列格式
    • 參數:dim(int):稠密向量的維度
    • 返回類型:InputType
  • paddle.v2.data_type.sparse_binary_vector_sequence(dimseq_type=0)
    • 說明:稀疏的二值向量序列。每個序列里的元素要么是0要么是1
    • 參數:dim(int):稀疏向量的維度
    • 返回類型:InputType
  • paddle.v2.data_type.sparse_non_value_slot(dimseq_type=0)
    • 說明:稀疏的向量序列。每個序列里的元素要么是0要么是1
    • 參數:
      • dim(int):稀疏向量的維度
      • seq_type(int):輸入的序列格式
    • 返回類型:InputType
  • paddle.v2.data_type.sparse_value_slot(dimseq_type=0)
    • 說明:稀疏的向量序列,向量里大多數元素是0,其他的值可以是任意的浮點值
    • 參數:
      • dim(int):稀疏向量的維度
        • seq_type(int):輸入的序列格式
    • 返回類型:InputType
  • paddle.v2.data_type.integer_value_sequence(value_rangeseq_type=0)
    • 說明:value_range(int):每個元素的范圍

  不同的數據類型和序列模式返回的格式不同,如下表:

  其中f表示浮點數,i表示整數

 

注意:對sparse_binary_vector和sparse_float_vector,PaddlePaddle存的是有值位置的索引。例如,

  • 對一個5維非序列的稀疏01向量 [0, 1, 1, 0, 0] ,類型是sparse_binary_vector,返回的是 [1, 2] 。(因為只有第1位和第2位有值)
  • 對一個5維非序列的稀疏浮點向量 [0, 0.5, 0.7, 0, 0] ,類型是sparse_float_vector,返回的是 [(1, 0.5), (2, 0.7)] 。(因為只有第一位和第二位有值,分別是0.5和0.7)

 

PaddlePaddle的數據讀取方式

  我們了解了上文的四種基本數據格式和三種序列模式后,在處理自己的數據時可以根據需求選擇,但是處理完數據后如何把數據放到模型里去訓練呢?我們知道,基本的方法一般有兩種:

  • 一次性加載到內存:模型訓練時直接從內存中取數據,不需要大量的IO消耗,速度快,適合少量數據。
  • 加載到磁盤/HDFS/共享存儲等:這樣不用占用內存空間,在處理大量數據時一般采取這種方式,但是缺點是每次數據加載進來也是一次IO的開銷,非常影響速度。

 

  在PaddlePaddle中我們可以有三種模式來讀取數據:分別是reader、reader creator和reader decorator,這三者有什么區別呢?

  • reader:從本地、網絡、分布式文件系統HDFS等讀取數據,也可隨機生成數據,并返回一個或多個數據項。

  • reader creator:一個返回reader的函數。

  • reader decorator:裝飾器,可組合一個或多個reader。

 

  reader

  我們先以reader為例,為房價數據(斯坦福吳恩達的公開課第一課舉例的數據)創建一個reader:

  1. 創建一個reader,實質上是一個迭代器,每次返回一條數據(此處以房價數據為例)
reader = paddle.dataset.uci_housing.train()

  2. 創建一個shuffle_reader,把上一步的reader放進去,配置buf_size就可以讀取buf_size大小的數據自動做shuffle,讓數據打亂,隨機化

shuffle_reader = paddle.reader.shuffle(reader,buf_size= 100)

  3.創建一個batch_reader,把上一步混洗好的shuffle_reader放進去,給定batch_size,即可創建。

batch_reader = paddle.batch(shuffle_reader,batch_size = 2)

 

  這三種方式也可以組合起來放一塊:

reader = paddle.batch(
    paddle.reader.shuffle(
        uci_housing.train(),
    buf_size = 100),
    batch_size=2)    

   可以以一個直觀的圖來表示:

 

  從圖中可以看到,我們可以直接從原始數據集里拿去數據,用reader讀取,一條條灌倒shuffle_reader里,在本地隨機化,把數據打亂,做shuffle,然后把shuffle后的數據,一個batch一個batch的形式,批量的放到訓練器里去進行每一步的迭代和訓練。 流程簡單,而且只需要使用一行代碼即可實現整個過程。 

 

  reader creator

  如果想要生成一個簡單的隨機數據,以reader creator為例:

def reader_creator():
    def reader():
        while True:
            yield numpy.random.uniform(-1,1,size=784)
    return reader

   源碼見creator.py, 支持四種格式:np_array,text_file,RecordIO和cloud_reader

[[223797]] View Code

 

reader decorator

  如果想要讀取同時讀取兩部分的數據,那么可以定義兩個reader,合并后對其進行shuffle。如我想讀取所有用戶對比車系的數據和瀏覽車系的數據,可以定義兩個reader,分別為contrast()和view(),然后通過預定義的reader decorator緩存并組合這些數據,在對合并后的數據進行亂序操作。源碼見decorator.py

data = paddle.reader.shuffle(
        paddle.reader.compose(
            paddle.reader(contradt(contrast_path),buf_size = 100),
            paddle.reader(view(view_path),buf_size = 200),
            500)

 

  這樣有一個很大的好處,就是組合特征來訓練變得更容易了!傳統的跑模型的方法是,確定label和feature,盡可能多的找合適的feature扔到模型里去訓練,這樣我們就需要做一張大表,訓練完后我們可以分析某些特征的重要性然后重新增加或減少一些feature來進行訓練,這樣我們有需要對原來的label-feature表進行修改,如果數據量小沒啥影響,就是麻煩點,但是數據量大的話需要每一次增加feature,和主鍵、label來join的操作都會很耗時,如果采取這種方式的話,我們可以對某些同一類的特征做成一張表,數據存放的地址存為一個變量名,每次跑模型的時候想選取幾類特征,就創建幾個reader,用reader decorator 組合起來,最后再shuffle灌倒模型里去訓練。這!樣!是!不!是!很!方!便!

  如果沒理解,我舉一個實例,假設我們要預測用戶是否會買車,label是買車 or 不買車,feature有瀏覽車系、對比車系、關注車系的功能偏好等等20個,傳統的思維是做成這樣一張表:

 

  如果想要減少feature_2,看看feature_2對模型的準確率影響是否很大,那么我們需要在這張表里去掉這一列,想要增加一個feature的話,也需要在feature里增加一列,如果用reador decorator的話,我們可以這樣做數據集:

 

  把相同類型的feature放在一起,不用頻繁的join減少時間,一共做四個表,創建4個reador:

 
data = paddle.reader.shuffle(
            paddle.reader.compose(
                paddle.reader(table1(table1_path),buf_size = 100),
                paddle.reader(table2(table2_path),buf_size = 100),
                paddle.reader(table3(table3_path),buf_size = 100),
                paddle.reader(table4(table4_path),buf_size = 100),
            500)                    
 

  如果新發現了一個特征,想嘗試這個特征對模型提高準確率有沒有用,可以再單獨把這個特征數據提取出來,再增加一個reader,用reader decorator組合起來,shuffle后放入模型里跑就行了。

 


 

PaddlePaddle的數據預處理實例

  還是以手寫數字為例,對數據進行處理后并劃分train和test,只需要4步即可:

1. 指定數據地址

 
 1 import paddle.v2.dataset.common
 2 import subprocess
 3 import numpy
 4 import platform
 5 __all__ = ['train', 'test', 'convert']
 6 
 7 URL_PREFIX = 'http://yann.lecun.com/exdb/mnist/'
 8 TEST_IMAGE_URL = URL_PREFIX + 't10k-images-idx3-ubyte.gz'
 9 TEST_IMAGE_MD5 = '9fb629c4189551a2d022fa330f9573f3'
10 TEST_LABEL_URL = URL_PREFIX + 't10k-labels-idx1-ubyte.gz'
11 TEST_LABEL_MD5 = 'ec29112dd5afa0611ce80d1b7f02629c'
12 TRAIN_IMAGE_URL = URL_PREFIX + 'train-images-idx3-ubyte.gz'
13 TRAIN_IMAGE_MD5 = 'f68b3c2dcbeaaa9fbdd348bbdeb94873'
14 TRAIN_LABEL_URL = URL_PREFIX + 'train-labels-idx1-ubyte.gz'
15 TRAIN_LABEL_MD5 = 'd53e105ee54ea40749a09fcbcd1e9432'
 

2. 創建reader creator

 
 1 def reader_creator(image_filename, label_filename, buffer_size):
 2     # 創建一個reader
 3     def reader():
 4         if platform.system() == 'Darwin':
 5             zcat_cmd = 'gzcat'
 6         elif platform.system() == 'Linux':
 7             zcat_cmd = 'zcat'
 8         else:
 9             raise NotImplementedError()
10 
11         m = subprocess.Popen([zcat_cmd, image_filename], stdout=subprocess.PIPE)
12         m.stdout.read(16)  
13 
14         l = subprocess.Popen([zcat_cmd, label_filename], stdout=subprocess.PIPE)
15         l.stdout.read(8)  
16 
17         try:  # reader could be break.
18             while True:
19                 labels = numpy.fromfile(
20                     l.stdout, 'ubyte', count=buffer_size).astype("int")
21 
22                 if labels.size != buffer_size:
23                     break  # numpy.fromfile returns empty slice after EOF.
24 
25                 images = numpy.fromfile(
26                     m.stdout, 'ubyte', count=buffer_size * 28 * 28).reshape(
27                         (buffer_size, 28 * 28)).astype('float32')
28 
29                 images = images / 255.0 * 2.0 - 1.0
30 
31                 for i in xrange(buffer_size):
32                     yield images[i, :], int(labels[i])
33         finally:
34             m.terminate()
35             l.terminate()
36 
37     return reader
 

3. 創建訓練集和測試集

 
 1 def train():
 2     """
 3     創建mnsit的訓練集 reader creator
 4     返回一個reador creator,每個reader里的樣本都是圖片的像素值,在區間[0,1]內,label為0~9
 5     返回:training reader creator
 6     """
 7     return reader_creator(
 8         paddle.v2.dataset.common.download(TRAIN_IMAGE_URL, 'mnist',
 9                                           TRAIN_IMAGE_MD5),
10         paddle.v2.dataset.common.download(TRAIN_LABEL_URL, 'mnist',
11                                           TRAIN_LABEL_MD5), 100)
12 
13 
14 def test():
15     """
16     創建mnsit的測試集 reader creator
17     返回一個reador creator,每個reader里的樣本都是圖片的像素值,在區間[0,1]內,label為0~9
18     返回:testreader creator
19     """
20     return reader_creator(
21         paddle.v2.dataset.common.download(TEST_IMAGE_URL, 'mnist',
22                                           TEST_IMAGE_MD5),
23         paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist',
24                                           TEST_LABEL_MD5), 100)
 

4. 下載數據并轉換成相應格式

 
 1 def fetch():
 2     paddle.v2.dataset.common.download(TRAIN_IMAGE_URL, 'mnist', TRAIN_IMAGE_MD5)
 3     paddle.v2.dataset.common.download(TRAIN_LABEL_URL, 'mnist', TRAIN_LABEL_MD5)
 4     paddle.v2.dataset.common.download(TEST_IMAGE_URL, 'mnist', TEST_IMAGE_MD5)
 5     paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist', TRAIN_LABEL_MD5)
 6 
 7 
 8 def convert(path):
 9     """
10     將數據格式轉換為 recordio format
11     """
12     paddle.v2.dataset.common.convert(path, train(), 1000, "minist_train")
13     paddle.v2.dataset.common.convert(path, test(), 1000, "minist_test")
 

  如果想換成自己的訓練數據,只需要按照步驟改成自己的數據地址,創建相應的reader creator(或者reader decorator)即可。

 

  這是圖像的例子,如果我們想訓練一個文本模型,做一個情感分析,這個時候如何處理數據呢?步驟也很簡單。

  假設我們有一堆數據,每一行為一條樣本,以 \t 分隔,第一列是類別標簽,第二列是輸入文本的內容,文本內容中的詞語以空格分隔。以下是兩條示例數據:

positive        今天終于試了自己理想的車 外觀太騷氣了 而且中控也很棒
negative       這臺車好貴 而且還費油 性價比太低了

  現在開始做數據預處理

1. 創建reader

 
 1 def train_reader(data_dir, word_dict, label_dict):
 2     def reader():
 3         UNK_ID = word_dict["<UNK>"]
 4         word_col = 0
 5         lbl_col = 1
 6 
 7         for file_name in os.listdir(data_dir):
 8             with open(os.path.join(data_dir, file_name), "r") as f:
 9                 for line in f:
10                     line_split = line.strip().split("\t")
11                     word_ids = [
12                         word_dict.get(w, UNK_ID)
13                         for w in line_split[word_col].split()
14                     ]
15                     yield word_ids, label_dict[line_split[lbl_col]]
16 
17     return reader
 

  返回類型為: paddle.data_type.integer_value_sequence(詞語在字典的序號)和 paddle.data_type.integer_value(類別標簽)

2. 組合讀取方式

1 train_reader = paddle.batch(
2         paddle.reader.shuffle(
3             reader.train_reader(train_data_dir, word_dict, lbl_dict),
4             buf_size=1000),
5         batch_size=batch_size)

 

  完整的代碼如下(加上了劃分train和test部分):

 
 1 import os
 2 
 3 
 4 def train_reader(data_dir, word_dict, label_dict):
 5     """
 6    創建訓練數據reader
 7     :param data_dir: 數據地址.
 8     :type data_dir: str
 9     :param word_dict: 詞典地址,
10         詞典里必須有 "UNK" .
11     :type word_dict:python dict
12     :param label_dict: label 字典的地址
13     :type label_dict: Python dict
14     """
15 
16     def reader():
17         UNK_ID = word_dict["<UNK>"]
18         word_col = 1
19         lbl_col = 0
20 
21         for file_name in os.listdir(data_dir):
22             with open(os.path.join(data_dir, file_name), "r") as f:
23                 for line in f:
24                     line_split = line.strip().split("\t")
25                     word_ids = [
26                         word_dict.get(w, UNK_ID)
27                         for w in line_split[word_col].split()
28                     ]
29                     yield word_ids, label_dict[line_split[lbl_col]]
30 
31     return reader
32 
33 
34 def test_reader(data_dir, word_dict):
35     """
36     創建測試數據reader
37     :param data_dir: 數據地址.
38     :type data_dir: str
39     :param word_dict: 詞典地址,
40         詞典里必須有 "UNK" .
41     :type word_dict:python dict
42     """
43 
44     def reader():
45         UNK_ID = word_dict["<UNK>"]
46         word_col = 1
47 
48         for file_name in os.listdir(data_dir):
49             with open(os.path.join(data_dir, file_name), "r") as f:
50                 for line in f:
51                     line_split = line.strip().split("\t")
52                     if len(line_split) < word_col: continue
53                     word_ids = [
54                         word_dict.get(w, UNK_ID)
55                         for w in line_split[word_col].split()
56                     ]
57                     yield word_ids, line_split[word_col]
58 
59     return reader

 


 

 總結 

  這篇文章主要講了在paddlepaddle里如何加載自己的數據集,轉換成相應的格式,并劃分train和test。我們在使用一個框架的時候通常會先去跑幾個簡單的demo,但是如果不用常見的demo的數據,自己做一個實際的項目,完整的跑通一個模型,這才代表我們掌握了這個框架的基本應用知識。跑一個模型第一步就是數據預處理,在paddlepaddle里,提供的方式非常簡單,但是有很多優點:

  •   shuffle數據非常方便
  •   可以將數據組合成batch訓練
  •   可以利用reader decorator來組合多個reader,提高組合特征運行模型的效率
  •   可以多線程讀取數據

  而我之前使用過mxnet來訓練車牌識別的模型,50w的圖片數據想要一次訓練是非常慢的,這樣的話就有兩個解決方法:一是批量訓練,這一點大多數的框架都會有, 二是轉換成mxnet特有的rec格式,提高讀取效率,可以通過im2rec.py將圖片轉換,比較麻煩,如果是tesnorflow,也有相對應的特定格式tfrecord,這幾種方式各有優劣,從易用性上,paddlepaddle是比較簡單的。

  這篇文章沒有與上篇銜接起來,因為看到有好幾封郵件都有問怎么自己加載數據訓練,所以就決定插入一節先把這個寫了。下篇文章我們接著講CNN的進階知識。下周見^_^!

 

參考文章:

1.官網說明:

http://doc.paddlepaddle.org/develop/doc_cn/getstarted/concepts/use_concepts_cn.html

責任編輯:張燕妮 來源: www.cnblogs.com
相關推薦

2018-03-26 20:07:25

深度學習

2018-04-02 10:45:11

深度學習PaddlePaddl手寫數字識別

2018-03-26 20:14:32

深度學習

2018-04-09 10:20:32

深度學習

2021-11-03 09:00:00

深度學習自然語言機器學習

2025-03-07 08:00:00

數據數據集集神經網絡數據預處理

2018-03-26 20:00:32

深度學習

2018-04-16 11:30:32

深度學習

2018-04-17 09:40:22

深度學習

2018-04-11 09:30:41

深度學習

2011-08-04 10:38:17

Objective-C 預處理程序

2018-02-07 16:13:00

深度學習

2018-03-09 22:56:52

PaddlePaddl

2024-01-31 08:09:53

預處理器代碼C++

2018-03-26 19:56:13

深度學習

2018-03-26 21:31:30

深度學習

2018-03-26 21:26:50

深度學習

2017-05-02 08:40:36

機器學習預處理整理

2017-04-29 10:16:14

機器學習數據清洗數據整理

2017-02-09 16:39:54

百度
點贊
收藏

51CTO技術棧公眾號

欧美日韩综合色| 成人禁用看黄a在线| 伊人久久免费视频| 黄色片子免费看| 日本免费一区二区六区| 国产精品久久一级| 国产在线一区二| av一区二区三区在线观看| jjzz黄色片| 自拍偷自拍亚洲精品被多人伦好爽| 国产精品久久久久久福利一牛影视 | 日韩欧美中文视频| 伊人久久精品一区二区三区| 亚洲天堂精品在线观看| 久久青青草综合| 国产av精国产传媒| 丝袜a∨在线一区二区三区不卡| 美女少妇精品视频| 久久午夜福利电影| 精品人人人人| 欧美一区二区三区视频在线观看| av动漫在线观看| 性爱视频在线播放| 中文字幕va一区二区三区| 国产精品一区二区欧美| 在线观看视频中文字幕| 在线亚洲一区| 欧美—级高清免费播放| 国产又粗又长又硬| 91国产精品一区| 精品日韩欧美一区| 亚洲国产精品推荐| 91亚洲一区二区| 免费成人黄色网| 91福利国产成人精品照片| 国内自拍中文字幕| 日本精品一区二区三区在线播放| 久久在线免费观看| 精品免费视频123区| 国产成人av免费看| 精品一区二区三区免费播放| 日韩av电影免费观看高清| 日韩精品人妻中文字幕| 在线免费观看日本欧美爱情大片| 一本久久综合亚洲鲁鲁| 女人十八毛片嫩草av| 国产欧美日韩在线观看视频| 日韩精品亚洲元码| 无码一区二区精品| 美女一区二区在线观看| 亚洲精品美女在线观看| 国产精品成人无码专区| jizz国产精品| 亚洲第一免费播放区| 少妇熟女视频一区二区三区| 日韩精品视频在线看| 91精品国产高清一区二区三区蜜臀| 在线免费观看av的网站| 欧美亚洲福利| 91精品在线麻豆| 免费欧美一级片| **爰片久久毛片| 亚洲成人精品视频| 99久久国产精| 怕怕欧美视频免费大全| 国产亚洲精品美女| www.xx日本| 亚洲成人tv| 欧美日韩国产va另类| 久视频在线观看| 国产视频一区三区| 黄色一区二区三区| 亚洲理论在线观看| 国产在线精品自拍| 国产特级黄色片| 成人午夜私人影院| 久久99精品久久久久久水蜜桃| 色婷婷视频在线| 久久久蜜桃精品| 一区二区三区四区| 欧美6一10sex性hd| 岛国av午夜精品| 在线观看av日韩| 国产免费区一区二区三视频免费| 日韩精品综合一本久道在线视频| 欧洲午夜精品久久久| 国产ts人妖一区二区三区| 免费黄色激情视频| 欧美福利网址| 2018日韩中文字幕| 国产精品成人久久久| 国产在线麻豆精品观看| 国产精品伊人日日| 在线观看国产原创自拍视频| 一区二区三区在线播| 黑鬼大战白妞高潮喷白浆| 日本久久久久| 国产视频在线一区二区| 国产黄色小视频网站| 亚洲主播在线| 69174成人网| 搞黄视频免费在线观看| 亚洲精品伦理在线| 日本成人中文字幕在线| 伊色综合久久之综合久久| 国产亚洲精品一区二区| 久久久精品国产sm调教| 青草av.久久免费一区| 国产精品18毛片一区二区| 成人午夜电影在线观看| 亚洲成a人v欧美综合天堂下载| 污污的网站18| 婷婷综合成人| 欧美黑人视频一区| 91亚洲欧美激情| 久久久久久久久蜜桃| 玖玖精品在线视频| 国产精品黄色片| 日韩大陆欧美高清视频区| 九九热最新地址| 男人的天堂亚洲一区| 黑人另类av| 四虎亚洲精品| 69p69国产精品| 日韩免费成人av| 国产美女一区| 国产免费一区二区三区| 污污影院在线观看| 欧美高清性hdvideosex| 国产三级在线观看完整版| 99精品视频免费| 国产精品免费视频一区二区 | 日韩欧美2区| 国产丝袜一区二区三区免费视频| 国产亚洲精品码| 国产精品一卡二卡在线观看| 亚洲欧美日韩精品久久久| 制服诱惑亚洲| 亚洲女人天堂视频| 91精品国产乱码久久久张津瑜| 国产精品白丝jk白祙喷水网站| 亚洲一卡二卡三卡四卡无卡网站在线看| 中文在线中文资源| 日韩精品免费在线视频| 天天综合天天干| 91蜜桃传媒精品久久久一区二区| 僵尸世界大战2 在线播放| 91麻豆精品激情在线观看最新| 久久97久久97精品免视看| 国产视频在线观看视频| 亚洲精品五月天| 国产成人精品综合久久久久99| 午夜电影亚洲| 国产精品免费区二区三区观看| 阿v视频在线| 日韩第一页在线| 国产黄网在线观看| 欧美激情在线看| 日本免费色视频| 一区二区影视| 国产精品久久久一区二区三区| 啦啦啦中文在线观看日本| 精品国产91洋老外米糕| 国产亚洲欧美精品久久久久久| 成人不卡免费av| 99精品人妻少妇一区二区 | 成人午夜视频在线观看| 国产h视频在线播放| 国产成人精品一区二区免费看京| 国产精品精品久久久久久| av男人的天堂在线| 91精品国产综合久久久蜜臀图片| 性欧美videos| aaa亚洲精品一二三区| 久久久久久久久久久免费视频| 精品国产一级毛片| 亚洲综合大片69999| wwww亚洲| 中文日韩在线视频| 国产成人a人亚洲精品无码| 午夜视频一区二区| 国产18无套直看片| 成人污污视频在线观看| 十八禁视频网站在线观看| 欧美第一精品| 精品免费国产| 日本一区二区三区中文字幕| 欧美精品九九久久| 3p在线观看| 亚洲精品一区二区三区影院| 免费污污视频在线观看| 亚洲激情av在线| 手机免费看av| 国产ts人妖一区二区| 亚洲欧洲日产国码无码久久99| 视频在线不卡免费观看| 国产日韩久久| 日韩伦理一区二区| 欧美在线视频一区二区| 国产网站在线免费观看 | 成人精品一区二区三区免费| 日韩一区二区三区电影在线观看| 久久夜色精品国产噜噜亚洲av| 亚洲欧美视频在线观看视频| 一区二区黄色片| 成人在线视频首页| 99re6在线观看| 乱人伦精品视频在线观看| 黄色录像特级片| 日韩精品诱惑一区?区三区| 国产一区免费在线| 欧美一级大片在线视频| 国产精品视频在线观看| av中文在线资源| 久久五月天色综合| 成年网站在线| 亚洲乱码av中文一区二区| 亚洲福利在线观看视频| 欧美精品一卡两卡| 天天天天天天天干| 色综合久久综合| 日本午夜小视频| 一区二区三区中文字幕精品精品| 亚洲图片第一页| 久久久另类综合| 久久国产精品无码一级毛片| 国产.欧美.日韩| 手机在线播放av| 国产原创一区二区三区| 少妇一级淫免费播放| 日韩专区欧美专区| 日本成年人网址| 国产欧美一级| 免费看黄在线看| 亚洲茄子视频| 久久99中文字幕| 亚洲黄色大片| 日韩精品xxxx| 国产精品日本欧美一区二区三区| 精品丰满人妻无套内射| 亚洲手机视频| 亚洲国产精品无码观看久久| 国产精品mm| 日韩精品在线观看av| 极品尤物久久久av免费看| 国产精品久久久久9999爆乳| 激情国产一区| 国产一级爱c视频| 日韩亚洲国产欧美| 国产在线青青草| 日韩精品一二区| 中文字幕天天干| 久久www免费人成看片高清| 欧美大片久久久| 国产精品一区专区| 中国特级黄色片| 99久久精品免费| 在线观看福利片| 欧美激情一区二区三区全黄| 国产精品18在线| 最新国产の精品合集bt伙计| 朝桐光av在线| 亚洲电影第三页| 四虎精品永久在线| 欧美三级电影在线看| 国产精品热久久| 亚洲第一在线视频| 欧洲毛片在线| 久久精品国产电影| 免费电影视频在线看| 91高清视频免费观看| 国产一区二区三区四区五区3d| 91免费在线视频| 国产精品久久久久久久久久白浆| 就去色蜜桃综合| 欧美a级成人淫片免费看| 成人午夜视频免费观看| 午夜在线视频观看日韩17c| 美女网站色免费| 国产69精品一区二区亚洲孕妇| 狠狠人妻久久久久久综合蜜桃| 欧美经典三级视频一区二区三区| 久久成人小视频| 无码av免费一区二区三区试看| 国产黄色免费视频| 日韩一二三区不卡| 欧美xxx.com| 九九精品视频在线观看| 电影网一区二区| 成人午夜高潮视频| 日韩高清电影免费| 日韩中文在线字幕| 久久九九99| 风韵丰满熟妇啪啪区老熟熟女| 国产日韩精品视频一区| 久久综合亚洲色hezyo国产| 欧美在线免费观看亚洲| 丁香六月色婷婷| 中文字幕日韩欧美| 丝袜老师在线| 91传媒视频免费| 成人羞羞在线观看网站| 欧美一级视频免费看| 精品一区二区三区香蕉蜜桃| av在线网站观看| 亚洲一区视频在线观看视频| 亚洲视频在线观看一区二区| 日韩av影院在线观看| 国产黄a三级三级三级av在线看 | 欧美国产激情视频| 国产盗摄视频一区二区三区| 免费人成又黄又爽又色| 亚洲电影在线免费观看| 97在线播放免费观看| 国产亚洲精品美女久久久| 日本乱码一区二区三区不卡| 不卡一卡2卡3卡4卡精品在| 久久在线视频免费观看| 欧美私人情侣网站| 99综合电影在线视频| 免费三片在线播放| 欧美一区二区免费观在线| 自拍视频在线免费观看| 日韩av手机在线看| 色综合久久中文| 欧美 丝袜 自拍 制服 另类| 国产成人精品在线看| 日本妇女毛茸茸| 欧美精品高清视频| 91精品专区| 国产精品久久久久久av下载红粉| 亚洲素人在线| 无码人妻丰满熟妇区毛片18| 99re热视频精品| 性无码专区无码| 亚洲欧美日韩图片| 亚洲综合电影| 欧美日韩在线一区二区三区| 一本一道久久综合狠狠老精东影业| 最新日本中文字幕| 午夜伊人狠狠久久| 三级毛片在线免费看| 国产91对白在线播放| 任你躁在线精品免费| 欧美精品一区免费| 91美女片黄在线观看91美女| 国产精品久久久免费视频| 亚洲精品小视频| 桃花岛tv亚洲品质| 性欧美大战久久久久久久免费观看 | 91传媒久久久| 欧美国产成人精品| 91午夜交换视频| 欧美日韩999| 久久久久观看| 爱福利视频一区二区| 久久精品夜色噜噜亚洲a∨| 久久午夜鲁丝片| 久久精品视频导航| 91精品国产自产在线丝袜啪| www.成年人视频| 91啪亚洲精品| 中文字幕免费观看视频| 久久亚洲国产精品| 国产成人精品亚洲线观看| 日韩在线视频在线观看| 日本一区二区视频在线观看| 一区二区三区播放| 欧美大片在线看| 九九视频精品全部免费播放| 欧美成人黄色网址| 一区二区激情小说| 色综合久久网女同蕾丝边| 国产精品天天狠天天看| 欧美视频二区| 亚洲成人网在线播放| 这里只有精品电影| 午夜影院在线播放| 亚洲在线不卡| eeuss国产一区二区三区| 日韩精选在线观看| 欧美俄罗斯乱妇| 精品久久久久久久久久久下田| 男女污污视频网站| 欧美日韩中文字幕| 黄色在线观看网站| 免费久久久一本精品久久区| 精彩视频一区二区| 国产又爽又黄的视频| 久久久成人精品| 少妇精品久久久一区二区| 亚洲成人激情小说| 91国内精品野花午夜精品| 特级毛片在线| 亚洲黄色一区二区三区| 成人av在线播放网站| 一女二男一黄一片| 欧美与欧洲交xxxx免费观看| 综合色一区二区| 美国一级黄色录像|