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

體驗中國自主知識產權天元深度學習引擎與TensorFlow,PyTorch的對比

原創
人工智能 深度學習
深度學習驅動之下最早創業的中國AI獨角獸曠視,宣布開源自研深度學習框架MegEngine(Brain++核心組件之一),中文名天元——取自圍棋棋盤中心點的名稱。

【51CTO.com原創稿件】深度學習驅動之下很早創業的中國AI獨角獸曠視,宣布開源自研深度學習框架MegEngine(Brain++核心組件之一),中文名天元——取自圍棋棋盤中心點的名稱。

[[320459]]

今天就來帶大家體驗一下天元深度學習框架,安裝天元深度學習引擎需要Linux,目前天元只支持Linux,對于熟悉Windows的人員還不夠友好。需要在Windows的sublinux中安裝。除非安裝雙系統,Linux裸機,否則可能支持不了GPU深度學習加速。這一點還不夠足夠方便。但是國產的初創引擎可以理解,后面一定會改進的。

pip3 install megengine -f https://megengine.org.cn/whl/mge.html

這樣就可以直接安裝。

手寫識別數據集的官網在這里,主要是手寫識別的系列數據集。http://yann.lecun.com/exdb/mnist/index.html,我們可以從這里下載數據集。

MNIST數據集中的圖片是28*28的,每張圖被轉化為一個行向量,長度是28*28=784,每一個值代表一個像素點。數據集中共有60000張手寫數據圖片,其中55000張訓練數據,5000張測試數據。

在MNIST中,mnist.train.images是一個形狀為[55000, 784]的張量,其中的第一個維度是用來索引圖片,第二個維度是圖片中的像素。MNIST數據集包含有三部分,訓練數據集,驗證數據集,測試數據集(mnist.validation)。

標簽是介于0-9之間的數字,用于描述圖片中的數字,轉化為one-hot向量即表示的數字對應的下標為1,其余的值為0。標簽的訓練數據是[55000,10]的數字矩陣。

今天就來拿MNIST來做一個測試。

這是天元進行深度學習進行手寫識別。今天就來測試一下深度學習的GPU場景下訓練速度。

GPU用英偉達顯卡1080ti。對比一下三大框架的訓練速度,代碼實現敏捷度。

下列是天元引擎代碼。

  1. from megengine.data.dataset import MNIST  #導入數據集 
  2. train_dataset = MNIST(root="./dataset/MNIST", train=True, download=True
  3. test_dataset = MNIST(root="./dataset/MNIST", train=False, download=False
  4. import megengine.module as M 
  5. import megengine.functional as F 
  6.  
  7. class Net(M.Module): 
  8.     def __init__(self): 
  9.         super().__init__() 
  10.         self.conv0 = M.Conv2d(1, 20, kernel_size=5, bias=False
  11.         self.bn0 = M.BatchNorm2d(20) 
  12.         self.relu0 = M.ReLU() 
  13.         self.pool0 = M.MaxPool2d(2) 
  14.         self.conv1 = M.Conv2d(20, 20, kernel_size=5, bias=False
  15.         self.bn1 = M.BatchNorm2d(20) 
  16.         self.relu1 = M.ReLU() 
  17.         self.pool1 = M.MaxPool2d(2) 
  18.         self.fc0 = M.Linear(500, 64, bias=True
  19.         self.relu2 = M.ReLU() 
  20.         self.fc1 = M.Linear(64, 10, bias=True
  21.  
  22.     def forward(self, x): 
  23.         x = self.conv0(x) 
  24.         x = self.bn0(x) 
  25.         x = self.relu0(x) 
  26.         x = self.pool0(x) 
  27.         x = self.conv1(x) 
  28.         x = self.bn1(x) 
  29.         x = self.relu1(x) 
  30.         x = self.pool1(x) 
  31.         x = F.flatten(x, 1) 
  32.         x = self.fc0(x) 
  33.         x = self.relu2(x) 
  34.         x = self.fc1(x) 
  35.         return x 
  36. from megengine.jit import trace 
  37.  
  38.  
  39. @trace(symbolic=True
  40. def train_func(data, label, *, opt, net): 
  41.     net.train() 
  42.     pred = net(data) 
  43.     loss = F.cross_entropy_with_softmax(pred, label) 
  44.     opt.backward(loss) 
  45.     return pred, loss 
  46.  
  47.  
  48. @trace(symbolic=True
  49. def eval_func(data, label, *, net): 
  50.     net.eval() 
  51.     pred = net(data) 
  52.     loss = F.cross_entropy_with_softmax(pred, label) 
  53.     return pred, loss 
  54. import time 
  55. import numpy as np 
  56.  
  57. import megengine as mge 
  58. from megengine.optimizer import SGD 
  59. from megengine.data import DataLoader 
  60. from megengine.data.transform import ToMode, Pad, Normalize, Compose 
  61. from megengine.data.sampler import RandomSampler 
  62.  
  63.  
  64. # 讀取訓練數據并進行預處理 
  65. dataloader = DataLoader( 
  66.     train_dataset, 
  67.     transform=Compose([ 
  68.         Normalize(mean=0.1307*255, std=0.3081*255), 
  69.         Pad(2), 
  70.         ToMode('CHW'), 
  71.     ]), 
  72.     sampler=RandomSampler(dataset=train_dataset, batch_size=64),
  73.  # 訓練時一般使用RandomSampler來打亂數據順序 
  74.  
  75. # 實例化網絡 
  76. net = Net() 
  77.  
  78. # SGD優化方法,學習率lr=0.01,動量momentum=0.9 
  79. optimizer = SGD(net.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) 
  80.  
  81. total_epochs = 10 # 共運行10個epoch 
  82. for epoch in range(total_epochs): 
  83.     total_loss = 0 
  84.     for step, (batch_data, batch_label) in enumerate(dataloader): 
  85.         batch_label = batch_label.astype(np.int32) 
  86.         optimizer.zero_grad() # 將參數的梯度置零 
  87.         pred, loss = train_func(batch_data, batch_label, opt=optimizer, net=net) 
  88.         optimizer.step()  # 根據梯度更新參數值 
  89.         total_loss += loss.numpy().item() 
  90.     print("epoch: {}, loss {}".format(epoch, total_loss/len(dataloader))) 
  91. mge.save(net.state_dict(), 'mnist_net.mge'
  92. net = Net() 
  93. state_dict = mge.load('mnist_net.mge'
  94. net.load_state_dict(state_dict) 
  95. from megengine.data.sampler import SequentialSampler 
  96.  
  97. # 測試數據 
  98. test_sampler = SequentialSampler(test_dataset, batch_size=500) 
  99. dataloader_test = DataLoader( 
  100.     test_dataset, 
  101.     sampler=test_sampler, 
  102.     transform=Compose([ 
  103.         Normalize(mean=0.1307*255, std=0.3081*255), 
  104.         Pad(2), 
  105.         ToMode('CHW'), 
  106.     ]), 
  107.  
  108. correct = 0 
  109. total = 0 
  110. for idx, (batch_data, batch_label) in enumerate(dataloader_test): 
  111.     batch_label = batch_label.astype(np.int32) 
  112.     pred, loss = eval_func(batch_data, batch_label, net=net) 
  113.     predicted = F.argmax(pred, axis=1) 
  114.     correct += (predicted == batch_label).sum().numpy().item() 
  115.     total += batch_label.shape[0] 
  116. print("correct: {}, total: {}, accuracy: {}".format(correct, total, float(correct) / total)) 

這是TensorFlow版本。

  1. import tensorflow as tf 
  2. import numpy as np 
  3. from tensorflow.examples.tutorials.mnist import input_data 
  4. import matplotlib.pyplot as plt 
  5. mnist = input_data.read_data_sets('MNIST_data', one_hot=True
  6. tf.reset_default_graph() 
  7. x = tf.placeholder(tf.float32, [None, 784]) 
  8. y = tf.placeholder(tf.float32, [None, 10]) 
  9. w = tf.Variable(tf.random_normal([784, 10])) 
  10. b = tf.Variable(tf.zeros([10])) 
  11. pred = tf.matmul(x, w) + b 
  12. pred = tf.nn.softmax(pred) 
  13. cost = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred), reduction_indices=1)) 
  14. learning_rate = 0.01 
  15. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 
  16. training_epochs = 25 
  17. batch_size = 100 
  18. display_step = 1 
  19. save_path = 'model/' 
  20. saver = tf.train.Saver() 
  21. with tf.Session() as sess: 
  22.     sess.run(tf.global_variables_initializer()) 
  23.     for epoch in range(training_epochs): 
  24.         avg_cost = 0 
  25.         total_batch = int(mnist.train.num_examples/batch_size) 
  26.         for i in range(total_batch): 
  27.             batch_xs, batch_ys = mnist.train.next_batch(batch_size) 
  28.             _, c = sess.run([optimizer, cost], feed_dict={x:batch_xs, y:batch_ys}) 
  29.             avg_cost += c / total_batch 
  30.  
  31.         if (epoch + 1) % display_step == 0: 
  32.             print('epoch= ', epoch+1, ' cost= ', avg_cost) 
  33.     print('finished'
  34.     correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) 
  35.     accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
  36.     print('accuracy: ', accuracy.eval({x:mnist.test.images, y:mnist.test.labels})) 
  37.     save = saver.save(sess, save_path=save_path+'mnist.cpkt'
  38. print(" starting 2nd session ...... "
  39. with tf.Session() as sess: 
  40.     sess.run(tf.global_variables_initializer()) 
  41.     saver.restore(sess, save_path=save_path+'mnist.cpkt'
  42.     correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) 
  43.     accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
  44.     print('accuracy: ', accuracy.eval({x: mnist.test.images, y: mnist.test.labels})) 
  45.     output = tf.argmax(pred, 1) 
  46.     batch_xs, batch_ys = mnist.test.next_batch(2) 
  47.     outputval= sess.run([output], feed_dict={x:batch_xs, y:batch_ys}) 
  48.     print(outputval) 
  49.     im = batch_xs[0] 
  50.     im = im.reshape(-1, 28) 
  51.     plt.imshow(im, cmap='gray'
  52.     plt.show() 
  53.     im = batch_xs[1] 
  54.     im = im.reshape(-1, 28) 
  55.     plt.imshow(im, cmap='gray'
  56.     plt.show() 

這是PyTorch版本。

  1. import torch 
  2. import torch.nn as nn 
  3. import torch.nn.functional as F 
  4. import torch.optim as optim 
  5. from torchvision import datasets, transforms 
  6. from torch.autograd import Variable 
  7. batch_size = 64 
  8. train_dataset = datasets.MNIST(root='./data/'
  9.                                train=True
  10.                                transform=transforms.ToTensor(), 
  11.                                download=True
  12.  
  13. test_dataset = datasets.MNIST(root='./data/'
  14.                               train=False
  15.                               transform=transforms.ToTensor()) 
  16.  
  17. # Data Loader (Input Pipeline) 
  18. train_loader = torch.utils.data.DataLoader(dataset=train_dataset, 
  19.                                            batch_size=batch_size, 
  20.                                            shuffle=True
  21.  
  22. test_loader = torch.utils.data.DataLoader(dataset=test_dataset, 
  23.                                           batch_size=batch_size, 
  24.                                           shuffle=False
  25. class Net(nn.Module): 
  26.     def __init__(self): 
  27.         super(Net, self).__init__() 
  28.         # 輸入1通道,輸出10通道,kernel 5*5 
  29.         self.conv1 = nn.Conv2d(in_channels=1, out_channels=10, kernel_size=5) 
  30.         self.conv2 = nn.Conv2d(10, 20, 5) 
  31.         self.conv3 = nn.Conv2d(20, 40, 3) 
  32.  
  33.         self.mp = nn.MaxPool2d(2) 
  34.         # fully connect 
  35.         self.fc = nn.Linear(40, 10)#(in_features, out_features) 
  36.     def forward(self, x): 
  37.         # in_size = 64 
  38.         in_size = x.size(0) # one batch     此時的x是包含batchsize維度為4的tensor,
  39. 即(batchsize,channels,x,y),x.size(0)指batchsize的值    
  40. 把batchsize的值作為網絡的in_size 
  41.         # x: 64*1*28*28 
  42.         x = F.relu(self.mp(self.conv1(x))) 
  43.         # x: 64*10*12*12  feature map =[(28-4)/2]^2=12*12 
  44.         x = F.relu(self.mp(self.conv2(x))) 
  45.         # x: 64*20*4*4 
  46.         x = F.relu(self.mp(self.conv3(x))) 
  47.  
  48.         x = x.view(in_size, -1) # flatten the tensor 相當于resharp 
  49.         # print(x.size()) 
  50.         # x: 64*320 
  51.         x = self.fc(x) 
  52.         # x:64*10 
  53.         # print(x.size()) 
  54.         return F.log_softmax(x)  #64*10 
  55. model = Net() 
  56. optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) 
  57. def train(epoch): 
  58.     for batch_idx, (data, target) in enumerate(train_loader):
  59. #batch_idx是enumerate()函數自帶的索引,從0開始 
  60.         # data.size():[64, 1, 28, 28] 
  61.         # target.size():[64] 
  62.         output = model(data) 
  63.         #output:64*10 
  64.         loss = F.nll_loss(output, target) 
  65.         if batch_idx % 200 == 0: 
  66.             print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( 
  67.                 epoch, batch_idx * len(data), len(train_loader.dataset), 
  68.                 100. * batch_idx / len(train_loader), loss.data[0])) 
  69.         optimizer.zero_grad()   # 所有參數的梯度清零 
  70.         loss.backward()         #即反向傳播求梯度 
  71.         optimizer.step()        #調用optimizer進行梯度下降更新參數 
  72. def test(): 
  73.     test_loss = 0 
  74.     correct = 0 
  75.     for data, target in test_loader: 
  76.         data, target = Variable(data, volatile=True), Variable(target) 
  77.         output = model(data) 
  78.         # sum up batch loss 
  79.         test_loss += F.nll_loss(output, target, size_average=False).data[0] 
  80.         # get the index of the max log-probability 
  81.         pred = output.data.max(1, keepdim=True)[1] 
  82.         print(pred) 
  83.         correct += pred.eq(target.data.view_as(pred)).cpu().sum() 
  84.     test_loss /= len(test_loader.dataset) 
  85.     print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format( 
  86.         test_loss, correct, len(test_loader.dataset), 
  87.         100. * correct / len(test_loader.dataset))) 
  88. for epoch in range(1, 10): 
  89.     train(epoch) 
  90.     test() 

測試時間,在1080ti,Ubuntu 18.04的系統下,訓練時間如下。

MegEngine 45.3429

TensorFlow 87.3634

PyTorch 68.8535

弄完代碼測試完了以后,對于天元深度學習框架與TensorFlow與PyTorch進行了一下小節。

1.易用性

易用性上,MegEngine與PyTorch最為簡潔,代碼比TensorFlow要簡潔優化的多,并且無縫兼容PyTorch。TensorFlow較為復雜,學習難度較大。如果要快速上手,用MegEngine也不錯。

TensorFlow是比較不友好的,與Python等語言差距很大,有點像基于一種語言重新定義了一種編程語言,并且在調試的時候比較復雜。每次版本的更新,TensorFlow的各種接口經常會有很大幅度的改變,這也大大增加了對其的學習時間。

PyTorch支持動態計算圖,追求盡量少的封裝,代碼簡潔易讀,應用十分靈活,接口沿用Torch,具有很強的易用性,同時可以很好的利用主語言Python的各種優勢。

對于文檔的詳細程度,TensorFlow具備十分詳盡的官方文檔,查找起來十分方便,同時保持很快的更新速度,但是條理不是很清晰,教程眾多。MegEngine與PyTorch相對而言,條理清晰。PyTorch案例豐富度略多,MegEngine還在建設,相信將來一定會很多。整體而言,易用性上MegEngine與PyTorch差不多。TensorFlow的易用性最差。 MegEngine可以無縫借用PyTorch的所有案例,這一點兼容性上做的非常贊。

2.速度

曠世對寫出的天元深度學習框架做了許多優化,在我的顯卡1080ti的狀態MegEngine >PyTorch>TensorFlow。就單機訓練速度而言,MegEngine速度相當快,并且用的內存最小。據說MegEngine采用靜態內存分配,做到了極致的內存優化。這一點上來說是相當難得的。

3.算子數量

這一點TensorFlow無疑是最大的贏家,提供的Python API達到8000多個(參見https://tensorflow.google.cn/api_docs/python),基本上不存在用戶找不到的算子,所有的算法都可以用TensorFlow算子拼出來。不過API過多也是個負擔,又是low level又是high level,容易把用戶整暈。PyTorch的算子其次,優化較TensorFlow較多。天元深度學習框架算子數量目前最少,但是優化較好,算子質量較高。其中任意圖在訓練MNIST上就有很大幫助。目前TensorFlow與PyTorch都不支持。

4.開源模型數據集案例

目前TensorFlow>PyTorch>MegEngine,這一塊TensorFlow時間最久,案例最多,PyTorch其次,MegEngine最少。

5.開源社區

目前MegEngine的開源社區最小,不過也在籌備組建中,盡早加入也能成為類似PyTorch,TensorFlow社區的大牛。如果招聘天元深度學習框架的人越多,可能促進學習的人越多。目前國產還在起步路上,但是非常看好天元的深度學習框架的未來。

6.靈活性

TensorFlow主要支持靜態計算圖的形式,計算圖的結構比較直觀,但是在調試過程中十分復雜與麻煩,一些錯誤更加難以發現。但是在2017年底發布了動態圖機制Eager Execution,加入對于動態計算圖的支持,但是目前依舊采用原有的靜態計算圖形式為主。TensorFlow擁有TensorBoard應用,可以監控運行過程,可視化計算圖。

PyTorch為動態計算圖的典型代表,便于調試,并且高度模塊化,搭建模型十分方便,同時具備極其優秀的GPU支持,數據參數在CPU與GPU之間遷移十分靈活。MegEngine無縫兼容PyTorch,并且具備動態圖這樣的優點,在分布式部署,模型推斷上有較大優勢。MegEngine的靈活性相比TensorFlow有較大優勢。

以表格的形式對比如下: 

注:分數越高越好

總結下MegEngine 有下列優點。

  1. 上手簡單
  2. 兼容PyTorch
  3. 支持靜態圖/動態圖兩種機制
  4. 中文教程詳細
  5. 中文社區,有利于英文不好的童鞋。

也有一些不足有待改進。

  1. 支持 Windows/Mac及其他 Linux發行版。目前只支持 Ubuntu 16.04 及以上,這個確實有點少。而且應該還不支持 Docker等安裝方式。
  2. 更多的案例庫與模型庫。
  3. 盡量早日進駐各大高校,有教材與教程,建立中國自己的AI人才梯隊。

希望MegEngine為中國的人工智能產業做出自己的貢獻,打造中國智造的人工智能深度學習引擎,為中華民族崛起貢獻自己的光輝力量,我們也可以好好用用國產深度學習引擎,打造我們偉大的祖國成為AI強國。

作者介紹:

尹成,清華碩士,微軟人工智能領域全球最有價值專家,精通C/C++,Python,Go,TensorFlow,擁有15年編程經驗與5年的教學經驗,資深軟件架構師,Intel軟件技術專家 ,具備深厚的項目管理經驗以及研發經驗,擁有兩項人工智能發明專利。

51CTO的世界五百強算法課

https://edu.51cto.com/sd/0a881

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2019-05-17 14:24:09

物聯網云計算技術

2011-03-29 11:01:34

2010-04-26 09:50:02

2013-10-22 11:33:29

華云用友云計算

2009-04-23 16:08:07

RSA互聯網控制管理

2023-07-14 11:32:39

2021-02-02 10:40:10

區塊鏈版權保護技術

2015-10-13 15:54:09

2013-01-08 10:41:01

殺毒軟件國產國外

2023-12-21 14:27:36

2020-04-09 14:26:29

曙光

2021-08-31 15:48:28

深度學習模型人工智能

2020-09-17 10:25:36

計算機系統 技術

2009-05-05 14:15:22

Soul存儲虛擬化

2011-05-13 10:51:11

曙光刀片服務器云計算

2016-05-11 10:19:48

IT168

2021-02-24 15:50:45

系統運維識別

2010-08-16 08:38:51

AndroidJavaOracle控告Goo

2018-04-11 17:50:14

深度學習PyTorchTensorFlow
點贊
收藏

51CTO技術棧公眾號

福利一区在线| 免费在线毛片| 亚洲天堂激情| 国产偷国产偷亚洲清高网站| 亚洲精品乱码久久久久久自慰| 四虎影院在线播放| 日韩精品一二三四| 欧美成人激情在线| 女尊高h男高潮呻吟| 国产a亚洲精品| 亚洲综合免费观看高清完整版在线 | 在线看国产一区| 国产欧美综合一区| 五月婷婷丁香六月| 久草精品在线观看| 91av国产在线| 四虎精品免费视频| 亚洲区小说区| 欧美刺激脚交jootjob| 免费男同深夜夜行网站| 动漫一区二区| 中文字幕制服丝袜一区二区三区 | 欧美精品性视频| 一卡二卡三卡四卡| 99久久婷婷国产综合精品青牛牛| 欧洲视频一区二区| 国产无限制自拍| 免费成人黄色| 国产亚洲精品福利| 国产欧美日韩综合精品二区| 在线观看免费观看在线| 国产亚洲午夜| 久久久久国产精品www| 亚洲AV成人无码网站天堂久久| 免费看久久久| 日韩精品一区国产麻豆| 亚洲免费黄色网| 亚洲日本网址| 粉嫩av一区二区三区免费野| 免费看欧美一级片| 在线免费观看的av| 日韩美女视频一区二区| 天堂精品视频| 国产中文字幕在线看| 99久久综合国产精品| 7777精品伊久久久大香线蕉语言| 中文字幕人妻一区二区在线视频| 奶水喷射视频一区| 91chinesevideo永久地址| 国产亚洲第一页| 欧美成熟视频| 久久最新资源网| 色哟哟一一国产精品| 日韩在线观看一区| 一区二区三区无码高清视频| 91网站免费入口| 一区二区三区视频免费观看| 日韩电影大片中文字幕| 亚洲精品在线视频免费观看| 国产日韩三级| 日韩av一区在线| 黄色短视频在线观看| 欧美日韩导航| 亚洲美女av电影| 国产成人精品无码免费看夜聊软件| 亚洲国产精品嫩草影院久久av| 亚洲黄页视频免费观看| 一区二区视频观看| 亚洲精品动态| 中文字幕久精品免费视频| 亚洲天堂最新地址| 91精品啪在线观看国产81旧版| 久热国产精品视频| 久久99久久98精品免观看软件| 欧美喷水视频| 69av视频在线播放| 99精品视频99| 日本欧美日韩| 色综合久久久久久久| 成人三级视频在线播放| 123成人网| 51精品国自产在线| 精品人妻二区中文字幕| 青青草久久爱| 中文国产成人精品| 久久久久久久久久久久久女过产乱| 欧美激情精品久久久六区热门| 久久久久久香蕉网| 午夜精品一区二| 久久精品二区亚洲w码| 91精品国自产在线观看| 天堂v在线观看| 国产视频一区不卡| 一级黄色录像免费看| 国产丝袜精品丝袜| 色综合久久综合网| 国产农村妇女精品久久| 欧美日韩导航| 久久影视电视剧免费网站| 日韩福利片在线观看| 久久资源在线| 99国产视频在线| 青青草av免费在线观看| 亚洲人成网站精品片在线观看| 欧美一级视频免费看| 福利视频一区| 亚洲黄色av女优在线观看| 一级二级黄色片| 亚洲网址在线| 国产美女久久精品| 天堂网在线播放| 综合亚洲深深色噜噜狠狠网站| 欧美综合在线播放| 91麻豆精品国产综合久久久| 亚洲国语精品自产拍在线观看| 国产精品麻豆免费版现看视频| 亚洲精品看片| 亚洲free性xxxx护士白浆| 噜噜噜噜噜在线视频| 亚洲黄色av一区| 牛夜精品久久久久久久| 欧美黄色网视频| 久久久精品国产网站| 老熟妇一区二区三区| 成人毛片视频在线观看| 亚洲最新免费视频| 欧美极品影院| 亚洲高清不卡av| 国产女人被狂躁到高潮小说| 不卡日本视频| 国内精品久久久久影院优| 在线免费av网| 久久久一区二区| 人妻夜夜添夜夜无码av| 免费欧美网站| 神马久久久久久| 天干夜夜爽爽日日日日| gogo大胆日本视频一区| 日本a级片在线观看| 欧美亚洲二区| 自拍偷拍亚洲欧美| 波多野结衣一区二区三区在线 | 国产欧美va欧美va香蕉在| 日韩专区一区二区| 亚洲成人1区2区| 日本50路肥熟bbw| 欧美~级网站不卡| 91香蕉亚洲精品| 色网站免费在线观看| 在线精品亚洲一区二区不卡| 无码人妻精品一区二区三应用大全| 亚洲无线一线二线三线区别av| 亚洲aaaaaa| av大大超碰在线| 欧美一级高清大全免费观看| 免费三级在线观看| 国产伦精品一区二区三区视频青涩| 亚洲资源在线网| 香蕉成人在线| 欧美麻豆久久久久久中文| av老司机久久| 亚洲观看高清完整版在线观看| 日本一区二区免费视频| 一区视频在线看| 精品国产aⅴ麻豆| 天堂中文在线播放| 亚洲视频电影图片偷拍一区| 最近中文字幕免费在线观看| 国产精品福利电影一区二区三区四区| www.se五月| 欧美伊人影院| 国产在线一区二| 午夜精品久久久久久久久久蜜桃| 国产亚洲美女精品久久久| 在线观看国产成人| 亚洲精品日产精品乱码不卡| 丰满少妇xbxb毛片日本| 国产精品久久久亚洲一区| 日本免费高清一区二区| 巨大黑人极品videos精品| 另类专区欧美制服同性| 人妻与黑人一区二区三区| 欧美日韩在线免费观看| 极品蜜桃臀肥臀-x88av| 国产精品自在欧美一区| 激情深爱综合网| 国产中文字幕一区二区三区| 成人免费视频a| 96av在线| 综合网日日天干夜夜久久| 精品国产区一区二| 欧美午夜激情在线| 亚洲AV成人无码精电影在线| 成人精品电影在线观看| 亚洲欧美另类动漫| 欧美日本不卡高清| 欧美日韩亚洲免费| 亚州精品国产| 亲爱的老师9免费观看全集电视剧| 91美女视频在线| 精品国产a毛片| 中文字幕视频二区| 亚洲观看高清完整版在线观看| 国产精品久久久久久久av| 国产成人av影院| 久久精品免费网站| 亚洲韩日在线| 中日韩在线视频| 日韩极品少妇| 51精品国产人成在线观看 | 国产女主播在线播放| 青青草成人在线观看| www.av片| 欧美在线看片| 色播亚洲婷婷| 欧美日韩一区二区三区在线电影 | 26uuu色噜噜精品一区| 在线看的黄色网址| 国产午夜精品一区二区三区欧美| 一区二区视频在线免费| 国产日产精品一区二区三区四区的观看方式 | 欧美精品一区二区三区四区| 一起草av在线| 色综合咪咪久久| 日韩免费一级片| 国产精品初高中害羞小美女文| 亚洲av无码成人精品国产| 国产jizzjizz一区二区| 精品综合久久久久| 免费在线观看精品| 欧美日韩在线成人| 国产精品亚洲欧美| 久久综合久久网| 午夜精品视频| 警花观音坐莲激情销魂小说| 欧美激情欧美| 午夜免费电影一区在线观看| 奇米亚洲欧美| 久久亚洲国产精品日日av夜夜| 北条麻妃在线一区二区免费播放 | 欧美刺激性大交免费视频| 一级毛片视频在线| 在线免费观看羞羞视频一区二区| 黄色在线视频观看网站| 亚洲精品永久免费精品| 五月婷婷六月丁香综合| 亚洲国产精品久久久久秋霞不卡| 亚洲成人第一区| 一区二区三区高清| 精品伦精品一区二区三区视频密桃| 国产午夜精品理论片a级大结局| 中文在线永久免费观看| 91在线播放网址| 久久久久成人精品无码中文字幕| 成人性生交大片免费看中文网站| 无码人妻一区二区三区免费n鬼沢| 国产一区二区在线观看免费| 伊人五月天婷婷| 国产老妇另类xxxxx| 天天操夜夜操很很操| 国产福利一区二区三区视频 | av在线成人| 91九色视频在线| 精品精品视频| 国产精品一级久久久| 青青一区二区| 蜜桃传媒视频麻豆一区| 欧美理论在线播放| 中文字幕在线亚洲精品| 欧美日韩午夜| 777精品久无码人妻蜜桃| 久久精品欧洲| 国产精品嫩草影院8vv8| 国v精品久久久网| 日本japanese极品少妇| 国产欧美1区2区3区| 国产传媒视频在线| 一区二区成人在线观看| 五月天婷婷久久| 中文字幕在线一区免费| 深夜福利影院在线观看| 午夜天堂影视香蕉久久| 无码视频在线观看| 91精品国产色综合久久ai换脸| 国产91久久久| 亚洲欧美中文字幕| 超碰公开在线| 午夜精品视频在线| 欧美三区四区| 999视频在线观看| 最新亚洲精品| mm131午夜| 久久精品网址| 污免费在线观看| 91蝌蚪porny成人天涯| 国产一区第一页| 午夜久久久久久电影| 中文字幕乱码人妻二区三区| 欧美mv日韩mv国产| www.黄在线观看| 久久久中精品2020中文| 国产精品99| 精品国产一区二区三区四区vr| 久久国产亚洲| 女人和拘做爰正片视频| 国产在线不卡一区| 欧美特级黄色录像| 亚洲一区二区在线视频| 一区二区小视频| 亚洲精品国产电影| 亚洲综合图区| 国产免费一区视频观看免费 | 欧美精品一区二区高清在线观看| 国产免费av在线| 久久久亚洲国产天美传媒修理工| av免费在线一区| 国产一区二区在线网站| 性欧美69xoxoxoxo| 我要看一级黄色大片| 91丝袜呻吟高潮美腿白嫩在线观看| 爱爱视频免费在线观看| 在线观看日产精品| 手机看片福利在线观看| 免费不卡在线观看av| 国产91在线播放精品| 欧美日韩国产三区| 亚洲区欧美区| 中文字幕永久免费| 中文字幕一区二区视频| 成年人视频免费| 亚洲乱码一区av黑人高潮| 久草在线视频网站| 亚洲最大的av网站| 99久久久久国产精品| 亚洲老女人av| 国产亲近乱来精品视频| av大片在线免费观看| 亚洲高清一区二| heyzo高清在线| 春色成人在线视频| 欧美激情自拍| 成人高清在线观看视频| 最新国产成人在线观看| 一区二区三区免费在线| 在线精品91av| 四虎精品在线观看| 在线丝袜欧美日韩制服| 精品制服美女丁香| √天堂中文官网8在线| 91精品久久久久久久久99蜜臂| 黄色网页在线免费看| 91亚洲精华国产精华| 亚洲欧美综合久久久| av在线免费观看不卡| 一区二区在线电影| 午夜精品久久久久久久爽| 久国内精品在线| 88久久精品| 日本中文字幕网址| 91免费小视频| 欧美一级淫片免费视频黄| 伊人伊成久久人综合网站| 欧美色网在线| 欧美性视频在线播放| 国产成人在线影院| 国产 欧美 日韩 在线| 亚洲三级黄色在线观看| 久久亚洲精品人成综合网| 大桥未久一区二区| 国产suv精品一区二区883| 999这里只有精品| 亚洲人a成www在线影院| 影音成人av| 免费看污污视频| 成人精品亚洲人成在线| 日本va欧美va国产激情| 国产一区二区久久精品| 婷婷久久免费视频| 男人插女人视频在线观看| 久久久久久久精| 国产精品视频无码| 欧美精品第一页在线播放| 色愁久久久久久| 999在线观看| 性欧美大战久久久久久久久| 好男人免费精品视频| 亚洲综合最新在线| 另类av一区二区| 中文字幕无码日韩专区免费| 亚洲大尺度美女在线| 本网站久久精品| 欧美久久在线观看| 国产欧美日韩三区| 亚洲女人18毛片水真多| 国产精品7m视频| 狠狠干成人综合网| 欧美性受xxxx黑人| 亚洲第一区在线| 亚洲国产91视频| 国产成人在线免费看|