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

用 Java 訓(xùn)練深度學(xué)習(xí)模型,原來(lái)可以這么簡(jiǎn)單!

新聞 前端
很長(zhǎng)時(shí)間以來(lái),Java 都是一個(gè)很受企業(yè)歡迎的編程語(yǔ)言。得益于豐富的生態(tài)以及完善維護(hù)的包和框架,Java 擁有著龐大的開(kāi)發(fā)者社區(qū)。盡管深度學(xué)習(xí)應(yīng)用的不斷演進(jìn)和落地,提供給 Java 開(kāi)發(fā)者的框架和庫(kù)卻十分短缺。

 本文適合有 Java 基礎(chǔ)的人群

HelloGitHub 推出的 《講解開(kāi)源項(xiàng)目》 系列。這一期是由亞馬遜工程師: Keerthan Vasist ,為我們講解 DJL(完全由 Java 構(gòu)建的深度學(xué)習(xí)平臺(tái))系列的第 4 篇。

一、前言

很長(zhǎng)時(shí)間以來(lái),Java 都是一個(gè)很受企業(yè)歡迎的編程語(yǔ)言。得益于豐富的生態(tài)以及完善維護(hù)的包和框架,Java 擁有著龐大的開(kāi)發(fā)者社區(qū)。盡管深度學(xué)習(xí)應(yīng)用的不斷演進(jìn)和落地,提供給 Java 開(kāi)發(fā)者的框架和庫(kù)卻十分短缺。現(xiàn)今主要流行的深度學(xué)習(xí)模型都是用 Python 編譯和訓(xùn)練的。對(duì)于 Java 開(kāi)發(fā)者而言,如果要進(jìn)軍深度學(xué)習(xí)界,就需要重新學(xué)習(xí)并接受一門(mén)新的編程語(yǔ)言同時(shí)還要學(xué)習(xí)深度學(xué)習(xí)的復(fù)雜知識(shí)。這使得大部分 Java 開(kāi)發(fā)者學(xué)習(xí)和轉(zhuǎn)型深度學(xué)習(xí)開(kāi)發(fā)變得困難重重。

為了減少 Java 開(kāi)發(fā)者學(xué)習(xí)深度學(xué)習(xí)的成本,AWS 構(gòu)建了 Deep Java Library (DJL),一個(gè)為 Java 開(kāi)發(fā)者定制的開(kāi)源深度學(xué)習(xí)框架。它為 Java 開(kāi)發(fā)者對(duì)接主流深度學(xué)習(xí)框架提供了一個(gè)橋梁。

在這篇文章中,我們會(huì)嘗試用 DJL 構(gòu)建一個(gè)深度學(xué)習(xí)模型并用它訓(xùn)練 MNIST 手寫(xiě)數(shù)字識(shí)別任務(wù)。

二、什么是深度學(xué)習(xí)?

在我們正式開(kāi)始之前,我們先來(lái)了解一下機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的基本概念。

機(jī)器學(xué)習(xí)是一個(gè)通過(guò)利用統(tǒng)計(jì)學(xué)知識(shí),將數(shù)據(jù)輸入到計(jì)算機(jī)中進(jìn)行訓(xùn)練并完成特定目標(biāo)任務(wù)的過(guò)程。這種歸納學(xué)習(xí)的方法可以讓計(jì)算機(jī)學(xué)習(xí)一些特征并進(jìn)行一系列復(fù)雜的任務(wù),比如識(shí)別照片中的物體。由于需要寫(xiě)復(fù)雜的邏輯以及測(cè)量標(biāo)準(zhǔn),這些任務(wù)在傳統(tǒng)計(jì)算科學(xué)領(lǐng)域中很難實(shí)現(xiàn)。

深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)分支,主要側(cè)重于對(duì)于人工神經(jīng)網(wǎng)絡(luò)的開(kāi)發(fā)。人工神經(jīng)網(wǎng)絡(luò)是通過(guò)研究人腦如何學(xué)習(xí)和實(shí)現(xiàn)目標(biāo)的過(guò)程中歸納而得出一套計(jì)算邏輯。它通過(guò)模擬部分人腦神經(jīng)間信息傳遞的過(guò)程,從而實(shí)現(xiàn)各類(lèi)復(fù)雜的任務(wù)。深度學(xué)習(xí)中的“深度”來(lái)源于我們會(huì)在人工神經(jīng)網(wǎng)絡(luò)中編織構(gòu)建出許多層(layer)從而進(jìn)一步對(duì)數(shù)據(jù)信息進(jìn)行更深層的傳導(dǎo)。深度學(xué)習(xí)技術(shù)應(yīng)用范圍十分廣泛,現(xiàn)在被用來(lái)做目標(biāo)檢測(cè)、動(dòng)作識(shí)別、機(jī)器翻譯、語(yǔ)意分析等各類(lèi)現(xiàn)實(shí)應(yīng)用中。

三、訓(xùn)練 MNIST 手寫(xiě)數(shù)字識(shí)別

3.1 項(xiàng)目配置

你可以用如下的 gradle 配置來(lái)引入依賴(lài)項(xiàng)。在這個(gè)案例中,我們用 DJL 的 api 包 (核心 DJL 組件) 和 basicdataset 包 (DJL 數(shù)據(jù)集) 來(lái)構(gòu)建神經(jīng)網(wǎng)絡(luò)和數(shù)據(jù)集。這個(gè)案例中我們使用了 MXNet 作為深度學(xué)習(xí)引擎,所以我們會(huì)引入 mxnet-engine 和 mxnet-native-auto 兩個(gè)包。這個(gè)案例也可以運(yùn)行在 PyTorch 引擎下,只需要替換成對(duì)應(yīng)的軟件包即可。

  1. plugins { 
  2.     id 'java' 
  3. repositories {                            
  4.     jcenter() 
  5. dependencies { 
  6.     implementation platform("ai.djl:bom:0.8.0"
  7.     implementation "ai.djl:api" 
  8.     implementation "ai.djl:basicdataset" 
  9.     // MXNet 
  10.     runtimeOnly "ai.djl.mxnet:mxnet-engine" 
  11.     runtimeOnly "ai.djl.mxnet:mxnet-native-auto" 

3.2 NDArray 和 NDManager

NDArray 是 DJL 存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)運(yùn)算的基本結(jié)構(gòu)。一個(gè) NDArray 表達(dá)了一個(gè)定長(zhǎng)的多維數(shù)組。NDArray 的使用方法類(lèi)似于 Python 中的 numpy.ndarray 。

NDManager 是 NDArray 的老板。它負(fù)責(zé)管理 NDArray 的產(chǎn)生和回收過(guò)程,這樣可以幫助我們更好的對(duì) Java 內(nèi)存進(jìn)行優(yōu)化。每一個(gè) NDArray 都會(huì)是由一個(gè) NDManager 創(chuàng)造出來(lái),同時(shí)它們會(huì)在 NDManager 關(guān)閉時(shí)一同關(guān)閉。NDManager 和 NDArray 都是由 Java 的 AutoClosable 構(gòu)建,這樣可以確保在運(yùn)行結(jié)束時(shí)及時(shí)進(jìn)行回收。想了解更多關(guān)于它們的用法和實(shí)踐,請(qǐng)參閱我們前一期文章:

DJL 之 Java 玩轉(zhuǎn)多維數(shù)組,就像 NumPy 一樣

Model

在 DJL 中,訓(xùn)練和推理都是從 Model class 開(kāi)始構(gòu)建的。我們?cè)谶@里主要講訓(xùn)練過(guò)程中的構(gòu)建方法。下面我們?yōu)?Model 創(chuàng)建一個(gè)新的目標(biāo)。因?yàn)?Model 也是繼承了 AutoClosable 結(jié)構(gòu)體,我們會(huì)用一個(gè) try block 實(shí)現(xiàn):

  • try (Model model = Model.newInstance()) { 
  •     ... 
  •     // 主體訓(xùn)練代碼 
  •     ... 

準(zhǔn)備數(shù)據(jù)

MNIST(Modified National Institute of Standards and Technology)數(shù)據(jù)庫(kù)包含大量手寫(xiě)數(shù)字的圖,通常被用來(lái)訓(xùn)練圖像處理系統(tǒng)。DJL 已經(jīng)將 MNIST 的數(shù)據(jù)集收錄到了 basicdataset 數(shù)據(jù)集里,每個(gè) MNIST 的圖的大小是 28 x 28 。如果你有自己的數(shù)據(jù)集,你也可以通過(guò) DJL 數(shù)據(jù)集導(dǎo)入教程來(lái)導(dǎo)入數(shù)據(jù)集到你的訓(xùn)練任務(wù)中。

數(shù)據(jù)集導(dǎo)入教程: http://docs.djl.ai/docs/development/how_to_use_dataset.html#how-to-create-your-own-dataset

  1. int batchSize = 32// 批大小 
  2. Mnist trainingDataset = Mnist.builder() 
  3.         .optUsage(Usage.TRAIN) // 訓(xùn)練集 
  4.         .setSampling(batchSize, true
  5.         .build(); 
  6. Mnist validationDataset = Mnist.builder() 
  7.         .optUsage(Usage.TEST) // 驗(yàn)證集 
  8.         .setSampling(batchSize, true
  9.         .build(); 

這段代碼分別制作出了訓(xùn)練和驗(yàn)證集。同時(shí)我們也隨機(jī)排列了數(shù)據(jù)集從而更好的訓(xùn)練。除了這些配置以外,你也可以添加對(duì)于圖片的進(jìn)一步處理,比如設(shè)置圖片大小,對(duì)圖片進(jìn)行歸一化等處理。

制作 model(建立 Block)

當(dāng)你的數(shù)據(jù)集準(zhǔn)備就緒后,我們就可以構(gòu)建神經(jīng)網(wǎng)絡(luò)了。在 DJL 中,神經(jīng)網(wǎng)絡(luò)是由 Block(代碼塊)構(gòu)成的。一個(gè) Block 是一個(gè)具備多種神經(jīng)網(wǎng)絡(luò)特性的結(jié)構(gòu)。它們可以代表 一個(gè)操作, 神經(jīng)網(wǎng)絡(luò)的一部分,甚至是一個(gè)完整的神經(jīng)網(wǎng)絡(luò)。然后 Block 可以順序執(zhí)行或者并行。同時(shí) Block 本身也可以帶參數(shù)和子 Block。這種嵌套結(jié)構(gòu)可以幫助我們構(gòu)造一個(gè)復(fù)雜但又不失維護(hù)性的神經(jīng)網(wǎng)絡(luò)。在訓(xùn)練過(guò)程中,每個(gè) Block 中附帶的參數(shù)會(huì)被實(shí)時(shí)更新,同時(shí)也包括它們的各個(gè)子 Block。這種遞歸更新的過(guò)程可以確保整個(gè)神經(jīng)網(wǎng)絡(luò)得到充分訓(xùn)練。

當(dāng)我們構(gòu)建這些 Block 的過(guò)程中,最簡(jiǎn)單的方式就是將它們一個(gè)一個(gè)的嵌套起來(lái)。直接使用準(zhǔn)備好 DJL 的 Block 種類(lèi),我們就可以快速制作出各類(lèi)神經(jīng)網(wǎng)絡(luò)。

根據(jù)幾種基本的神經(jīng)網(wǎng)絡(luò)工作模式,我們提供了幾種 Block 的變體。SequentialBlock 是為了應(yīng)對(duì)順序執(zhí)行每一個(gè)子 Block 構(gòu)造而成的。它會(huì)將前一個(gè)子 Block 的輸出作為下一個(gè) Block 的輸入 繼續(xù)執(zhí)行到底。與之對(duì)應(yīng)的,是 ParallelBlock 它用于將一個(gè)輸入并行輸入到每一個(gè)子 Block 中,同時(shí)將輸出結(jié)果根據(jù)特定的合并方程合并起來(lái)。最后我們說(shuō)一下 LambdaBlock,它是幫助用戶(hù)進(jìn)行快速操作的一個(gè) Block,其中并不具備任何參數(shù),所以也沒(méi)有任何部分在訓(xùn)練過(guò)程中更新。

我們來(lái)嘗試創(chuàng)建一個(gè)基本的 多層感知機(jī)(MLP)神經(jīng)網(wǎng)絡(luò)吧。多層感知機(jī)是一個(gè)簡(jiǎn)單的前向型神經(jīng)網(wǎng)絡(luò),它只包含了幾個(gè)全連接層 (LinearBlock)。那么構(gòu)建這個(gè)網(wǎng)絡(luò),我們可以直接使用 SequentialBlock。

  1. int input = 28 * 28// 輸入層大小 
  2. int output = 10// 輸出層大小 
  3. int[] hidden = new int[] {12864}; // 隱藏層大小 
  4. SequentialBlock sequentialBlock = new SequentialBlock(); 
  5. sequentialBlock.add(Blocks.batchFlattenBlock(input)); 
  6. for (int hiddenSize : hidden) { 
  7.     // 全連接層 
  8.     sequentialBlock.add(Linear.builder().setUnits(hiddenSize).build()); 
  9.     // 激活函數(shù) 
  10.     sequentialBlock.add(activation); 
  11. sequentialBlock.add(Linear.builder().setUnits(output).build()); 

當(dāng)然 DJL 也提供了直接就可以拿來(lái)用的 MLP Block :

  1. Block block = new Mlp( 
  2.         Mnist.IMAGE_HEIGHT * Mnist.IMAGE_WIDTH, 
  3.         Mnist.NUM_CLASSES, 
  4.         new int[] {12864}); 

訓(xùn)練

當(dāng)我們準(zhǔn)備好數(shù)據(jù)集和神經(jīng)網(wǎng)絡(luò)之后,就可以開(kāi)始訓(xùn)練模型了。在深度學(xué)習(xí)中,一般會(huì)由下面幾步來(lái)完成一個(gè)訓(xùn)練過(guò)程:

  • 初始化:我們會(huì)對(duì)每一個(gè) Block 的參數(shù)進(jìn)行初始化,初始化每個(gè)參數(shù)的函數(shù)都是由 設(shè)定的 Initializer 決定的。
  • 前向傳播:這一步將輸入數(shù)據(jù)在神經(jīng)網(wǎng)絡(luò)中逐層傳遞,然后產(chǎn)生輸出數(shù)據(jù)。
  • 計(jì)算損失:我們會(huì)根據(jù)特定的損失函數(shù) Loss 來(lái)計(jì)算輸出和標(biāo)記結(jié)果的偏差。
  • 反向傳播:在這一步中,你可以利用損失反向求導(dǎo)算出每一個(gè)參數(shù)的梯度。
  • 更新權(quán)重:我們會(huì)根據(jù)選擇的優(yōu)化器(Optimizer)更新每一個(gè)在 Block 上參數(shù)的值。

DJL 利用了 Trainer 結(jié)構(gòu)體精簡(jiǎn)了整個(gè)過(guò)程。開(kāi)發(fā)者只需要?jiǎng)?chuàng)建 Trainer 并指定對(duì)應(yīng)的 Initializer、Loss 和 Optimizer 即可。這些參數(shù)都是由 TrainingConfig 設(shè)定的。下面我們來(lái)看一下具體的參數(shù)設(shè)置:

  • TrainingListener :這個(gè)是對(duì)訓(xùn)練過(guò)程設(shè)定的監(jiān)聽(tīng)器。它可以實(shí)時(shí)反饋每個(gè)階段的訓(xùn)練結(jié)果。這些結(jié)果可以用于記錄訓(xùn)練過(guò)程或者幫助 debug 神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中的問(wèn)題。用戶(hù)也可以定制自己的 TrainingListener 來(lái)對(duì)訓(xùn)練過(guò)程進(jìn)行監(jiān)聽(tīng)。
  1. DefaultTrainingConfig config = new DefaultTrainingConfig(Loss.softmaxCrossEntropyLoss()) 
  2.     .addEvaluator(new Accuracy()) 
  3.     .addTrainingListeners(TrainingListener.Defaults.logging()); 
  4. try (Trainer trainer = model.newTrainer(config)){ 
  5.     // 訓(xùn)練代碼 

當(dāng)訓(xùn)練器產(chǎn)生后,我們可以定義輸入的 Shape。之后就可以調(diào)用 fit 函數(shù)來(lái)進(jìn)行訓(xùn)練。fit 函數(shù)會(huì)對(duì)輸入數(shù)據(jù),訓(xùn)練多個(gè) epoch 是并最終將結(jié)果存儲(chǔ)在本地目錄下。

  1. /* 
  2.  * MNIST 包含 28x28 灰度圖片并導(dǎo)入成 28 * 28 NDArray。 
  3.  * 第一個(gè)維度是批大小, 在這里我們?cè)O(shè)置批大小為 1 用于初始化。 
  4.  */ 
  5. Shape inputShape = new Shape(1, Mnist.IMAGE_HEIGHT * Mnist.IMAGE_WIDTH); 
  6. int numEpoch = 5
  7. String outputDir = "/build/model"
  8.  
  9. // 用輸入初始化 trainer 
  10. trainer.initialize(inputShape); 
  11.  
  12. TrainingUtils.fit(trainer, numEpoch, trainingSet, validateSet, outputDir, "mlp"); 

這就是訓(xùn)練過(guò)程的全部流程了!用 DJL 訓(xùn)練是不是還是很輕松的?之后看一下輸出每一步的訓(xùn)練結(jié)果。如果你用了我們默認(rèn)的監(jiān)聽(tīng)器,那么輸出是類(lèi)似于下圖:

  1. [INFO ] - Downloading libmxnet.dylib ... 
  2. [INFO ] - Training on: cpu(). 
  3. [INFO ] - Load MXNet Engine Version 1.7.0 in 0.131 ms. 
  4. Training:    100% |████████████████████████████████████████| Accuracy: 0.93, SoftmaxCrossEntropyLoss: 0.24, speed: 1235.20 items/sec 
  5. Validating:  100% |████████████████████████████████████████| 
  6. [INFO ] - Epoch 1 finished. 
  7. [INFO ] - Train: Accuracy: 0.93, SoftmaxCrossEntropyLoss: 0.24 
  8. [INFO ] - Validate: Accuracy: 0.95, SoftmaxCrossEntropyLoss: 0.14 
  9. Training:    100% |████████████████████████████████████████| Accuracy: 0.97, SoftmaxCrossEntropyLoss: 0.10, speed: 2851.06 items/sec 
  10. Validating:  100% |████████████████████████████████████████| 
  11. [INFO ] - Epoch 2 finished.NG [1m 41s] 
  12. [INFO ] - Train: Accuracy: 0.97, SoftmaxCrossEntropyLoss: 0.10 
  13. [INFO ] - Validate: Accuracy: 0.97, SoftmaxCrossEntropyLoss: 0.09 
  14. [INFO ] - train P50: 12.756 ms, P90: 21.044 ms 
  15. [INFO ] - forward P50: 0.375 ms, P90: 0.607 ms 
  16. [INFO ] - training-metrics P50: 0.021 ms, P90: 0.034 ms 
  17. [INFO ] - backward P50: 0.608 ms, P90: 0.973 ms 
  18. [INFO ] - step P50: 0.543 ms, P90: 0.869 ms 
  19. [INFO ] - epoch P50: 35.989 s, P90: 35.989 s 

當(dāng)訓(xùn)練結(jié)果完成后,我們可以用剛才的模型進(jìn)行推理來(lái)識(shí)別手寫(xiě)數(shù)字。如果剛才的內(nèi)容哪里有不是很清楚的,可以參照下面兩個(gè)鏈接直接嘗試訓(xùn)練。

手寫(xiě)數(shù)據(jù)集訓(xùn)練:

 https://docs.djl.ai/examples/docs/train_mnist_mlp.html

手寫(xiě)數(shù)據(jù)集推理:

 https://docs.djl.ai/jupyter/tutorial/03_image_classification_with_your_model.html

四、最后

在這個(gè)文章中,我們介紹了深度學(xué)習(xí)的基本概念,同時(shí)還有如何優(yōu)雅的利用 DJL 構(gòu)建深度學(xué)習(xí)模型并進(jìn)行訓(xùn)練。DJL 也提供了更加多樣的數(shù)據(jù)集和神經(jīng)網(wǎng)絡(luò)。如果有興趣學(xué)習(xí)深度學(xué)習(xí),可以參閱我們的 Java 深度學(xué)習(xí)書(shū)。

Java 深度學(xué)習(xí)書(shū): https://zh.d2l.ai/

Deep Java Library(DJL)是一個(gè)基于 Java 的深度學(xué)習(xí)框架,同時(shí)支持訓(xùn)練以及推理。DJL 博取眾長(zhǎng),構(gòu)建在多個(gè)深度學(xué)習(xí)框架之上 (TenserFlow、PyTorch、MXNet 等) 也同時(shí)具備多個(gè)框架的優(yōu)良特性。你可以輕松使用 DJL 來(lái)進(jìn)行訓(xùn)練然后部署你的模型。

它同時(shí)擁有著強(qiáng)大的模型庫(kù)支持:只需一行便可以輕松讀取各種預(yù)訓(xùn)練的模型。現(xiàn)在 DJL 的模型庫(kù)同時(shí)支持高達(dá) 70 多個(gè)來(lái)自 GluonCV、 HuggingFace、TorchHub 以及 Keras 的模型。

項(xiàng)目地址: https://github.com/awslabs/djl/

 

責(zé)任編輯:張燕妮 來(lái)源: 博客園
相關(guān)推薦

2014-10-08 15:00:50

SUSE操作系統(tǒng)云計(jì)算

2022-05-10 10:19:04

AI深度學(xué)習(xí)模型

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2010-08-02 13:55:20

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2023-11-01 14:49:07

2021-12-30 10:55:54

Python游戲腳本

2022-01-27 14:12:49

Python游戲腳本

2020-09-25 07:49:36

策略模式Spring

2021-02-01 12:18:55

策略模式Spring

2017-06-11 21:55:47

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型

2022-12-06 17:30:04

2022-06-17 07:32:39

策略模式SpringBoot

2023-09-22 08:00:00

分布式鎖Redis

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2020-11-27 10:34:01

HTTPHTTPS模型

2019-03-15 10:55:12

通信系統(tǒng)手機(jī)

2025-05-08 09:31:06

2021-08-29 18:13:03

緩存失效數(shù)據(jù)

2023-01-09 08:00:00

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

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

91高清免费观看| 国产精品久久久久久久久电影网| 日韩美一区二区| 欧美限制电影| 日韩一区二区三区在线观看| 日韩精品一区在线视频| 国产精品99999| 国产在线精品一区二区三区不卡| 久久久视频在线| 99精品欧美一区二区| 日韩欧美中文在线观看| 色婷婷综合久色| 亚洲激情免费视频| 国产在线观看免费网站| 国产成人av电影在线播放| 欧美一级大片在线观看| 91精品一区二区三区蜜桃| 蜜桃久久久久| 欧美一级在线免费| 免费日韩中文字幕| 美女航空一级毛片在线播放| 欧美国产日韩一二三区| 国产精品福利视频| 一级特黄aaa大片在线观看| 99国产精品私拍| 久久这里有精品视频| 国产精品一二三区在线观看| 6080亚洲理论片在线观看| 欧美日韩欧美一区二区| 北条麻妃69av| 国产精品69xx| 亚洲女子a中天字幕| 亚洲.欧美.日本.国产综合在线| 成人av无码一区二区三区| 卡一卡二国产精品| 国产成人精品综合久久久| 国产乡下妇女做爰| 欧美成人首页| 成人444kkkk在线观看| 国产欧美小视频| 亚洲人成精品久久久| 精品国产免费一区二区三区香蕉| 九九九九九九九九| 欧美网站免费| 欧美性淫爽ww久久久久无| 无码人妻精品一区二区三区在线 | 韩国理伦片久久电影网| 黑人精品xxx一区| 人妻少妇精品无码专区二区| 午夜成年人在线免费视频| 亚洲视频一二区| 国产精品夜夜夜爽张柏芝| 97电影在线看视频| 国产精品视频一二| 亚洲va韩国va欧美va精四季| 黄网在线免费| 国产欧美一区二区精品久导航| 欧美二区三区在线| 经典三级在线| 国产日韩欧美制服另类| 亚洲bbw性色大片| 色视频在线免费观看| 国产精品短视频| 中文字幕制服丝袜在线| 在线播放蜜桃麻豆| 一区二区三区国产豹纹内裤在线| 国产一区二区片| 888av在线视频| 黑人巨大精品欧美一区二区免费| 欧美s码亚洲码精品m码| 日韩电影大全网站| 欧美天天综合网| 日韩av自拍偷拍| 午夜免费欧美电影| 亚洲激情在线视频| 在线国产视频一区| 久久在线免费| 欧美激情一区二区三区在线视频观看 | 精品无码av一区二区三区| 成人av综合网| 亚洲视频在线视频| 日韩精品一区二区三区在线视频| 亚洲字幕久久| 97视频在线免费观看| 青青视频在线免费观看| 美腿丝袜亚洲色图| 高清国产在线一区| 噜噜噜噜噜在线视频| 国产三级一区二区| 国产三级中文字幕| 欧美少妇精品| 欧美高清一级片在线| av免费观看不卡| 国内亚洲精品| 欧美激情一区二区三级高清视频| 国产又大又粗又爽| 国产精品一品二品| 久久精品二区| 国产精品久久麻豆| 欧美日韩国产在线播放| 中文字幕22页| 杨幂一区二区三区免费看视频| 最近2019中文字幕在线高清| 国产一级大片在线观看| 美女网站在线免费欧美精品| 国产精品乱子乱xxxx| 国产九色在线| 午夜欧美在线一二页| 激情文学亚洲色图| 猛男gaygay欧美视频| 免费91在线视频| 国产男人搡女人免费视频| 国产mv日韩mv欧美| 亚洲一区3d动漫同人无遮挡| а√天堂8资源在线| 在线电影欧美成精品| 亚洲做受高潮无遮挡| 欧美午夜a级限制福利片| 国产精品美女主播| 四虎影视在线观看2413| 亚洲欧美激情小说另类| 黄色国产小视频| 天堂日韩电影| 国外成人免费在线播放| 国产精品久久久久久久久久久久久久久久久久 | 欧美日韩国产精品激情在线播放| 亚洲一区av| 国产一区二区欧美日韩| 日本在线视频中文字幕| 国产麻豆精品在线观看| 亚洲7777| 福利一区视频| 亚洲香蕉伊综合在人在线视看| 国产精品成人久久| 国产成人精品午夜视频免费| 在线观看日韩羞羞视频| 草莓视频成人appios| 国产丝袜高跟一区| 在线观看免费国产视频| 成人午夜在线视频| 人人妻人人澡人人爽欧美一区双| 亚洲伦理久久| 北条麻妃99精品青青久久| av手机天堂网| 国产日韩av一区| 日本999视频| 欧美精品一区二区三区精品| 国产v综合ⅴ日韩v欧美大片| 免费成人av电影| 在线视频观看一区| 欧美18—19性高清hd4k| 日韩综合小视频| 日本午夜一区二区三区| 美女网站视频一区| 搡老女人一区二区三区视频tv| 国产偷人爽久久久久久老妇app| 国产人伦精品一区二区| 国产aaaaa毛片| 国产精品久久久久久麻豆一区软件 | 任你躁在线精品免费| 97欧美精品一区二区三区| 少妇人妻精品一区二区三区| 精品国产乱码久久久久久天美 | 欧美精品一区二区三区精品| 国产精品美乳一区二区免费| 秋霞午夜理伦电影在线观看| 欧美日韩国产精品成人| 国产精品久久久久久久精| 国产 日韩 欧美大片| 18禁免费观看网站| 国产九一精品| 91嫩草在线视频| 国产精品一区hongkong| 亚洲欧美国产另类| 97人妻人人澡人人爽人人精品| 最新成人av在线| 精品久久久久久无码人妻| 99在线精品视频在线观看| 欧美日韩一区在线观看视频| 韩国精品视频在线观看| 欧美激情视频给我| 久久久久久久影视| 欧美一区二区三区思思人| 1级黄色大片儿| 中文字幕第一区二区| 婷婷激情小说网| a91a精品视频在线观看| 先锋影音亚洲资源| 91蝌蚪精品视频| 国产成人av在线播放| 国产在线观看免费麻豆| 亚洲精品久久久一区二区三区| 国产免费一区二区三区四区五区| 亚洲蜜臀av乱码久久精品| aaa黄色大片| 欧美老女人性生活视频| caoporn视频在线| 亚洲人成网在线播放| 91美女精品网站| 午夜精品影院在线观看| 68精品久久久久久欧美| 亚洲a区在线视频| 午夜视频在线播放| 欧美男男青年gay1069videost| 亚洲精品在线观看av| 国产性天天综合网| 亚洲黄色小说在线观看| 青娱乐精品视频在线| av在线播放亚洲| 亚洲中无吗在线| 视频一区不卡| 欧美综合精品| 91嫩草免费看| 日韩免费在线电影| 欧美最猛性xxxxx亚洲精品| av免费在线观看网站| 亚洲天堂网站在线观看视频| 亚洲狼人综合网| 欧美精品精品一区| 久久亚洲精品石原莉奈 | 免费亚洲一区二区| 伊人精品久久| 成人写真视频福利网| 日韩中文视频| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品系列视频| 在线免费av资源| 538prom精品视频线放| 无码人妻av一区二区三区波多野| 亚洲尤物在线视频观看| 久草手机视频在线观看| 国产人成亚洲第一网站在线播放| 免费成人蒂法网站| 亚洲 欧美 精品| 国产精品一级在线| 奇米视频7777| 美腿丝袜一区二区三区| 91av在线免费播放| 免费亚洲婷婷| 久久精品香蕉视频| 亚洲欧美日本视频在线观看| 亚洲国产精品无码观看久久| 中国精品18videos性欧美| 宅男噜噜99国产精品观看免费| 欧洲杯足球赛直播| 亚洲国产精品日韩| 日韩欧美中文| 国产精品jizz在线观看老狼| 日韩中文在线电影| 亚洲福利av| 欧美激情偷拍自拍| 天堂v在线视频| 亚洲女同一区| 国产aaa免费视频| 国产偷自视频区视频一区二区| 毛片在线播放视频| 国产日韩1区| 91激情视频在线| 蜜臀久久99精品久久久久久9 | 国产在线免费看| 中文字幕五月欧美| 一区视频免费观看| 亚洲综合色婷婷| 国产无精乱码一区二区三区| 午夜激情一区二区三区| 亚洲婷婷综合网| 欧美性色综合网| 国产乱淫片视频| 精品国产伦理网| 极品白浆推特女神在线观看| 中文字幕日韩av| 视频在线观看入口黄最新永久免费国产| 欧美国产亚洲精品久久久8v| 乱馆动漫1~6集在线观看| 国产国语videosex另类| 国产精品日本一区二区不卡视频| 国产传媒一区| 精品久久影院| 日本一二三区视频在线| 一区二区三区福利| 九九热在线免费| 成人亚洲一区二区一| 老牛影视av老牛影视av| 成人欧美一区二区三区在线播放| 香蕉视频一区二区| 日本黄色一区二区| 国产高清免费av| 亚洲欧美日本精品| 亚洲电影视频在线| 日韩av电影在线播放| 国产美女精品视频免费播放软件| 国产欧美一区二区三区不卡高清| 色综合综合色| 女人帮男人橹视频播放| 日本大胆欧美人术艺术动态| 中文字幕1区2区| 国产精品无人区| 日韩男人的天堂| 91精品国产一区二区三区| 日本亚洲欧美| 久久91亚洲精品中文字幕奶水| 欧洲精品一区二区三区| 91精品网站| 国产日产精品_国产精品毛片| 白白操在线视频| 毛片av一区二区三区| 私密视频在线观看| 亚洲精品少妇30p| a片在线免费观看| 亚洲精品第一国产综合精品| 视频一区二区三区不卡| 欧美在线视频导航| 一区二区中文字幕在线观看| 中文字幕99| 日本午夜一区二区| 香蕉视频黄色在线观看| 一区二区三区加勒比av| 国产永久免费视频| 在线成人中文字幕| 电影一区二区三区| 国产一区二区视频在线免费观看 | 国产精品久久久网站| 亚洲视频欧美在线| 日韩成人午夜精品| 加勒比精品视频| 亚洲高清免费观看| 国产黄频在线观看| 久久影院在线观看| 亚洲毛片在线免费| 亚洲狠狠婷婷综合久久久| 久久性天堂网| 黄色在线观看av| 欧美日韩国产影院| 天堂а√在线8种子蜜桃视频 | av在线播放亚洲| 粉嫩av一区二区三区在线播放| 夫妻性生活毛片| 制服丝袜中文字幕亚洲| 91在线高清| 国产自产女人91一区在线观看| av影片在线一区| 欧美性猛交xxx乱久交| 国产色爱av资源综合区| 国产精品无码一区| 中文字幕日韩av综合精品| 国产成人精选| 一区二区三区四区视频在线| 蜜桃视频在线一区| 永久av免费网站| 欧美一卡在线观看| 国产盗摄在线视频网站| 国产精品一区二| 免费一级欧美片在线播放| 中文字幕被公侵犯的漂亮人妻| 色噜噜久久综合| 阿v免费在线观看| 国产精品亚洲美女av网站| 久久精品国产亚洲夜色av网站| 日本一二区免费| 一区二区成人在线视频| 免费成人在线看| 奇米四色中文综合久久| 日韩一区电影| 樱花草www在线| 亚洲欧洲三级电影| 亚洲精品视频一二三| 成人av免费电影网站| 欧美日韩亚洲在线| 免费高清成人在线| www日韩在线| 亚洲国产精品久久精品怡红院| 亚洲欧洲高清| 亚洲日本精品| 国产福利视频一区二区三区| 国产性xxxx高清| 伊人男人综合视频网| 精品国产鲁一鲁****| 乱人伦xxxx国语对白| 国产拍揄自揄精品视频麻豆| 国产精品毛片久久久久久久av| 欧美高清第一页| 天天躁日日躁成人字幕aⅴ| 手机在线免费观看毛片| 夜夜夜精品看看| 欧洲亚洲精品视频| 91精品久久久久久久久久入口| 欧美人与禽猛交乱配视频| 中国美女乱淫免费看视频| 欧美理论电影在线| 欧产日产国产精品视频 | 国产黑丝在线观看| 在线视频国产一区| 欧美xxxx视频| 午夜精品一区二区三区四区| 国产98色在线|日韩| 黄色网址中文字幕| 久久久欧美精品| 四虎成人精品永久免费av九九| 丰满少妇xbxb毛片日本| 欧美日韩在线不卡|