午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > PyTorch的Debug指南

PyTorch的Debug指南

熱門標簽:悟空智電銷機器人6 遼寧400電話辦理多少錢 荊州云電銷機器人供應商 電信營業(yè)廳400電話申請 外呼不封號系統(tǒng) 溫州旅游地圖標注 蘇州電銷機器人十大排行榜 幫人做地圖標注收費算詐騙嗎 江蘇房產(chǎn)電銷機器人廠家

一、ipdb 介紹

很多初學 python 的同學會使用 print 或 log 調試程序,但是這只在小規(guī)模的程序下調試很方便,更好的調試應該是在一邊運行的時候一邊檢查里面的變量和方法。

感興趣的可以去了解 pycharm 的 debug 模式,功能也很強大,能夠滿足一般的需求,這里不多做贅述,我們這里介紹一個更適用于 pytorch 的一個靈活的 pdb 交互式調試工具。

Pdb 是一個交互式的調試工具,集成與 Python 標準庫中,它能讓你根據(jù)需求跳轉到任意的 Python 代碼斷點、查看任意變量、單步執(zhí)行代碼,甚至還能修改變量的值,而沒有必要去重啟程序。

ipdb 則是一個增強版的 pdb,它提供了調試模式下的代碼自動補全,還有更好的語法高亮和代碼溯源,以及更好的內省功能,最重要的是它和 pdb 接口完全兼容,可以通過 pip install ipdb 安裝。

二、ipdb 的使用

首先看一個例子,要使用 ipdb 的話,只需要在想要進行調試的地方插入 ipdb.set_trace(),當代碼運行到這個地方時,就會自動進入交互式調試模式。

import ipdb


def sum(x):
    r = 0
    for ii in x:
        r += ii
    return r


def mul(x):
    r = 1
    for ii in x:
        r *= 11
    return r


ipdb.set_trace()
x = [1, 2, 3, 4, 5]
r = sum(x)
r = mul(x)
> /Users/mac/Desktop/jupyter/test.py(19)module>()
     18 ipdb.set_trace()
---> 19 x = [1, 2, 3, 4, 5]
     20 r = sum(x)

ipdb> l 1,5  # l(ist) 1,5 的縮寫,查看第 1 行到第 5 行的代碼
      1 import ipdb
      2 
      3 
      4 def sum(x):
      5     r = 0

ipdb> n  # n(ext) 的縮寫執(zhí)行下一步
> /Users/mac/Desktop/jupyter/test.py(20)module>()
     19 x = [1, 2, 3, 4, 5]
---> 20 r = sum(x)
     21 r = mul(x)

ipdb> s  # s(tep) 的縮寫,進入 sum 函數(shù)內部
--Call--
> /Users/mac/Desktop/jupyter/test.py(4)sum()
      3 
----> 4 def sum(x):
      5     r = 0

ipdb> n  # n(ext) 單步執(zhí)行
> /Users/mac/Desktop/jupyter/test.py(5)sum()
      4 def sum(x):
----> 5     r = 0
      6     for ii in x:

ipdb> n
> /Users/mac/Desktop/jupyter/test.py(6)sum()
      5     r = 0
----> 6     for ii in x:
      7         r += ii

ipdb> u  # u(p) 的縮寫,調回上一層的調用
> /Users/mac/Desktop/jupyter/test.py(20)module>()
     19 x = [1, 2, 3, 4, 5]
---> 20 r = sum(x)
     21 r = mul(x)

ipdb> d  # d(own) 的縮寫,跳到調用的下一層
> /Users/mac/Desktop/jupyter/test.py(6)sum()
      5     r = 0
----> 6     for ii in x:
      7         r += ii

ipdb> n
> /Users/mac/Desktop/jupyter/test.py(7)sum()
      6     for ii in x:
----> 7         r += ii
      8     return r

ipdb> !r  # 查看變量 r 的值,該變量名與調試命令 `r(eturn)` 沖突
0
    
ipdb> return  # 繼續(xù)運行知道函數(shù)返回
--Return--
15
> /Users/mac/Desktop/jupyter/test.py(8)sum()
      7         r += ii
----> 8     return r
      9 

ipdb> n
> /Users/mac/Desktop/jupyter/test.py(21)module>()
     19 x = [1, 2, 3, 4, 5]
     20 r = sum(x)
---> 21 r = mul(x)

ipdb> x  # 查看變量 x
[1, 2, 3, 4, 5]
    
ipdb> x[0] = 10000  # 修改變量 x
    
ipdb> x
[10000, 2, 3, 4, 5]
    
ipdb> b 12  # b(reak) 的縮寫,在第 10 行設置斷點
Breakpoint 1 at /Users/mac/Desktop/jupyter/test.py:12
    
ipdb> c  # c(ontinue) 的縮寫,繼續(xù)運行,直到遇到斷點
> /Users/mac/Desktop/jupyter/test.py(12)mul()
     11 def mul(x):
1--> 12     r = 1
     13     for ii in x:

ipdb> return  # 可以看到計算的是修改之后的 x 的乘積
--Return--
1200000
> /Users/mac/Desktop/jupyter/test.py(15)mul()
     14         r *= ii
---> 15     return r
     16 

ipdb> q  # q(uit) 的縮寫,退出 debug

上述只是給出了 ipdb 的一部分使用方法,關于 ipdb 還有一些小的使用技巧:

  • 鍵能夠自動補齊,補齊用法和 IPython 中的類似
  • j(ump) 能夠跳過中間某些行的代碼的執(zhí)行
  • 可以直接在 ipdb 中修改變量的值
  • help 能夠查看調試命令的用法,比如 h h 可以查看 help 命令的用法,h j(ump) 能夠查看 j(ump) 命令的用法

三、在 PyTorch 中 Debug

PyTorch 作為一個動態(tài)圖框架,和 ipdb 結合使用能夠讓調試過程更加便捷,下面我們將距離說明以下三點:

  • 如何在 PyTorch 中查看神經(jīng)網(wǎng)絡各個層的輸出
  • 如何在 PyTorch 中分析各個參數(shù)的梯度
  • 如何動態(tài)修改 PyTorch 的訓練流程

首先,運行上一篇文章給出的“貓狗大戰(zhàn)”程序:python main.py train --debug-file='debug/debug.txt'

程序運行一段時間后,在debug目錄下創(chuàng)建debug.txt標識文件,當程序檢測到這個文件存在時,會自動進入debug模式。

99it [00:17,  6.07it/s]loss: 0.22854854568839075
119it [00:21,  5.79it/s]loss: 0.21267264398435753
139it [00:24,  5.99it/s]loss: 0.19839374726372108
> e:/Users/mac/Desktop/jupyter/mdFile/deeplearning/main.py(80)train()
     79         loss_meter.reset()
---> 80         confusion_matrix.reset()
     81         for ii, (data, label) in tqdm(enumerate(train_dataloader)):

ipdb> break 88    # 在第88行設置斷點,當程序運行到此處進入debug模式
Breakpoint 1 at e:/Users/mac/Desktop/jupyter/mdFile/deeplearning/main.py:88

ipdb> # 打印所有參數(shù)及其梯度的標準差
for (name,p) in model.named_parameters(): \

    print(name,p.data.std(),p.grad.data.std())
model.features.0.weight tensor(0.2615, device='cuda:0') tensor(0.3769, device='cuda:0')
model.features.0.bias tensor(0.4862, device='cuda:0') tensor(0.3368, device='cuda:0')
model.features.3.squeeze.weight tensor(0.2738, device='cuda:0') tensor(0.3023, device='cuda:0')
model.features.3.squeeze.bias tensor(0.5867, device='cuda:0') tensor(0.3753, device='cuda:0')
model.features.3.expand1x1.weight tensor(0.2168, device='cuda:0') tensor(0.2883, device='cuda:0')
model.features.3.expand1x1.bias tensor(0.2256, device='cuda:0') tensor(0.1147, device='cuda:0')
model.features.3.expand3x3.weight tensor(0.0935, device='cuda:0') tensor(0.1605, device='cuda:0')
model.features.3.expand3x3.bias tensor(0.1421, device='cuda:0') tensor(0.0583, device='cuda:0')
model.features.4.squeeze.weight tensor(0.1976, device='cuda:0') tensor(0.2137, device='cuda:0')
model.features.4.squeeze.bias tensor(0.4058, device='cuda:0') tensor(0.1798, device='cuda:0')
model.features.4.expand1x1.weight tensor(0.2144, device='cuda:0') tensor(0.4214, device='cuda:0')
model.features.4.expand1x1.bias tensor(0.4994, device='cuda:0') tensor(0.0958, device='cuda:0')
model.features.4.expand3x3.weight tensor(0.1063, device='cuda:0') tensor(0.2963, device='cuda:0')
model.features.4.expand3x3.bias tensor(0.0489, device='cuda:0') tensor(0.0719, device='cuda:0')
model.features.6.squeeze.weight tensor(0.1736, device='cuda:0') tensor(0.3544, device='cuda:0')
model.features.6.squeeze.bias tensor(0.2420, device='cuda:0') tensor(0.0896, device='cuda:0')
model.features.6.expand1x1.weight tensor(0.1211, device='cuda:0') tensor(0.2428, device='cuda:0')
model.features.6.expand1x1.bias tensor(0.0670, device='cuda:0') tensor(0.0162, device='cuda:0')
model.features.6.expand3x3.weight tensor(0.0593, device='cuda:0') tensor(0.1917, device='cuda:0')
model.features.6.expand3x3.bias tensor(0.0227, device='cuda:0') tensor(0.0160, device='cuda:0')
model.features.7.squeeze.weight tensor(0.1207, device='cuda:0') tensor(0.2179, device='cuda:0')
model.features.7.squeeze.bias tensor(0.1484, device='cuda:0') tensor(0.0381, device='cuda:0')
model.features.7.expand1x1.weight tensor(0.1235, device='cuda:0') tensor(0.2279, device='cuda:0')
model.features.7.expand1x1.bias tensor(0.0450, device='cuda:0') tensor(0.0100, device='cuda:0')
model.features.7.expand3x3.weight tensor(0.0609, device='cuda:0') tensor(0.1628, device='cuda:0')
model.features.7.expand3x3.bias tensor(0.0132, device='cuda:0') tensor(0.0079, device='cuda:0')
model.features.9.squeeze.weight tensor(0.1093, device='cuda:0') tensor(0.2459, device='cuda:0')
model.features.9.squeeze.bias tensor(0.0646, device='cuda:0') tensor(0.0135, device='cuda:0')
model.features.9.expand1x1.weight tensor(0.0840, device='cuda:0') tensor(0.1860, device='cuda:0')
model.features.9.expand1x1.bias tensor(0.0177, device='cuda:0') tensor(0.0033, device='cuda:0')
model.features.9.expand3x3.weight tensor(0.0476, device='cuda:0') tensor(0.1393, device='cuda:0')
model.features.9.expand3x3.bias tensor(0.0058, device='cuda:0') tensor(0.0030, device='cuda:0')
model.features.10.squeeze.weight tensor(0.0872, device='cuda:0') tensor(0.1676, device='cuda:0')
model.features.10.squeeze.bias tensor(0.0484, device='cuda:0') tensor(0.0088, device='cuda:0')
model.features.10.expand1x1.weight tensor(0.0859, device='cuda:0') tensor(0.2145, device='cuda:0')
model.features.10.expand1x1.bias tensor(0.0160, device='cuda:0') tensor(0.0025, device='cuda:0')
model.features.10.expand3x3.weight tensor(0.0456, device='cuda:0') tensor(0.1429, device='cuda:0')
model.features.10.expand3x3.bias tensor(0.0070, device='cuda:0') tensor(0.0021, device='cuda:0')
model.features.11.squeeze.weight tensor(0.0786, device='cuda:0') tensor(0.2003, device='cuda:0')
model.features.11.squeeze.bias tensor(0.0422, device='cuda:0') tensor(0.0069, device='cuda:0')
model.features.11.expand1x1.weight tensor(0.0690, device='cuda:0') tensor(0.1400, device='cuda:0')
model.features.11.expand1x1.bias tensor(0.0138, device='cuda:0') tensor(0.0022, device='cuda:0')
model.features.11.expand3x3.weight tensor(0.0366, device='cuda:0') tensor(0.1517, device='cuda:0')
model.features.11.expand3x3.bias tensor(0.0109, device='cuda:0') tensor(0.0023, device='cuda:0')
model.features.12.squeeze.weight tensor(0.0729, device='cuda:0') tensor(0.1736, device='cuda:0')
model.features.12.squeeze.bias tensor(0.0814, device='cuda:0') tensor(0.0084, device='cuda:0')
model.features.12.expand1x1.weight tensor(0.0977, device='cuda:0') tensor(0.1385, device='cuda:0')
model.features.12.expand1x1.bias tensor(0.0102, device='cuda:0') tensor(0.0032, device='cuda:0')
model.features.12.expand3x3.weight tensor(0.0365, device='cuda:0') tensor(0.1312, device='cuda:0')
model.features.12.expand3x3.bias tensor(0.0038, device='cuda:0') tensor(0.0026, device='cuda:0')
model.classifier.1.weight tensor(0.0285, device='cuda:0') tensor(0.0865, device='cuda:0')
model.classifier.1.bias tensor(0.0362, device='cuda:0') tensor(0.0192, device='cuda:0')

ipdb> opt.lr    # 查看學習率
0.001

ipdb> opt.lr = 0.002    # 更改學習率

ipdb> for p in optimizer.param_groups: \

    p['lr'] = opt.lr

ipdb> model.save()    # 保存模型
'checkpoints/squeezenet_20191004212249.pth'

ipdb> c    # 繼續(xù)運行,直到第88行暫停
222it [16:38, 35.62s/it]> e:/Users/mac/Desktop/jupyter/mdFile/deeplearning/main.py(88)train()
     87             optimizer.zero_grad()
1--> 88             score = model(input)
     89             loss = criterion(score, target)

ipdb> s    # 進入model(input)內部,即model.__call__(input)
--Call--
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\module.py(537)__call__()
    536 
--> 537     def __call__(self, *input, **kwargs):
    538         for hook in self._forward_pre_hooks.values():

ipdb> n    # 下一步
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\module.py(538)__call__()
    537     def __call__(self, *input, **kwargs):
--> 538         for hook in self._forward_pre_hooks.values():
    539             result = hook(self, input)

ipdb> n    # 下一步
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\module.py(544)__call__()
    543                 input = result
--> 544         if torch._C._get_tracing_state():
    545             result = self._slow_forward(*input, **kwargs)

ipdb> n    # 下一步
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\module.py(547)__call__()
    546         else:
--> 547             result = self.forward(*input, **kwargs)
    548         for hook in self._forward_hooks.values():

ipdb> s    # 進入forward函數(shù)內容
--Call--
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\loss.py(914)forward()
    913 
--> 914     def forward(self, input, target):
    915         return F.cross_entropy(input, target, weight=self.weight,

ipdb> input    # 查看input變量值
tensor([[4.5005, 2.0725],
        [3.5933, 7.8643],
        [2.9086, 3.4209],
        [2.7740, 4.4332],
        [6.0164, 2.3033],
        [5.2261, 3.2189],
        [2.6529, 2.0749],
        [6.3259, 2.2383],
        [3.0629, 3.4832],
        [2.7008, 8.2818],
        [5.5684, 2.1567],
        [3.0689, 6.1022],
        [3.4848, 5.3831],
        [1.7920, 5.7709],
        [6.5032, 2.8080],
        [2.3071, 5.2417],
        [3.7474, 5.0263],
        [4.3682, 3.6707],
        [2.2196, 6.9298],
        [5.2201, 2.3034],
        [6.4315, 1.4970],
        [3.4684, 4.0371],
        [3.9620, 1.7629],
        [1.7069, 7.8898],
        [3.0462, 1.6505],
        [2.4081, 6.4456],
        [2.1932, 7.4614],
        [2.3405, 2.7603],
        [1.9478, 8.4156],
        [2.7935, 7.8331],
        [1.8898, 3.8836],
        [3.3008, 1.6832]], device='cuda:0', grad_fn=AsStridedBackward>)

ipdb> input.data.mean()    # 查看input的均值和標準差
tensor(3.9630, device='cuda:0')
ipdb> input.data.std()
tensor(1.9513, device='cuda:0')

ipdb> u    # 跳回上一層
> c:\programdata\anaconda3\lib\site-packages\torch\nn\modules\module.py(547)__call__()
    546         else:
--> 547             result = self.forward(*input, **kwargs)
    548         for hook in self._forward_hooks.values():

ipdb> u    # 跳回上一層
> e:/Users/mac/Desktop/jupyter/mdFile/deeplearning/main.py(88)train()
     87             optimizer.zero_grad()
1--> 88             score = model(input)
     89             loss = criterion(score, target)

ipdb> clear    # 清除所有斷點
Clear all breaks? y
Deleted breakpoint 1 at e:/Users/mac/Desktop/jupyter/mdFile/deeplearning/main.py:88

ipdb> c    # 繼續(xù)運行,記得先刪除"debug/debug.txt",否則很快又會進入調試模式
59it [06:21,  5.75it/s]loss: 0.24856307208538073
76it [06:24,  5.91it/s]

當我們想要進入 debug 模式,修改程序中某些參數(shù)值或者想分析程序時,就可以通過創(chuàng)建 debug 標識文件,此時程序會進入調試模式,調試完成之后刪除這個文件并在 ipdb 調試接口輸入 c 繼續(xù)運行程序。如果想退出程序,也可以使用這種方式,先創(chuàng)建 debug 標識文件,然后輸入 quit 在退出 debug 的同時退出程序。這種退出程序的方式,與使用 Ctrl + C 的方式相比更安全,因為這能保證數(shù)據(jù)加載的多進程程序也能正確地退出,并釋放內存、顯存等資源。

PyTorch 和 ipdb 集合能完成很多其他框架所不能完成或很難完成的功能。根據(jù)筆者日常使用的總結,主要有以下幾個部分:

  1. 通過 debug 暫停程序。當程序進入 debug 模式后,將不再執(zhí)行 CPU 和 GPU 運算,但是內存和顯存及相應的堆棧空間不會釋放。
  2. 通過 debug 分析程序,查看每個層的輸出,查看網(wǎng)絡的參數(shù)情況。通過 u(p) 、 d(own) 、 s(tep) 等命令,能夠進入指定的代碼,通過 n(ext) 可以單步執(zhí)行,從而看到每一層的運算結果,便于分析網(wǎng)絡的數(shù)值分布等信息。
  3. 作為動態(tài)圖框架, PyTorch 擁有 Python 動態(tài)語言解釋執(zhí)行的優(yōu)點,我們能夠在運行程序時,用過 ipdb 修改某些變量的值或屬性,這些修改能夠立即生效。例如可以在訓練開始不久根據(jù)損失函數(shù)調整學習率,不必重啟程序。
  4. 如果在 IPython 中通過 %run 魔法方法運行程序,那么在程序異常退出時,可以使用 %debug 命令,直接進入 debug 模式,通過 u(p) 和 d(own) 跳到報錯的地方,查看對應的變量,找出原因后修改相應的代碼即可。有時我們的模式訓練了好幾個小時,卻在將要保存模式之前,因為一個小小的拼寫錯誤異常退出。此時,如果修改錯誤再重新運行程序又要花費好幾個小時,太浪費時間。因此最好的方法就是看利用 %debug 進入調試模式,在調試模式中直接運行 model . save() 保存模型。在 IPython 中, %pdb 魔術方法能夠使得程序出現(xiàn)問題后,不用手動輸入 %debug 而自動進入 debug 模式,建議使用。

四、 通過PyTorch實現(xiàn)項目中容易遇到的問題

PyTorch 調用 CuDNN 報錯時,報錯信息諸如 CUDNN_STATUS_BAD_PARAM,從這些報錯內容很難得到有用的幫助信息,最后先利用 PCU 運行代碼,此時一般會得到相對友好的報錯信息,例如在 ipdb 中執(zhí)行 model.cpu() (input.cpu()), PyTorch 底層的 TH 庫會給出相對比較詳細的信息。

常見的錯誤主要有以下幾種:

  • 類型不匹配問題。例如 CrossEntropyLoss 的輸入 target 應該是一個 LongTensor ,而很多人輸入 FloatTensor 。
  • 部分數(shù)據(jù)忘記從 CPU 轉移到 GPU 。例如,當 model 存放于 GPU 時,輸入 input 也需要轉移到 GPU 才能輸入到 model 中。還有可能就是把多個 model 存放于一個 list 對象,而在執(zhí)行 model.cuda() 時,這個 list 中的對象是不會被轉移到 CUDA 上的,正確的用法是用 ModuleList 代替。
  • Tensor 形狀不匹配。此類問題一般是輸入數(shù)據(jù)形狀不對,或是網(wǎng)絡結構設計有問題,一般通過 u(p) 跳到指定代碼,查看輸入和模型參數(shù)的形狀即可得知。

此外,可能還會經(jīng)常遇到程序正常運行、沒有報錯,但是模型無法收斂的問題。例如對于二分類問題,交叉熵損失一直徘徊在 0.69 附近(ln2),或者是數(shù)值出現(xiàn)溢出等問題,此時可以進入 debug 模式,用單步執(zhí)行查看,每一層輸出的均值和方差,觀察從哪一層的輸出開始出現(xiàn)數(shù)值異常。還要查看每個參數(shù)梯度的均值和方差,查看是否出現(xiàn)梯度消失或者梯度爆炸等問題。一般來說,通過再激活函數(shù)之前增加 BatchNorm 層、合理的參數(shù)初始化、使用 Adam 優(yōu)化器、學習率設為0.001,基本就能確保模型在一定程度收斂。

五、總結

本章帶同學們從頭實現(xiàn)了一個 Kaggle 上的經(jīng)典競賽,重點講解了如何合理地組合安排程序,同時介紹了一些在PyTorch中調試的技巧,下章將正式的進入編程實戰(zhàn)之旅,其中一些細節(jié)不會再講的如此詳細,做好心理準備。

以上就是PyTorch的Debug指南的詳細內容,更多關于PyTorch Debug的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • pytorch_detach 切斷網(wǎng)絡反傳方式
  • pytorch 禁止/允許計算局部梯度的操作
  • 如何利用Pytorch計算三角函數(shù)
  • 聊聊PyTorch中eval和no_grad的關系
  • Pytorch實現(xiàn)圖像識別之數(shù)字識別(附詳細注釋)
  • Pytorch實現(xiàn)全連接層的操作
  • pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學習率設置的操作
  • PyTorch 如何將CIFAR100數(shù)據(jù)按類標歸類保存
  • Python深度學習之使用Pytorch搭建ShuffleNetv2
  • win10系統(tǒng)配置GPU版本Pytorch的詳細教程
  • 淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思
  • pytorch visdom安裝開啟及使用方法
  • PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)
  • pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解
  • 使用pytorch實現(xiàn)線性回歸
  • pytorch實現(xiàn)線性回歸以及多元回歸
  • PyTorch學習之軟件準備與基本操作總結

標簽:欽州 臺灣 濟南 景德鎮(zhèn) 喀什 宿遷 三沙 黃山

巨人網(wǎng)絡通訊聲明:本文標題《PyTorch的Debug指南》,本文關鍵詞  PyTorch,的,Debug,指南,PyTorch,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PyTorch的Debug指南》相關的同類信息!
  • 本頁收集關于PyTorch的Debug指南的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    蜜桃视频无码区在线观看| 成人小视频免费看| 日韩电视剧免费观看网站| 日本福利视频导航| 久久精品主播| 98精品在线视频| 三级视频在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 国产一级av毛片| 久久躁日日躁aaaaxxxx| 探花视频在线观看| 91精品国产91久久久久久| 中文字幕在线观看1| 亚洲美女精品成人在线视频| 五月婷婷一区二区| 欧美xxxx18国产| 中文字幕人妻色偷偷久久| 51精品在线观看| 喷白浆一区二区| 中文字幕免费在线看| 国产精品欧美久久久| 秋霞网一区二区三区| 精品美女一区二区三区| 丰满的亚洲女人毛茸茸| 色婷婷综合久久久久| 波多野结衣绝顶大高潮| 久久精品人人做人人爽| 中文字幕资源网| 亲子乱一区二区三区电影 | 一区二区三区av| 国产日韩影视精品| 亚洲污视频在线观看| 欧美日韩中字一区| 一级黄色片毛片| 精品国产一区二区亚洲人成毛片| 秋霞欧美一区二区三区视频免费| 亚洲日本丝袜连裤袜办公室| 好吊妞www.84com只有这里才有精品| 国产精品久久久久精| 91免费版网站入口| k8久久久一区二区三区| 97视频在线免费播放| 一区二区三区高清| 九九九九九九九九| 欧美性三三影院| 国产性猛交普通话对白| 国产一区二区丝袜高跟鞋图片| 亚洲日本在线播放| 欧美一进一出视频| 国产精品青草久久| 成人免费在线观看视频网站| 欧美视频一区二区| 久草资源在线视频| 国产精成人品localhost| 成人一区二区三区在线观看| aaa免费在线观看| 亚洲3atv精品一区二区三区| 一级黄色毛毛片| 国产女人精品视频| 久久久久久97三级| 免费在线观看日韩av| 亚洲美女av网站| 国产又黄又粗又猛又爽| 国产原创精品| 欧美日韩免费区域视频在线观看| 国产精品久久免费观看| 97视频色精品| 国产精品嫩草99a| 国产sm调教视频| 宅男66日本亚洲欧美视频| 香蕉视频网站在线| 欧美无砖专区免费| 亚洲国产精品成人一区二区| 日本亚洲最大的色成网站www| 在线视频福利一区| 欧美久久婷婷综合色| 国内精品偷拍视频| 制服丝袜综合日韩欧美| 欧美日韩精品一二三区| 夜夜躁狠狠躁日日躁av| 国产尤物av一区二区三区| 中文字幕亚洲二区| 不卡一二三区首页| 99自拍偷拍视频| 国产欧美精品久久久| 一区二区三区四区在线| 中文字幕一区二区三区四区视频| 亚洲精品一区二区三区四区五区 | 精品中文字幕在线2019| 国产精品国产自产拍高清av| 日韩av综合在线| 国产精品久久久久久久久电影网| 亚洲精品中文字幕女同| 懂色av一区二区夜夜嗨| 中文字幕55页| 日韩69视频在线观看| 亚洲午夜久久久久久久久久久| 99久久精品国产一区色| 91视频免费入口| aa成人免费视频| 欧美精品三级在线观看| 国产一区二区看久久| 国产精品成人免费观看| 欧美日韩dvd| 国内精品久久久久影院 日本资源| 亚洲综合另类小说| 日本精品久久久久久| 大黑人交xxx极品hd| 日韩av不卡在线播放| 欧美日韩成人精品| av一二三不卡影片| 91香蕉国产线在线观看| 欧美一级电影久久| 精品视频1区2区| 久久综合资源网| 国产精品欧美综合亚洲| 欧美激情一区二区三区p站| 91青青草免费观看| 日韩综合中文字幕| 一本大道av伊人久久综合| 老司机午夜精品视频| 国产一级生活片| 一级全黄裸体片| 狠狠色综合网站久久久久久久| 欧美风情在线观看| 欧美一区在线视频| 久久久精品天堂| 性色av蜜臀av| 91网站免费视频| 1024av视频| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产精品久久免费观看| 永久免费网站视频在线观看| 96精品视频在线| 在线视频播放大全| 国产成年人在线观看| 国产日韩欧美二区| 91精品国产91久久久久青草| 在线观看日韩av| 日韩av在线精品| 日韩一区二区三区精品视频| 亚洲美女在线国产| 美国一区二区三区在线播放| 国产视频手机在线| 日韩av手机在线免费观看| 这里只有精品在线观看视频 | 老司机午夜网站| 一区二区三区观看| 蜜桃91精品入口| 国产精品成人va在线观看| 欧美大片网站在线观看| 久久伊人精品视频| 中文字幕欧美日韩在线| 亚洲欧洲在线看| 在线a欧美视频| 久久国产精品久久久久久| 久久夜色精品国产| 欧美精品激情blacked18| 日韩在线免费观看视频| 日韩在线免费av| 日韩小视频在线观看专区| 欧美一区二区三区日韩| 日韩精品一区二区在线观看| 日韩欧美极品在线观看| 色综合网站在线| 91精品国产综合久久精品app | 欧美性色19p| 亚洲国产精品人人做人人爽| 国产视频一区二区在线| aaa亚洲精品一二三区| 91丝袜国产在线播放| 亚洲色图制服丝袜| 国产精品久久影院| 无吗不卡中文字幕| 中文字幕欧美区| 一区二区三区免费看视频| 欧美日韩性视频| 色综合色综合色综合色综合色综合| 色婷婷综合久久久中文字幕| 欧美精品一区二区久久久| 亚洲品质视频自拍网| 亚洲欧美日韩在线高清直播| 欧美激情一区二区三区成人 | 国产91在线播放九色快色| 欧洲成人免费视频| 91成人理论电影| 91香蕉视频网址| 一本一道久久a久久综合蜜桃| 天堂www中文在线资源| 青青青视频在线播放| 国产亚洲欧美在线精品| 丰满少妇xbxb毛片日本| 三上悠亚av一区二区三区| 中文人妻一区二区三区| 欧美成人综合色| 熟妇人妻系列aⅴ无码专区友真希| 免费人成精品欧美精品| 91香蕉视频黄| 69堂国产成人免费视频| 久久av在线播放| 蜜桃视频在线观看91| 亚洲精品自拍网| 亚洲av无码国产精品久久| 97超碰资源站| 久久嫩草精品久久久精品一| 亚洲永久免费视频| 日韩欧美亚洲另类制服综合在线| 久久777国产线看观看精品| 国产色视频一区| 九九久久九九久久| 91视频免费观看网站| 午夜精品久久久久久久96蜜桃| 99视频精品免费视频| 欧美xfplay| 亚洲a成v人在线观看| 欧美激情 国产精品| 黄色录像二级片| 久久精品国产成人一区二区三区 | 日本欧美一区二区三区乱码 | 国产在线精品一区二区中文| 亚洲国产精品久久久久婷蜜芽| 亚洲欧美日韩偷拍| 精品人妻aV中文字幕乱码色欲| 亚洲欧洲制服丝袜| 亚洲人午夜色婷婷| 精品乱子伦一区二区三区| 男人舔女人下面高潮视频| 91杏吧porn蝌蚪| 奇米四色…亚洲| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品无人区一区二区三区| 一道本视频在线观看| 久久视频免费在线观看| 黄页视频在线91| 欧美在线视频你懂得| y97精品国产97久久久久久| 久久另类ts人妖一区二区| 涩多多在线观看| 蜜桃久久久久久| 日本韩国欧美一区| 国产成人精品福利一区二区三区| 日本 片 成人 在线| 国产美女www爽爽爽| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美精品一级二级| 蜜桃免费一区二区三区| 亚洲一区电影在线观看| 美女视频一区在线观看| 亚洲欧美日韩另类| 97av中文字幕| 一卡二卡三卡在线观看| 亚洲精品乱码久久久久久黑人 | 亚洲aaa视频| 91视频一区二区三区| 亚洲午夜性刺激影院| 999精品网站| 久久99久久99精品免视看婷婷 | 日本少妇吞精囗交| 亚洲午夜久久久久中文字幕久| 91国内免费在线视频| 国产一精品一aⅴ一免费| 国产成人自拍网| 97免费在线视频| 亚洲а∨天堂久久精品2021| 国产日产欧产精品推荐色| 欧美夜福利tv在线| 亚洲毛片亚洲毛片亚洲毛片| 亚洲视频一区二区免费在线观看| 亚洲一区二区三区四区视频| 久久精品视频日本| 欧美亚洲尤物久久| 日韩欧美一区二区三区久久婷婷| 五月天中文字幕| 亚洲精品久久视频| 丰满少妇大力进入| 亚洲成人黄色片| 欧美www视频| 阿v天堂2017| 高清久久久久久| 亚洲一区二区黄| 亚洲精品高清视频| 麻豆changesxxx国产| 91久久精品一区二区二区| 日日噜噜噜夜夜爽爽| 天堂蜜桃91精品| 青青草国产精品一区二区| 99精品欧美一区二区| 亚洲人成网站在线| 亚洲黄色网址在线观看| 免费成人在线网站| 国产在线精品播放| 午夜影院在线看| 亚洲欧洲美洲在线综合| 一级淫片在线观看| 久久久美女艺术照精彩视频福利播放 | 欧美一区二区三区电影| 久草资源站在线观看| 国产清纯在线一区二区www| 99re视频在线播放| 亚洲在线视频播放| 在线视频欧美日韩| 国产大学生视频| 一区二区三区免费看视频| 香蕉精品视频在线| 青青草97国产精品免费观看 | 成人免费看黄yyy456| 成人网欧美在线视频| 精品美女www爽爽爽视频| 91av视频在线| 亚洲爆乳无码一区二区三区| 欧美一二三视频| 久久天堂精品| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 无码人妻av一区二区三区波多野 | 激情小说综合区| 国产久卡久卡久卡久卡视频精品| 91久久精品国产91久久性色| 一区二区三区免费在线| 欧美二区乱c黑人| 丰满少妇乱子伦精品看片| 亚洲一区二区精品| 影音先锋亚洲天堂| 97超碰国产精品女人人人爽| 国产精品777777| 欧美激情在线有限公司| www.五月天激情| 欧美日韩精品免费看| 成人精品免费看| 国产免费黄视频| 五月婷婷激情综合网| 黑人巨大精品欧美| 亚洲福利视频在线| 欧美日韩在线观看成人| 97视频在线观看免费高清完整版在线观看 | 一级片aaaa| 国产精品久久久久久久久男 | av中文字幕免费| 高清国语自产拍免费一区二区三区| av不卡在线播放| 国产免费成人在线| 欧美大片日本大片免费观看| 林心如三级全黄裸体| 亚洲跨种族黑人xxx| 五月婷婷中文字幕| 999视频在线免费观看| 久久久久国产精品麻豆ai换脸| 国产91av视频在线观看| 欧美日韩亚洲成人| 国产高清一区二区三区四区| 欧美精品电影在线| 国产一区二区在线观看视频| 欧美 国产 日本| 日韩福利视频在线观看| 国产91久久久| 国产男女无遮挡| 亚洲色图25p| 久久国产剧场电影| 日韩视频在线视频| 欧美群妇大交群的观看方式| 青娱乐免费在线视频| 国产精品久久久久免费a∨大胸| 成人激情免费电影网址| 国产伦精品一区二区三区精品| 国产亚洲精品久久久久久777| 国产精品无码久久久久成人app| 自拍偷拍99| 日韩精品在线免费| 麻豆精品视频在线观看视频| 特级西西444www| 欧美激情久久久久| 99久久精品免费看国产| 91激情视频在线观看| 国产成人亚洲综合青青| 日本一区二区三区久久久久久久久不| 第一次破处视频| 精品无码久久久久久久动漫| 岛国视频午夜一区免费在线观看| 在线观看日本网站| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美乱妇20p| 老鸭窝一区二区久久精品| 国产区二区三区| 欧美黄色性视频| 亚洲婷婷综合色高清在线| 亚洲男人第一av| 青青青青草视频| 自拍偷拍亚洲精品| www.欧美.com| 亚洲综合网在线| 2021国产视频| 992tv成人免费影院| 国产又粗又大又爽视频| 先锋影音欧美| 中文字幕日韩av电影| 成人综合在线视频| 国产真实夫妇交换视频| 日韩av综合在线观看| 精品国产一区二区三区四区在线观看| 久久综合久久综合亚洲| 欧洲猛交xxxx乱大交3| 色一情一乱一伦一区二区三区丨 | 亚洲激情图片| 久久久久久久91| 欧美在线视频不卡| 美女视频免费一区| 欧美日韩偷拍视频| 五月天婷婷亚洲| 欧美乱偷一区二区三区在线| 久久精品美女视频网站| 亚洲妇熟xx妇色黄|