《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 教程 | PyTorch經(jīng)驗指南:技巧與陷阱

教程 | PyTorch經(jīng)驗指南:技巧與陷阱

2018-07-30

PyTorch 的構建者表明,PyTorch 的哲學是解決當務之急,也就是說即時構建運行計算圖。目前,PyTorch 也已經(jīng)借助這種即時運行的概念成為最受歡迎的框架之一,開發(fā)者能快速構建模型與驗證想法,并通過神經(jīng)網(wǎng)絡交換格式 ONNX 在多個框架之間快速遷移。本文從基本概念開始介紹了 PyTorch 的使用方法、訓練經(jīng)驗與技巧,并展示了可能出現(xiàn)的問題與解決方案。


項目地址:https://github.com/Kaixhin/grokking-pytorch


PyTorch 是一種靈活的深度學習框架,它允許通過動態(tài)神經(jīng)網(wǎng)絡(例如利用動態(tài)控流——如 if 語句或 while 循環(huán)的網(wǎng)絡)進行自動微分。它還支持 GPU 加速、分布式訓練以及各類優(yōu)化任務,同時還擁有許多更簡潔的特性。以下是作者關于如何利用 PyTorch 的一些說明,里面雖然沒有包含該庫的所有細節(jié)或最優(yōu)方法,但可能會對大家有所幫助。


神經(jīng)網(wǎng)絡是計算圖的一個子類。計算圖接收輸入數(shù)據(jù),數(shù)據(jù)被路由到對數(shù)據(jù)執(zhí)行處理的節(jié)點,并可能被這些節(jié)點轉(zhuǎn)換。在深度學習中,神經(jīng)網(wǎng)絡中的神經(jīng)元(節(jié)點)通常利用參數(shù)或可微函數(shù)轉(zhuǎn)換數(shù)據(jù),這樣可以優(yōu)化參數(shù)以通過梯度下降將損失最小化。更廣泛地說,函數(shù)是隨機的,圖結構可以是動態(tài)的。所以說,雖然神經(jīng)網(wǎng)絡可能非常適合數(shù)據(jù)流式編程,但 PyTorch 的 API 卻更關注命令式編程——一種編程更??紤]的形式。這令讀取代碼和推斷復雜程序變得簡單,而無需損耗不必要的性能;PyTorch 速度很快,且擁有大量優(yōu)化,作為終端用戶你毫無后顧之憂。


本文其余部分寫的是關于 grokking PyTorch 的內(nèi)容,都是基于 MINIST 官網(wǎng)實例,應該要在學習完官網(wǎng)初學者教程后再查看。為便于閱讀,代碼以塊狀形式呈現(xiàn),并帶有注釋,因此不會像純模塊化代碼一樣被分割成不同的函數(shù)或文件。


Pytorch 基礎


PyTorch 使用一種稱之為 imperative / eager 的范式,即每一行代碼都要求構建一個圖,以定義完整計算圖的一個部分。即使完整的計算圖還沒有構建好,我們也可以獨立地執(zhí)行這些作為組件的小計算圖,這種動態(tài)計算圖被稱為「define-by-run」方法。

微信圖片_20180730224506.gif


PyTorch 張量


正如 PyTorch 文檔所說,如果我們熟悉 NumPy 的多維數(shù)組,那么 Torch 張量的很多操作我們能輕易地掌握。PyTorch 提供了 CPU 張量和 GPU 張量,并且極大地加速了計算的速度。


從張量的構建與運行就能體會,相比 TensorFLow,在 PyTorch 中聲明張量、初始化張量要簡潔地多。例如,使用 torch.Tensor(5, 3) 語句就能隨機初始化一個 5×3 的二維張量,因為 PyTorch 是一種動態(tài)圖,所以它聲明和真實賦值是同時進行的。


在 PyTorch 中,torch.Tensor 是一種多維矩陣,其中每個元素都是單一的數(shù)據(jù)類型,且該構造函數(shù)默認為 torch.FloatTensor。以下是具體的張量類型:

微信圖片_20180730224537.jpg

除了直接定義維度,一般我們還可以從 Python 列表或 NumPy 數(shù)組中創(chuàng)建張量。而且根據(jù)使用 Python 列表和元組等數(shù)據(jù)結構的習慣,我們可以使用相似的索引方式進行取值或賦值。PyTorch 同樣支持廣播(Broadcasting)操作,一般它會隱式地把一個數(shù)組的異常維度調(diào)整到與另一個算子相匹配的維度,以實現(xiàn)維度兼容。


自動微分模塊


TensorFlow、Caffe 和 CNTK 等大多數(shù)框架都使用靜態(tài)計算圖,開發(fā)者必須建立或定義一個神經(jīng)網(wǎng)絡,并重復使用相同的結構來執(zhí)行模型訓練。改變網(wǎng)絡的模式就意味著我們必須從頭開始設計并定義相關的模塊。


但 PyTorch 使用的技術為自動微分(automatic differentiation)。在這種機制下,系統(tǒng)會有一個 Recorder 來記錄我們執(zhí)行的運算,然后再反向計算對應的梯度。這種技術在構建神經(jīng)網(wǎng)絡的過程中十分強大,因為我們可以通過計算前向傳播過程中參數(shù)的微分來節(jié)省時間。


從概念上來說,Autograd 會維護一個圖并記錄對變量執(zhí)行的所有運算。這會產(chǎn)生一個有向無環(huán)圖,其中葉結點為輸入向量,根結點為輸出向量。通過從根結點到葉結點追蹤圖的路徑,我們可以輕易地使用鏈式法則自動計算梯度。

微信圖片_20180730224603.jpg


在內(nèi)部,Autograd 將這個圖表征為 Function 對象的圖,并且可以應用 apply() 計算評估圖的結果。在計算前向傳播中,當 Autograd 在執(zhí)行請求的計算時,它還會同時構建一個表征梯度計算的圖,且每個 Variable 的 .grad_fn 屬性就是這個圖的輸入單元。在前向傳播完成后,我們可以在后向傳播中根據(jù)這個動態(tài)圖來計算梯度。


PyTorch 還有很多基礎的模塊,例如控制學習過程的最優(yōu)化器、搭建深度模型的神經(jīng)網(wǎng)絡模塊和數(shù)據(jù)加載與處理等。這一節(jié)展示的張量與自動微分模塊是 PyTorch 最為核心的概念之一,讀者可查閱 PyTorch 文檔了解更詳細的內(nèi)容。


下面作者以 MNIST 為例從數(shù)據(jù)加載到模型測試具體討論了 PyTorch 的使用、思考技巧與陷阱。


PyTorch 實用指南


導入


import argparse
import torch
from torch import nn, optim
from torch.nn import functional as F
from torch.utils.data import DataLoader
from torchvision import datasets, transforms


除了用于計算機視覺問題的 torchvision 模塊外,這些都是標準化導入。


設置


parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
 help='input batch size for training (default: 64)')
parser.add_argument('--epochs', type=int, default=10, metavar='N',
 help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
 help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
 help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
 help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',
 help='random seed (default: 1)')
parser.add_argument('--save-interval', type=int, default=10, metavar='N',
 help='how many batches to wait before checkpointing')
parser.add_argument('--resume', action='store_true', default=False,
 help='resume training from checkpoint')
args = parser.parse_args()

use_cuda = torch.cuda.is_available() and not args.no_cuda
device = torch.device('cuda' if use_cuda else 'cpu')
torch.manual_seed(args.seed)
if use_cuda:
 torch.cuda.manual_seed(args.seed)


argparse 是在 Python 中處理命令行參數(shù)的一種標準方式。


編寫與設備無關的代碼(可用時受益于 GPU 加速,不可用時會倒退回 CPU)時,選擇并保存適當?shù)?torch.device, 不失為一種好方法,它可用于確定存儲張量的位置。關于與設備無關代碼的更多內(nèi)容請參閱官網(wǎng)文件。PyTorch 的方法是使用戶能控制設備,這對簡單示例來說有些麻煩,但是可以更容易地找出張量所在的位置——這對于 a)調(diào)試很有用,并且 b)可有效地使用手動化設備。


對于可重復實驗,有必要為使用隨機數(shù)生成的任何數(shù)據(jù)設置隨機種子(如果也使用隨機數(shù),則包括隨機或 numpy)。要注意,cuDNN 用的是非確定算法,可以通過語句 torch.backends.cudnn.enabled = False 將其禁用。


數(shù)據(jù)


train_data = datasets.MNIST('data', train=True, download=True,
 transform=transforms.Compose([
 transforms.ToTensor(),
 transforms.Normalize((0.1307,), (0.3081,))]))
test_data = datasets.MNIST('data', train=False, transform=transforms.Compose([
 transforms.ToTensor(),
 transforms.Normalize((0.1307,), (0.3081,))]))

train_loader = DataLoader(train_data, batch_size=args.batch_size,
 shuffle=True, num_workers=4, pin_memory=True)
test_loader = DataLoader(test_data, batch_size=args.batch_size,
 num_workers=4, pin_memory=True)


torchvision.transforms 對于單張圖像有非常多便利的轉(zhuǎn)換工具,例如裁剪和歸一化等。


DataLoader 包含非常多的參數(shù),除了 batch_size 和 shuffle,num_workers 和 pin_memory 對于高效加載數(shù)據(jù)同樣非常重要。例如配置 num_workers > 0 將使用子進程異步加載數(shù)據(jù),而不是使用一個主進程塊加載數(shù)據(jù)。參數(shù) pin_memory 使用固定 RAM 以加速 RAM 到 GPU 的轉(zhuǎn)換,且在僅使用 CPU 時不會做任何運算。


模型


class Net(nn.Module):
 def __init__(self):
 super(Net, self).__init__()
 self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
 self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
 self.conv2_drop = nn.Dropout2d()
 self.fc1 = nn.Linear(320, 50)
 self.fc2 = nn.Linear(50, 10)

 def forward(self, x):
 x = F.relu(F.max_pool2d(self.conv1(x), 2))
 x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
 x = x.view(-1, 320)
 x = F.relu(self.fc1(x))
 x = self.fc2(x)
 return F.log_softmax(x, dim=1)

model = Net().to(device)
optimiser = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)

if args.resume:
 model.load_state_dict(torch.load('model.pth'))
 optimiser.load_state_dict(torch.load('optimiser.pth'))


神經(jīng)網(wǎng)絡初始化一般包括變量、包含可訓練參數(shù)的層級、可能獨立的可訓練參數(shù)和不可訓練的緩存器。隨后前向傳播將這些初始化參數(shù)與 F 中的函數(shù)結合,其中該函數(shù)為不包含參數(shù)的純函數(shù)。有些開發(fā)者喜歡使用完全函數(shù)化的網(wǎng)絡(如保持所有參數(shù)獨立,使用 F.conv2d 而不是 nn.Conv2d),或者完全由 layers 函數(shù)構成的網(wǎng)絡(如使用 nn.ReLU 而不是 F.relu)。


在將 device 設置為 GPU 時,.to(device) 是一種將設備參數(shù)(和緩存器)發(fā)送到 GPU 的便捷方式,且在將 device 設置為 CPU 時不會做任何處理。在將網(wǎng)絡參數(shù)傳遞給優(yōu)化器之前,把它們傳遞給適當?shù)脑O備非常重要,不然的話優(yōu)化器不能正確地追蹤參數(shù)。


神經(jīng)網(wǎng)絡(nn.Module)和優(yōu)化器(optim.Optimizer)都能保存和加載它們的內(nèi)部狀態(tài),而.load_state_dict(state_dict) 是完成這一操作的推薦方法,我們可以從以前保存的狀態(tài)字典中加載兩者的狀態(tài)并恢復訓練。此外,保存整個對象可能會出錯。


這里沒討論的一些注意事項即前向傳播可以使用控制流,例如一個成員變量或數(shù)據(jù)本身能決定 if 語句的執(zhí)行。此外,在前向傳播的過程中打印張量也是可行的,這令 debug 更加簡單。最后,前向傳播可以使用多個參數(shù)。以下使用間斷的代碼塊展示這一點:


def forward(self, x, hx, drop=False):
 hx2 = self.rnn(x, hx)
 print(hx.mean().item(), hx.var().item())
 if hx.max.item() > 10 or self.can_drop and drop:
 return hx
 else:
 return hx2


訓練


model.train()
train_losses = []

for i, (data, target) in enumerate(train_loader):
 data, target = data.to(device), target.to(device)
 optimiser.zero_grad()
 output = model(data)
 loss = F.nll_loss(output, target)
 loss.backward()
 train_losses.append(loss.item())
 optimiser.step()

 if i % 10 == 0:
 print(i, loss.item())
 torch.save(model.state_dict(), 'model.pth')
 torch.save(optimiser.state_dict(), 'optimiser.pth')
 torch.save(train_losses, 'train_losses.pth')


網(wǎng)絡模塊默認設置為訓練模式,這影響了某些模塊的工作方式,最明顯的是 dropout 和批歸一化。最好用.train() 對其進行手動設置,這樣可以把訓練標記向下傳播到所有子模塊。


在使用 loss.backward() 收集一系列新的梯度以及用 optimiser.step() 做反向傳播之前,有必要手動地將由 optimiser.zero_grad() 優(yōu)化的參數(shù)梯度歸零。默認情況下,PyTorch 會累加梯度,在單次迭代中沒有足夠資源來計算所有需要的梯度時,這種做法非常便利。


PyTorch 使用一種基于 tape 的自動化梯度(autograd)系統(tǒng),它收集按順序在張量上執(zhí)行的運算,然后反向重放它們來執(zhí)行反向模式微分。這正是為什么 PyTorch 如此靈活并允許執(zhí)行任意計算圖的原因。如果沒有張量需要做梯度更新(當你需要為該過程構建一個張量時,你必須設置 requires_grad=True),則不需要保存任何圖。然而,網(wǎng)絡傾向于包含需要梯度更新的參數(shù),因此任何網(wǎng)絡輸出過程中執(zhí)行的計算都將保存在圖中。因此如果想保存在該過程中得到的數(shù)據(jù),你將需要手動禁止梯度更新,或者,更常見的做法是將其保存為一個 Python 數(shù)(通過一個 Python 標量上的.item())或者 NumPy 數(shù)組。更多關于 autograd 的細節(jié)詳見官網(wǎng)文件。


截取計算圖的一種方式是使用.detach(),當通過沿時間的截斷反向傳播訓練 RNN 時,數(shù)據(jù)流傳遞到一個隱藏狀態(tài)可能會應用這個函數(shù)。當對損失函數(shù)求微分(其中一個成分是另一個網(wǎng)絡的輸出)時,也會很方便。但另一個網(wǎng)絡不應該用「loss - examples」的模式進行優(yōu)化,包括在 GAN 訓練中從生成器的輸出訓練判別器,或使用價值函數(shù)作為基線(例如 A2C)訓練 actor-critic 算法的策略。另一種在 GAN 訓練(從判別器訓練生成器)中能高效阻止梯度計算的方法是在整個網(wǎng)絡參數(shù)上建立循環(huán),并設置 param.requires_grad=False,這在微調(diào)中也很常用。


除了在控制臺/日志文件里記錄結果以外,檢查模型參數(shù)(以及優(yōu)化器狀態(tài))也是很重要的。你還可以使用 torch.save() 來保存一般的 Python 對象,但其它標準選擇還包括內(nèi)建的 pickle。


測試


model.eval()
test_loss, correct = 0, 0

with torch.no_grad():
 for data, target in test_loader:
 data, target = data.to(device), target.to(device)
 output = model(data)
 test_loss += F.nll_loss(output, target, size_average=False).item()
 pred = output.argmax(1, keepdim=True)
 correct += pred.eq(target.view_as(pred)).sum().item()

test_loss /= len(test_data)
acc = correct / len(test_data)
print(acc, test_loss)


為了早點響應.train(),應利用.eval() 將網(wǎng)絡明確地設置為評估模式。


正如前文所述,計算圖通常會在使用網(wǎng)絡時生成。通過 with torch.no_grad() 使用 no_grad 上下文管理器,可以防止這種情況發(fā)生。


其它


內(nèi)存有問題?可以查看官網(wǎng)文件獲取幫助。


CUDA 出錯?它們很難調(diào)試,而且通常是一個邏輯問題,會在 CPU 上產(chǎn)生更易理解的錯誤信息。如果你計劃使用 GPU,那最好能夠在 CPU 和 GPU 之間輕松切換。更普遍的開發(fā)技巧是設置代碼,以便在啟動合適的項目(例如準備一個較小/合成的數(shù)據(jù)集、運行一個 train + test epoch 等)之前快速運行所有邏輯來檢查它。如果這是一個 CUDA 錯誤,或者你沒法切換到 CPU,設置 CUDA_LAUNCH_BLOCKING=1 將使 CUDA 內(nèi)核同步啟動,從而提供更詳細的錯誤信息。


torch.multiprocessing,甚至只是一次運行多個 PyTorch 腳本的注意事項。因為 PyTorch 使用多線程 BLAS 庫來加速 CPU 上的線性代數(shù)計算,所以它通常需要使用多個內(nèi)核。如果你想一次運行多個任務,在具有多進程或多個腳本的情況下,通過將環(huán)境變量 OMP_NUM_THREADS 設置為 1 或另一個較小的數(shù)字來手動減少線程,這樣做減少了 CPU thrashing 的可能性。官網(wǎng)文件還有一些其它注意事項,尤其是關于多進程。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者。如涉及作品內(nèi)容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 日韩网站视频 | 少妇口述公做爰全过程目录 | 成人午夜视频在线播放 | 韩国无码av片在线观看网站 | 夜夜嗨av禁果av粉嫩av懂色av | 嘿咻视频在线观看 | 日韩综合一区 | 久久综合久久自在自线精品自 | 国产伦精品一区二区三 | 黄色av免费在线观看 | 新婚少妇出差沦陷 | 蜜桃一本色道久久综合亚洲精品冫 | 狠狠色丁香婷婷综合 | 三级在线看中文字幕完整版 | 午夜性片| 精东影业一区二区三区 | av一区三区 | 年代肉高h喷汁呻吟快穿 | 色哟哟—国产精品 | 日韩大片免费在线观看 | 波多野结衣免费在线视频 | 五月天中文字幕mv在线 | 国产精品久久久久久久久久久杏吧 | 加比勒色综合久久 | 特级a做爰全过程片 | 亚洲国产系列 | 日本熟妇人妻xxxxx人hd | 99久久国产热无码精品免费 | 日韩激情无码免费毛片 | 先锋影音播放不卡资源 | 色肉色伦交国产69精品 | 欧美国产日韩一区二区三区 | 亚洲激情成人 | 少妇一级淫片 | 欧美美女爱爱视频 | 国产精品任我爽爆在线播放 | www.se天堂| 波多野结衣免费一区视频 | 日本丰满大乳hd | 欧美性第一页 | 91探花福利精品国产自产在线 | 国产色网址 | 中文字幕一区二区三区在线乱码 | 亚洲 欧美 激情 小说 另类 | 成年在线网站免费观看无广告 | 亚洲成人不卡 | 成人观看视频 | 911成人网| 国产99久久久久久免费看 | 欧美日韩一级黄色片 | 中国妇女做爰视频 | 国产精彩视频在线观看 | 青青久久av| 国产露脸150部国语对白 | 夜夜操网站 | 久久精品囯产精品亚洲 | 成人国产精品视频国产 | 男人天堂网在线观看 | a级毛片,黄,免费观看 m | 国产综合有码无码中文字幕 | 老色批永久免费网站www | 国产亚洲精久久久久久无码苍井空 | 日韩精品短片 | 欧美高清在线精品一区 | 国产三级观看 | 久久成人在线 | 国产视频二区三区 | 97视频人人免费看 | 日日噜噜噜噜夜夜爽亚洲精品 | 精久国产一区二区三区四区 | 久久网页 | 国产精品久久久久久久午夜片 | 亚洲激情视频一区 | 久久久久9999亚洲精品 | 国产乱子伦精品视频 | 中文字幕免费在线看 | 久久国产精品久久国产精品 | 欧美一性一乱一交 | yy111111少妇影院免费观看 | 人妻巨大乳一二三区 | 久久九九视频 | 国产伦子系列沙发午睡 | 成人羞羞视频 | 欧美日韩不卡在线 | 特级毛片在线 | 欧美日韩性视频 | a黄色毛片 | 91色| 亚洲欧洲综合网 | 欧美激情亚洲综合 | 午夜免费剧场 | 一二三四在线视频观看社区 | 欧美日韩在线看 | 欧美14一18处毛片 | 精品国产一二 | 久久亚洲中文字幕精品一区 | 北条麻妃在线一区二区免费播放 | 中文字幕2021 | 日韩毛片基地 | 国产精品久久免费 | 亚洲国产成人在线视频 | 三级黄色网 | 顶级少妇做爰视频在线观看 | 免费精品无码av片在线观看 | 亚洲日韩av一区二区三区中文 | 日本免费网站视频 | 精品国产自在久久现线拍 | 成人爱爱网站 | aa视频免费观看 | 黑人巨茎大战俄罗斯美女 | 国产v综合v亚洲欧美久久 | 欧美www在线观看 | 久久久久无码国产精品一区 | 无码人妻精品一区二区三区东京热 | 国产一区欧美一区 | 波多野结衣精品在线 | www.婷婷色 | 色吧久久 | av在线网址大全 | 狠狠色成色综合网 | 66av99精品福利视频在线 | 无码日韩精品一区二区免费暖暖 | 国内精品久久久久久影视8 国内精品久久久久影视老司机 | 国产中文字幕一区 | 人人妻人人添人人爽欧美一区 | 日本囗交做爰视频 | 羞羞视频在线观看 | 99视频偷窥在线精品国自产拍 | 超薄丝袜足j好爽在线 | 精品一区二区三区四区五区六区 | 色哟哟精品视频在线观看 | 无码中文字幕av免费放 | 日韩经典中文字幕 | 亚洲h视频在线观看 | 亚洲精品午夜久久久久久久久久久 | 久久99久国产精品黄毛片入口 | 色噜噜色综合 | 亚洲最新在线视频 | 色噜噜国产精品视频一区二区 | 日本韩国欧美 | 国产视频一区在线观看 | 性色av无码不卡中文字幕 | 成人午夜在线观看视频 | 在线观看欧美一区二区 | 亚洲精品在线免费观看视频 | 在线手机av | 超在线视频 | 亚洲色无码播放 | 精品久久久久久国产 | 午夜视频在线播放一三 | 调教性瘾双性高清冷美人 | 久久久久久久久久久网 | 香蕉视频国产精品 | 国产一级二级在线观看 | 无码人妻丰满熟妇区毛片18 | 姑娘第5集在线观看免费 | 亚洲 欧美 国产 制服 动漫 | 苍井空一区二区波多野结衣av | 亚洲第一男人天堂 | 一区二区三区回区在观看免费视频 | 超碰在线免费看 | av高清在线免费观看 | 亚洲黄色网址 | 少妇羞涩呻吟乳沟偷拍视频 | 饭岛爱av片在线播放 | 91xxx高清在线 | 日韩精品无码一区二区三区av | 欧洲成人一区二区 | 国产精华7777777| 能直接看的av | 日本在线有码 | 精品一区二区久久久 | 婷婷色五 | 欧美成人手机在线 | 天天欧美 | 中文字幕亚洲色妞精品天堂 | 亚洲熟女www一区二区三区 | 欧美日韩理论 | 毛片日本| 国产成人tv | 欧美天天色 | 一区二区三区四区国产 | 日本wwwwww| 男女啪动最猛动态图 | 欧美日韩午夜精品 | 中文字幕日本免费毛片全过程 | 欧美日韩一卡二卡三卡 | 蜜臀va | 欧美激情性做爰免费视频 | 欧美日本专区 | 亚洲 欧美 日韩在线 | 免费a级黄毛片 | 麻豆成人入口 | 久久人妻少妇嫩草av无码专区 | 精品国产一区二区三区四区精华 | 国产精品片一区二区三区 | 国产精品久久久久永久免费看 | 少妇mm被擦出白浆液视频 | 少妇又色又紧又黄又刺激免费 | 各种含道具高h调教1v1男男 | 少妇一级视频 | 欧美激情三区 | 一交一性一色一伦一区二 | 亚洲午夜久久久久久久久电影网 | 亚洲成a人片在线观看无码专区 | 特级黄色毛片在放 | 九九色精品 | 亚洲二区在线视频 | 激情福利网 | 亚洲精品久久久蜜桃 | 欧美在线性爱视频 | 久久久成 | 蜜桃色视频 | 亚洲一区二区日韩 | 麻豆md0077饥渴少妇 | 国产精品久久久久aaaa | 四虎精品在线观看 | 99久久精品久久久久久清纯 | 国产麻豆xxxvideo实拍 | 久久不见久久见免费影院国语 | 美女与动人物aa交性 | 亚洲 成人 在线 | 欧美伊人精品成人久久综合97 | 久久婷婷精品一区二区三区日本 | 最近中文字幕mv | 国产精品激情av久久久青桔 | 国产一区在线观看视频 | 爱爱网站视频 | 国产69精品久久久久999小说 | 黄色大片在线看 | 国产51视频| 有夫之妇3高潮中文字幕 | 国产美女永久免费无遮挡 | 欧洲s码亚洲m码精品一区 | 99国产精品99久久久久久 | 99久热在线精品996热是什么 | 快色在线 | 成人免费黄色av | 天堂中文视频在线 | 欧美一道本 | 亚洲精品无码高潮喷水在线 | 久久久久久综合网 | 亚洲成在人线在线播放 | 中文在线а√在线8 | 精品人伦一区二区三区蜜桃视频 | 美国毛片av| 日韩 欧美 精品 | 成av人片在线观看www | a在线天堂 | 亚洲天堂成人 | 国产一区二区三区四区五区六区 | 18视频在线观看娇喘 | 越南a级片| 狠狠色噜噜狠狠狠7777奇米 | 夜夜躁日日躁狠狠久久88av | 亚洲国产成人精品久久久 | 国产极品视频 | 国产精品久久久久久白浆 | 在线观看91视频 | 日本在线小视频 | 日本道精品一区二区三区 | 欧美理论片在线观看 | 久久羞羞视频 | 国产乱码精品一区二区蜜臀 | 亚洲最大综合网 | 丁香六月久久 | 五月婷婷在线播放 | 亚洲视频一区在线观看 | 免费国产又色又爽又黄的网站 | 国产人久久人人人人爽 | 午夜美女裸体福利视频 | 欧美日韩亚洲系列 | 久久亚洲第一 | 涩涩屋www视频在线观看高清 | 中文字幕日韩美女 | 亚洲国色天香卡2卡3卡4 | 国产一级片网址 | 久久av免费看 | 欧美a级理论片 | 无码av专区丝袜专区 | 自拍偷拍第八页 | 成人欧美一区二区三区在线 | 欧美乱妇狂野欧美视频 | 亚洲爆乳无码专区www | 激情久久av一区av二区av三区 | 一区二区三区国产 | 91超级碰 | 青青草视频污 | 日日碰狠狠躁久久躁综合小说 | 日韩在线免费观看视频 | 99热免费观看 | 亚洲欧洲色 | 日本少妇xxxx| 国色综合 | 男人的天堂网av | 亚洲另类图区 | 国产欧美日韩综合精品二区 | 欧美亚洲视频一区 | 肉色超薄丝袜脚交91 | 欧美香蕉视频 | 国产成人亚洲综合 | av一卡二卡 | 中文字幕乱码中文乱码b站 中文字幕毛片 | 国产日本欧美一区二区 | 在线观看日批视频 | 国模杨依粉嫩蝴蝶150p | 在线中文字幕亚洲 | 乱人伦中文视频在线 | 制服丝袜另类专区制服 | 日本xxxx18高清hd | 亚洲精品在线免费看 | caoporn人人| 国产69精品久久久久9999不卡免费 | 特级西西444ww大胆视频 | 久久精品噜噜噜成人 | 国产黄色www | 啄木乌法国一区二区三区 | 中文字幕人妻熟在线影院 | 欧美看片 | 操欧美女人 | 亚洲区日韩精品中文字幕 | 亚洲中文字幕精品久久 | 久久人人爽人人爽人人片av高清 | 国产乱码av | 免费无码av片在线观看 | 一色屋精品久久久久久久久久 | 中文字幕在线视频免费观看 | 蜜乳av一区二区三区 | 成人必看www | 欧美在线综合 | 精品少妇一区二区三区免费观 | 欧美天堂在线 | 娇小xxxx性开放国产精 | 亚洲aⅴ在线无码播放毛片一线天 | 狠狠色婷婷 | 久久久99久久久国产自输拍 | 视频一区 视频二区 视频三区 视频四区 国产 | 婷婷黄色网 | 91最新在线 | 国产va在线观看免费 | 波多野结衣丝袜 | 黑人大战亚洲人精品一区 | 国产精品久久久久久av | 91亚洲国产成人精品一区二区三 | va婷婷 | 亚洲精品久久区二区三区蜜桃臀 | 国产精品久久久久久久久久久久午 | 亚洲国产成人一区二区在线 | 久久99热这里只频精品6 | 蜜桃国精产品二三三区视频 | 国产成人无码av一区二区在线观看 | 日韩视频一区在线 | 中文在线а√天堂官网 | 999精品国产 | 性与爱午夜视频免费看 | 51区成人一码二码三码是什么 | 成人免费视频免费观看 | 国产精品成人免费视频 | 日本阿v视频 | 国内外成人免费视频 | 全村肉体暴力强伦轩np小说 | 免费一级淫片aaa片毛片a级 | 天海翼一区二区三区 | 日韩精品在线免费 | 看一级黄色毛片 | 黑人巨大精品欧美一区二区 | 黄色一级免费视频 | 成人精品影视 | 综合国产一区 | 字幕网在线 | 欧美日韩综合一区二区三区 | 丰满白嫩欧洲美女图片 | 三浦理惠子av在线播放 | 人人草视频在线观看 | 精品一区二区三区久久久 | 天堂中文在线8 | 欧美日韩精品一区二区在线视频 | 免费观看一级淫片 | 182tv成人福利视频免费看 | 99国产精品99久久久久久娜娜 | 人人澡人人添人人爽一区二区 | 蜜臀av无码一区二区三区 | 男女性动态激烈动全过程 | 蜜乳av中文 | 日韩啊v| 欧美另类极品videosbest使用方法 | 99蜜桃臀精品视频在线观看 | 日韩综合色 | 九九视频九九热 | 久激情内射婷内射蜜桃 | 99精品国产99久久久久久51 | 鲁一鲁av2019在线 | 久久视频一区二区 | 日日鲁鲁夜夜狼狼视频 | 国产婷婷久久 | 亚洲欧美www | 性网| 激情 欧美 偷拍 | 老牛嫩草一区二区三区眼镜 | 熟妇人妻久久中文字幕 | 亚洲欧美日韩成人一区 | 中文字幕永久免费 | 在线播放www | 欧美精品久久久久久久 | 午夜片在线观看 | 国产伦精品一区二区三区视频我 | 亚洲精品久久久久玩吗 | 国产亚洲人成在线播放 | 亚洲国产精品久久网午夜 | 日韩v欧美v日本v亚洲v国产v | www国产成人免费观看视频,深夜成人网 | 综合色九九 | 亚洲天堂中文 | 一级视频片 | 国产一级理论 | 日本不卡高字幕在线2019 | 蜜臀久久精品 | 熟妇高潮一区二区三区 | 国产寡妇色xxⅹ交肉视频 | 亚洲欧洲国产精品 | 国产精品夜夜 | 91香蕉在线视频 | 国产精品免费久久久久软件 | 国产大片一区 | 久久久精品视频一区二区三区 | 伊人开心网 | 少妇吹潮| 色婷婷激婷婷深爱五月 | 久久99热这里只有精品 | 白俄罗斯毛片 | 亚洲av成人精品毛片 | 一区视频免费观看 | 亚洲高清偷拍一区二区三区 | 日韩内射美女人妻一区二区三区 | 人妻无码一区二区三区四区 | 日韩在线观看中文字幕 | 毛片色毛片18毛片美女 | 九一精品在线 | sodjav成人网 | 五月激情综合网 | 国产欧美一区二区三区在线 | 日韩av在线免费观看 | 黄色福利片 | 99黄色网 | 精品xxxxx | 欧美成人三区 | 亚洲综合精品香蕉久久网 | 久久久久免费 | 久久天天东北熟女毛茸茸 | 91爱爱中文字幕 | 天天做天天爽 | 亚洲v日韩v综合v精品v | 韩国少妇bbb毛毛片 韩国少妇xxxx搡xxxx搡 | jizzjizz免费 | 水蜜桃一二三区 | 欧美在线brazzers免费视频 | 久久日本三级香港三级456 | 久久久在线 | 香蕉久久精品日日躁夜夜躁夏 | 无码人妻精品一区二区三区9厂 | 中文字幕乱码一区av久久不卡 | 亚洲天堂日韩精品 | 久久久久久久久久久久中文字幕 | 国精产品一区一区三区视频 | 精品国产精品三级精品av网址 | 97视频在线免费观看 | 中文字幕乱码亚洲精品一区 | 四虎国产精品成人免费4hu | xxxx少妇高潮毛片新婚之夜 | 亚洲vs天堂 | 日日摸夜夜添夜夜添亚洲女人 | 国产午夜精品久久久久久 | 韩日午夜在线资源一区二区 | www.日| 优优色综合| 免费专区丝袜调教视频 | 在线观看国产黄 | 高清不卡毛片 | 操夜夜| 国产在线无码视频一区二区三区 | 国产成人综合久久精品免费 | 天天影视色香欲综合久久 | 91av视频网站 | 亚洲成a v人片在线观看 | 夜夜撸网站| 欧美成人免费观看全部 | 日本久久久一区二区三区 | 成人777| 天使萌一区二区三区免费观看 | 午夜免费精品 | 免费视频91蜜桃 | 日韩精品久久久久影视的特点 | 91久久精品日日躁夜夜躁欧美 | 少妇人妻一级a毛片 | 国产精品久久久久久久成人午夜 | 日本少妇呻吟高潮免费看 | 日韩精品久久久久久久的张开腿让 | 国产艳妇av视国产精选av一区 | 精品国产一区二区三区久久影院 | 东京干手机福利视频 | 在线观看wwww | 麻豆文化传媒精品一区观看 | 久久精品日产第一区二区三区 | 午夜男人天堂 | 无码av动漫精品一区二区免费 | 7777日本精品一区二区三区 | 熟女无套内射线观56 | 成人看片17c.com | 99亚洲精品 | 国产a在亚洲线播放 | 欧美美女啪啪 | 99久久这里只有精品 | 夜夜操夜夜骑 | 国产精彩视频在线 | 午夜精品av| 国产精品第十页 | av黄色一级片 | 天堂少妇 | 天堂久久一区 | 天天躁日日躁狠狠躁800凹凸 | 日本高清视频www | 亚洲视频一区二区三区 | 欧美成人猛片aaaaaaa | 日本精品婷婷久久爽一下 | 久久国产精品久久w女人spa | 成人高清免费观看mv | 免费黄色短片 | 人妻少妇乱子伦精品无码专区电影 | 日韩三级视频 | 午夜免费网站 | 精品亚洲成a人片在线观看 国产精品视频二区不卡 | 99热在线这里只有精品 | 中国美女牲交视频 | 日韩欧美精品一区二区 | 肉色超薄丝袜脚交一区二区蜜av | 欧美无遮挡很黄裸交视频 | 亚洲欧美另类久久久精品 | 欧美乱妇狂野欧美在线视频 | 精品视频久久久久久 | 日本三级播放 | 亚洲综合免费 | 欧美一级黄色毛片 | 国产精品成人亚洲一区二区 | 四虎永久在线精品免费观看网站 | 国产 欧美 日韩 | 在线免费看mv的网站入口 | 自拍偷拍视频网站 | 国产亲子乱弄免费视频 | 成人xx视频 | 久久一区| 夜夜高潮夜夜爽高清完整版1 | 56国语精品自产拍在线观看 | 欧美性色黄大片www喷水 | 四虎永久在线精品免费一区二区 | 国产精品一区二区久久精品爱微奶 | 免费看黄网站在线 | 色偷偷av男人的天堂 | 亚洲伦理99热久久 | 乱短篇艳辣500篇h文最新章节 | 欧美在线看片 | 国产黄色在线免费观看 | 日本伊人色综合网 | 不卡福利视频 | 亚洲欧洲成人av每日更新 | 天天色综合天天色 | 污视频在线免费观看 | 亚洲日韩一区二区三区 | 对白刺激国语子与伦 | 亚洲欧美成人aⅴ大片 | 摸少妇的奶她呻吟不断爽视频 | 一区二区欧美在线 | 午夜a级片 | 免费在线观看黄 | 屁股夹体温计调教play | 国产精品女上位好爽在线观看 | www天天色 | 欧美一区二区三区大片 | 艳妇乳肉豪妇荡乳在线观看 | 亚洲色欲久久久久综合网 | 视频一区二区免费 | 亚洲少妇激情 | 三级网址在线 | 一本到亚洲网 | 国自产拍偷拍精品 | 国产肉体xxxx裸体137大胆 | 亚洲欧美在线播放 | jiz亚洲 | 日韩中文字幕2019 | 欧美三日本三级少妇三2023 | 国产乱人偷精品免费视频 | 欧美精品国产综合久久 | 中文字幕日韩一区二区三区不卡 | 亚洲精品一区av在线播放 | 久久中文免费视频 | 18禁无遮挡免费视频网站 | 日日摸夜夜添夜夜添一区二区 | 亚洲精品二区 | av岬奈奈美一区二区三区 | 麻豆av在线免费观看 | 国产女精品视频网站免费 | 无码人妻一区二区三区线 | 非洲人成免费视频 | 色视频网址 | 日本免费一区二区三区视频观看 | 熟女视频一区二区在线观看 | 国产又粗又猛又爽又黄的视频免费 | 亚洲成人网络 | 亚洲精品国产拍在线 | 狍与女人做爰毛片 | 亚洲成人精品视频 | h中文字幕| 美女爆吸乳羞羞免费网站妖精 | 国产免费网站在线观看 | 欧美性猛交ⅹxx乱大交 | xxxxx在线观看 |