国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

實(shí)踐教程 | 淺談 PyTorch 中的 tensor 及使用

共 9542字,需瀏覽 20分鐘

 ·

2021-12-18 21:32

↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

作者 | xiaopl@知乎(已授權(quán))

來源 | https://zhuanlan.zhihu.com/p/67184419?

編輯 | 極市平臺(tái)

極市導(dǎo)讀

?

本文圍繞 PyTorch 中的 tensor 展開,討論了張量的求導(dǎo)機(jī)制,在不同設(shè)備之間的轉(zhuǎn)換,神經(jīng)網(wǎng)絡(luò)中權(quán)重的更新等內(nèi)容。受眾是使用過 PyTorch 一段時(shí)間的用戶。?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

本文主要圍繞 PyTorch 中的 tensor 展開,討論了張量的求導(dǎo)機(jī)制,在不同設(shè)備之間的轉(zhuǎn)換,神經(jīng)網(wǎng)絡(luò)中權(quán)重的更新等內(nèi)容。受眾群是使用過 PyTorch 一段時(shí)間的用戶。本文中的代碼例子基于 Python 3 和 PyTorch 1.1,如果文章中有錯(cuò)誤或者沒有說明白的地方,歡迎在評(píng)論區(qū)指正和討論。

文章具體內(nèi)容分為以下6個(gè)部分:

  1. tensor.requires_grad
  2. torch.no_grad()
  3. 反向傳播及網(wǎng)絡(luò)的更新
  4. tensor.detach()
  5. CPU and GPU
  6. tensor.item

1. requires_grad

當(dāng)我們創(chuàng)建一個(gè)張量 (tensor) 的時(shí)候,如果沒有特殊指定的話,那么這個(gè)張量是默認(rèn)是不需要求導(dǎo)的。我們可以通過 tensor.requires_grad 來檢查一個(gè)張量是否需要求導(dǎo)。

在張量間的計(jì)算過程中,如果在所有輸入中,有一個(gè)輸入需要求導(dǎo),那么輸出一定會(huì)需要求導(dǎo);相反,只有當(dāng)所有輸入都不需要求導(dǎo)的時(shí)候,輸出才會(huì)不需要。

舉一個(gè)比較簡(jiǎn)單的例子,比如我們?cè)谟?xùn)練一個(gè)網(wǎng)絡(luò)的時(shí)候,我們從 DataLoader 中讀取出來的一個(gè) mini-batch的數(shù)據(jù),這些輸入默認(rèn)是不需要求導(dǎo)的,其次,網(wǎng)絡(luò)的輸出我們沒有特意指明需要求導(dǎo)吧,Ground Truth 我們也沒有特意設(shè)置需要求導(dǎo)吧。這么一想,哇,那我之前的那些 loss 咋還能自動(dòng)求導(dǎo)呢?其實(shí)原因就是上邊那條規(guī)則,雖然輸入的訓(xùn)練數(shù)據(jù)是默認(rèn)不求導(dǎo)的,但是,我們的 model 中的所有參數(shù),它默認(rèn)是求導(dǎo)的,這么一來,其中只要有一個(gè)需要求導(dǎo),那么輸出的網(wǎng)絡(luò)結(jié)果必定也會(huì)需要求的。來看個(gè)實(shí)例:

input?=?torch.randn(8,?3,?50,?100)
print(input.requires_grad)
#?False

net?=?nn.Sequential(nn.Conv2d(3,?16,?3,?1),
????????????????????nn.Conv2d(16,?32,?3,?1))
for?param?in?net.named_parameters():
????print(param[0],?param[1].requires_grad)
#?0.weight?True
#?0.bias?True
#?1.weight?True
#?1.bias?True

output?=?net(input)
print(output.requires_grad)
#?True

誠(chéng)不欺我!但是,大家請(qǐng)注意前邊只是舉個(gè)例子來說明。在寫代碼的過程中,不要把網(wǎng)絡(luò)的輸入和 Ground Truth 的 requires_grad 設(shè)置為 True。雖然這樣設(shè)置不會(huì)影響反向傳播,但是需要額外計(jì)算網(wǎng)絡(luò)的輸入和 Ground Truth 的導(dǎo)數(shù),增大了計(jì)算量和內(nèi)存占用不說,這些計(jì)算出來的導(dǎo)數(shù)結(jié)果也沒啥用。因?yàn)槲覀冎恍枰窠?jīng)網(wǎng)絡(luò)中的參數(shù)的導(dǎo)數(shù),用來更新網(wǎng)絡(luò),其余的導(dǎo)數(shù)都不需要。

好了,有個(gè)這個(gè)例子做鋪墊,那么我們來得寸進(jìn)尺一下。我們?cè)囋嚢丫W(wǎng)絡(luò)參數(shù)的 requires_grad 設(shè)置為 False 會(huì)怎么樣,同樣的網(wǎng)絡(luò):

input?=?torch.randn(8,?3,?50,?100)
print(input.requires_grad)
#?False

net?=?nn.Sequential(nn.Conv2d(3,?16,?3,?1),
????????????????????nn.Conv2d(16,?32,?3,?1))
for?param?in?net.named_parameters():
????param[1].requires_grad?=?False
????print(param[0],?param[1].requires_grad)
#?0.weight?False
#?0.bias?False
#?1.weight?False
#?1.bias?False

output?=?net(input)
print(output.requires_grad)
#?False

這樣有什么用處?用處大了。我們可以通過這種方法,在訓(xùn)練的過程中凍結(jié)部分網(wǎng)絡(luò),讓這些層的參數(shù)不再更新,這在遷移學(xué)習(xí)中很有用處。我們來看一個(gè)【Tutorial—FINETUNING TORCHVISION MODELS】https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html%23initialize-and-reshape-the-networks 給的例子:

model?=?torchvision.models.resnet18(pretrained=True)
for?param?in?model.parameters():
????param.requires_grad?=?False

#?用一個(gè)新的?fc?層來取代之前的全連接層
#?因?yàn)樾聵?gòu)建的?fc?層的參數(shù)默認(rèn)?requires_grad=True
model.fc?=?nn.Linear(512,?100)

#?只更新?fc?層的參數(shù)
optimizer?=?optim.SGD(model.fc.parameters(),?lr=1e-2,?momentum=0.9)

#?通過這樣,我們就凍結(jié)了?resnet?前邊的所有層,
#?在訓(xùn)練過程中只更新最后的 fc 層中的參數(shù)。

2. torch.no_grad()

當(dāng)我們?cè)谧?evaluating 的時(shí)候(不需要計(jì)算導(dǎo)數(shù)),我們可以將推斷(inference)的代碼包裹在 with torch.no_grad(): 之中,以達(dá)到暫時(shí)不追蹤網(wǎng)絡(luò)參數(shù)中的導(dǎo)數(shù)的目的,總之是為了減少可能存在的計(jì)算和內(nèi)存消耗???https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradients 給出的例子:

x?=?torch.randn(3,?requires_grad?=?True)
print(x.requires_grad)
#?True
print((x?**?2).requires_grad)
#?True

with?torch.no_grad():
????print((x?**?2).requires_grad)
????#?False

print((x?**?2).requires_grad)
#?True

3. 反向傳播及網(wǎng)絡(luò)的更新

這部分我們比較簡(jiǎn)單地講一講,有了網(wǎng)絡(luò)輸出之后,我們?cè)趺锤鶕?jù)這個(gè)結(jié)果來更新我們的網(wǎng)絡(luò)參數(shù)呢。我們以一個(gè)非常簡(jiǎn)單的自定義網(wǎng)絡(luò)來講解這個(gè)問題,這個(gè)網(wǎng)絡(luò)包含2個(gè)卷積層,1個(gè)全連接層,輸出的結(jié)果是20維的,類似分類問題中我們一共有20個(gè)類別,網(wǎng)絡(luò)如下:

class?Simple(nn.Module):
????def?__init__(self):
????????super().__init__()
????????self.conv1?=?nn.Conv2d(3,?16,?3,?1,?padding=1,?bias=False)
????????self.conv2?=?nn.Conv2d(16,?32,?3,?1,?padding=1,?bias=False)
????????self.linear?=?nn.Linear(32*10*10,?20,?bias=False)

????def?forward(self,?x):
????????x?=?self.conv1(x)
????????x?=?self.conv2(x)
????????x?=?self.linear(x.view(x.size(0),?-1))
????????return?x

接下來我們用這個(gè)網(wǎng)絡(luò),來研究一下整個(gè)網(wǎng)絡(luò)更新的流程:

#?創(chuàng)建一個(gè)很簡(jiǎn)單的網(wǎng)絡(luò):兩個(gè)卷積層,一個(gè)全連接層
model?=?Simple()
#?為了方便觀察數(shù)據(jù)變化,把所有網(wǎng)絡(luò)參數(shù)都初始化為?0.1
for?m?in?model.parameters():
????m.data.fill_(0.1)

criterion?=?nn.CrossEntropyLoss()
optimizer?=?torch.optim.SGD(model.parameters(),?lr=1.0)

model.train()
#?模擬輸入8個(gè)?sample,每個(gè)的大小是?10x10,
#?值都初始化為1,讓每次輸出結(jié)果都固定,方便觀察
images?=?torch.ones(8,?3,?10,?10)
targets?=?torch.ones(8,?dtype=torch.long)

output?=?model(images)
print(output.shape)
#?torch.Size([8,?20])

loss?=?criterion(output,?targets)

print(model.conv1.weight.grad)
#?None
loss.backward()
print(model.conv1.weight.grad[0][0][0])
#?tensor([-0.0782,?-0.0842,?-0.0782])
#?通過一次反向傳播,計(jì)算出網(wǎng)絡(luò)參數(shù)的導(dǎo)數(shù),
#?因?yàn)槠颍覀冎挥^察一小部分結(jié)果

print(model.conv1.weight[0][0][0])
#?tensor([0.1000,?0.1000,?0.1000],?grad_fn=)
#?我們知道網(wǎng)絡(luò)參數(shù)的值一開始都初始化為?0.1?的

optimizer.step()
print(model.conv1.weight[0][0][0])
#?tensor([0.1782,?0.1842,?0.1782],?grad_fn=)
#?回想剛才我們?cè)O(shè)置?learning?rate?為?1,這樣,
#?更新后的結(jié)果,正好是?(原始權(quán)重?-?求導(dǎo)結(jié)果)?!

optimizer.zero_grad()
print(model.conv1.weight.grad[0][0][0])
#?tensor([0.,?0.,?0.])
#?每次更新完權(quán)重之后,我們記得要把導(dǎo)數(shù)清零啊,
#?不然下次會(huì)得到一個(gè)和上次計(jì)算一起累加的結(jié)果。
#?當(dāng)然,zero_grad()?的位置,可以放到前邊去,
#?只要保證在計(jì)算導(dǎo)數(shù)前,參數(shù)的導(dǎo)數(shù)是清零的就好。

這里,我們多提一句,我們把整個(gè)網(wǎng)絡(luò)參數(shù)的值都傳到 optimizer 里面了,這種情況下我們調(diào)用 model.zero_grad(),效果是和 optimizer.zero_grad() 一樣的。這個(gè)知道就好,建議大家堅(jiān)持用 optimizer.zero_grad()。我們現(xiàn)在來看一下如果沒有調(diào)用 zero_grad(),會(huì)怎么樣吧:

#?...
#?代碼和之前一樣
model.train()

#?第一輪
images?=?torch.ones(8,?3,?10,?10)
targets?=?torch.ones(8,?dtype=torch.long)

output?=?model(images)
loss?=?criterion(output,?targets)
loss.backward()
print(model.conv1.weight.grad[0][0][0])
#?tensor([-0.0782,?-0.0842,?-0.0782])

#?第二輪
output?=?model(images)
loss?=?criterion(output,?targets)
loss.backward()
print(model.conv1.weight.grad[0][0][0])
#?tensor([-0.1564,?-0.1684,?-0.1564])

我們可以看到,第二次的結(jié)果正好是第一次的2倍。第一次結(jié)束之后,因?yàn)槲覀儧]有更新網(wǎng)絡(luò)權(quán)重,所以第二次反向傳播的求導(dǎo)結(jié)果和第一次結(jié)果一樣,加上上次我們沒有將 loss 清零,所以結(jié)果正好是2倍。另外大家可以看一下這個(gè)博客 【torch 代碼解析為什么要使用 optimizer.zero_grad()】https://blog.csdn.net/scut_salmon/article/details/82414730,我覺得講得很好。

4. tensor.detach()

接下來我們來探討兩個(gè) 0.4.0 版本更新產(chǎn)生的遺留問題。第一個(gè),[tensor.data]()tensor.detach()。

在 0.4.0 版本以前,.data 是用來取 Variable 中的 tensor 的,但是之后 Variable 被取消,.data 卻留了下來。現(xiàn)在我們調(diào)用 tensor.data,可以得到 tensor的數(shù)據(jù) + requires_grad=False 的版本,而且二者共享儲(chǔ)存空間,也就是如果修改其中一個(gè),另一個(gè)也會(huì)變。因?yàn)?PyTorch 的自動(dòng)求導(dǎo)系統(tǒng)不會(huì)追蹤 tensor.data 的變化,所以使用它的話可能會(huì)導(dǎo)致求導(dǎo)結(jié)果出錯(cuò)。官方建議使用 tensor.detach() 來替代它,二者作用相似,但是 detach 會(huì)被自動(dòng)求導(dǎo)系統(tǒng)追蹤,使用起來很安全。多說無益,我們來看個(gè)例子吧:

a?=?torch.tensor([7.,?0,?0],?requires_grad=True)
b?=?a?+?2
print(b)
#?tensor([9.,?2.,?2.],?grad_fn=)

loss?=?torch.mean(b?*?b)

b_?=?b.detach()
b_.zero_()
print(b)
#?tensor([0.,?0.,?0.],?grad_fn=)
#?儲(chǔ)存空間共享,修改?b_?,?b?的值也變了

loss.backward()
#?RuntimeError:?one?of?the?variables?needed?for?gradient?computation?has?been?modified?by?an?inplace?operation

這個(gè)例子中,b 是用來計(jì)算 loss 的一個(gè)變量,我們?cè)谟?jì)算完 loss 之后,進(jìn)行反向傳播之前,修改 b 的值。這么做會(huì)導(dǎo)致相關(guān)的導(dǎo)數(shù)的計(jì)算結(jié)果錯(cuò)誤,因?yàn)槲覀冊(cè)谟?jì)算導(dǎo)數(shù)的過程中還會(huì)用到 b 的值,但是它已經(jīng)變了(和正向傳播過程中的值不一樣了)。在這種情況下,PyTorch 選擇報(bào)錯(cuò)來提醒我們。但是,如果我們使用 tensor.data 的時(shí)候,結(jié)果是這樣的:

a?=?torch.tensor([7.,?0,?0],?requires_grad=True)
b?=?a?+?2
print(b)
#?tensor([9.,?2.,?2.],?grad_fn=)

loss?=?torch.mean(b?*?b)

b_?=?b.data
b_.zero_()
print(b)
#?tensor([0.,?0.,?0.],?grad_fn=)

loss.backward()

print(a.grad)
#?tensor([0.,?0.,?0.])

#?其實(shí)正確的結(jié)果應(yīng)該是:
#?tensor([6.0000,?1.3333,?1.3333])

這個(gè)導(dǎo)數(shù)計(jì)算的結(jié)果明顯是錯(cuò)的,但沒有任何提醒,之后再 Debug 會(huì)非常痛苦。所以,建議大家都用 tensor.detach() 啊。上邊這個(gè)代碼例子是受 https://github.com/pytorch/pytorch/issues/6990 啟發(fā)。

5. CPU and GPU

接下來我們來說另一個(gè)問題,是關(guān)于 [tensor.cuda]()()tensor.to(device) 的。后者是 0.4.0 版本之后后添加的,當(dāng) device 是 GPU 的時(shí)候,這兩者并沒有區(qū)別。那為什么要在新版本增加后者這個(gè)表達(dá)呢,是因?yàn)橛辛怂覀冎苯釉诖a最上邊加一句話指定 device ,后面的代碼直接用to(device) 就可以了:

device?=?torch.device("cuda")?if?torch.cuda.is_available()?else?torch.device("cpu")

a?=?torch.rand([3,3]).to(device)
#?干其他的活
b?=?torch.rand([3,3]).to(device)
#?干其他的活
c?=?torch.rand([3,3]).to(device)

而之前版本的話,當(dāng)我們每次在不同設(shè)備之間切換的時(shí)候,每次都要用 if cuda.is_available() 判斷能否使用 GPU,很麻煩。這個(gè)精彩的解釋來自于?https://stackoverflow.com/questions/53331247/pytorch-0-4-0-there-are-three-ways-to-create-tensors-on-cuda-device-is-there-s 。

if?torch.cuda.is_available():
????a?=?torch.rand([3,3]).cuda()
#?干其他的活
if??torch.cuda.is_available():
????b?=?torch.rand([3,3]).cuda()
#?干其他的活
if??torch.cuda.is_available():
????c?=?torch.rand([3,3]).cuda()

關(guān)于使用 GPU 還有一個(gè)點(diǎn),在我們想把 GPU tensor 轉(zhuǎn)換成 Numpy 變量的時(shí)候,需要先將 tensor 轉(zhuǎn)換到 CPU 中去,因?yàn)?Numpy 是 CPU-only 的。其次,如果 tensor 需要求導(dǎo)的話,還需要加一步 detach,再轉(zhuǎn)成 Numpy 。例子如下:

x??=?torch.rand([3,3],?device='cuda')
x_?=?x.cpu().numpy()

y??=?torch.rand([3,3],?requires_grad=True,?device='cuda').
y_?=?y.cpu().detach().numpy()
#?y_?=?y.detach().cpu().numpy()?也可以
#?二者好像差別不大?我們來比比時(shí)間:
start_t?=?time.time()
for?i?in?range(10000):
????y_?=?y.cpu().detach().numpy()
print(time.time()?-?start_t)
#?1.1049120426177979

start_t?=?time.time()
for?i?in?range(10000):
????y_?=?y.detach().cpu().numpy()
print(time.time()?-?start_t)
#?1.115112543106079
#?時(shí)間差別不是很大,當(dāng)然,這個(gè)速度差別可能和電腦配置
#?(比如 GPU 很貴,CPU 卻很爛)有關(guān)。

6. tensor.item()

我們?cè)谔崛?loss 的純數(shù)值的時(shí)候,常常會(huì)用到 loss.item(),其返回值是一個(gè) Python 數(shù)值 (python number)。不像從 tensor 轉(zhuǎn)到 numpy (需要考慮 tensor 是在 cpu,還是 gpu,需不需要求導(dǎo)),無論什么情況,都直接使用 item() 就完事了。如果需要從 gpu 轉(zhuǎn)到 cpu 的話,PyTorch 會(huì)自動(dòng)幫你處理。

但注意 item() 只適用于 tensor 只包含一個(gè)元素的時(shí)候。因?yàn)榇蠖鄶?shù)情況下我們的 loss 就只有一個(gè)元素,所以就經(jīng)常會(huì)用到 loss.item()。如果想把含多個(gè)元素的 tensor 轉(zhuǎn)換成 Python list 的話,要使用 [tensor.tolist]()()。

x??=?torch.randn(1,?requires_grad=True,?device='cuda')
print(x)
#?tensor([-0.4717],?device='cuda:0',?requires_grad=True)

y?=?x.item()
print(y,?type(y))
#?-0.4717346727848053?

x?=?torch.randn([2,?2])
y?=?x.tolist()
print(y)
#?[[-1.3069953918457031,?-0.2710231840610504],?[-1.26217520236969,?0.5559719800949097]]

結(jié)語

以上內(nèi)容就是我平時(shí)在寫代碼的時(shí)候,覺得需要注意的地方。文章中用了一些簡(jiǎn)單的代碼作為例子,旨在幫助大家理解。文章內(nèi)容不少,看到這里的大家都辛苦了,感謝閱讀。

最后還是那句話,希望本文能對(duì)大家學(xué)習(xí)和理解 PyTorch 有所幫助。

參考

  1. 【PyTorch Docs: AUTOGRAD MECHANICS】https://pytorch.org/docs/stable/notes/autograd.html
  2. 【PyTorch 0.4.0 release notes】https://github.com/pytorch/pytorch/releases/tag/v0.4.0

如果覺得有用,就請(qǐng)分享到朋友圈吧!


△點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨

公眾號(hào)后臺(tái)回復(fù)“transformer”獲取最新Transformer綜述論文下載~


極市干貨
課程/比賽:珠港澳人工智能算法大賽保姆級(jí)零基礎(chǔ)人工智能教程
算法trick目標(biāo)檢測(cè)比賽中的tricks集錦從39個(gè)kaggle競(jìng)賽中總結(jié)出來的圖像分割的Tips和Tricks
技術(shù)綜述:一文弄懂各種loss function工業(yè)圖像異常檢測(cè)最新研究總結(jié)(2019-2020)


#?CV技術(shù)社群邀請(qǐng)函?#

△長(zhǎng)按添加極市小助手
添加極市小助手微信(ID : cvmart4)

備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)


即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~



覺得有用麻煩給個(gè)在看啦~??
瀏覽 87
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 精品视频999| 黄色电影视频网站| 天天干夜夜操| 中文字幕高清免费看| 污视频免费在线观看| 毛片三级片| 亚洲无码视频在线免费观看| 亚洲第一a| 韩国深夜福利视频| 日韩欧美中文字幕在线观看| 豆花视频logo进入官网| 亚洲无码91| 色五月欧美| 一級免費网站| 丁香六月婷婷| 91中文字幕在线| 欧美八区| 久久午夜一级A片| 在线视频A| 伊人黄色网| 中文字幕乱妇无码Av在线| 福利视频二区| 色情一级AA片免费观看| 久久国产精品99久久人人澡 | 国产精品无码不卡| 老司机免费视频| HEZ-502搭讪绝品人妻系列 | 人妻AV无码| 成人A∨| 99天堂网| 2019中文字幕mv第三季歌词| 特级毛片AAAAAA蜜桃| 日韩欧美中文| 一区二区三区欧美| 日韩毛片视频| 黄色大片在线免费观看| 亚州无码视频| 熟妇人妻中文AV| 高清无码波多野结衣| 操逼福利视频| 99久久99久久精品免费看小说。 | 99久久性爱| 国产成人三级片在线观看| 蜜桃视频网站在线观看| 一本色道精品久久一区二区三区| 中文字幕人妻精品一区| 美日韩视频欧美一区二区视频 | 淫荡人妻视频| 人人操人人操人人操人人| 人操人妻| 可以免费看av的网站| 日韩欧美人妻无码精品| 中文字幕乱码在线| 无码在线播放观看| 性欧美丰满熟妇XXXX性久久久 | 亚洲精品三级在线观看| 久久人操| 草逼美女| 无码AV高清| 天堂素人约啪| 激情AV在线观看| 久久午夜无码鲁丝片午夜精品| 久热伊人| 免费黄色电影在线观看| 嫩操影院| 亚洲无码免费看| 婷婷久久综合久色| 国产黄色自拍视频| 国产精品毛片久久久久久久| 亚洲一区二区成人网站戴套| 无码一级片| 91无码精品| 伊人色五月| 精品小视频| 国产女18毛片多18精品| 青娱乐偷拍| 中文字幕视频在线| 91麻豆成人| 久久av一区二区三区| 欧美人人操| 三级av在线| 三级片中文字幕| 亚洲欧美视频在线观看| 色情视频在线观看| 99视频网站| 91人妻无码| 樱桃av| 在线看A片| 精品秘无码一区二区三区老师| 亚洲AV网站| 国产精品成人电影| 国产高清自拍| 女人的天堂AV在线观看| 尤物一区二区| 91在线看18| 嫩BBB搡BBBB搡BBBB| 黄色成年人视频在线观看| 日韩三级麻豆| 成人手机在线视频| 夜夜撸天天操| 风流老熟女一区二区三区| 婷婷五月中文| 久久免费视频6| 亚洲在线一区| 中文字幕2025年最好看电视剧| 天天做夜夜操| 日韩熟妇无码中文字幕| H片在线免费观看| 日本草逼| 99久久99| 蜜桃一区二区中午字幕| 亚洲AV无码久| 91在线成人视频| jizz18日本| 在线国产激情视频| 中文字幕中文| 免费在线观看视频黄| 性无码一区二区三区在线观看| 一区二区三区四区在线播放| 国产17c精品视频一二三区| 久久久无码精品亚洲| 一级A片60分钟免费看| 激情婷婷五月| 台湾无码| 青吴乐大香蕉| 亚洲美女网站| 黄色国产视频在线观看| 爱草在线| 国产欧美日韩一区二区三区| 国产一级A片久久久免费看快餐 | 色色色色综合| 日本成人网址| 99热热久久| AV无码网站| 成人无码专区| 成人做爰100片免费-百度| 欧美一道本在线| 午夜一级| 操屄在线观看| 麻豆黄色| 国产亲子乱XXXXinin| 伊人久久艹| 天天做天天爱| 强伦轩人妻一区二区三区最新版本更新内容 | 国产婷婷久久Av免费高清| 日色色色| 西西人体444www| 后入av| 无码人妻A片一区二区青苹果| 丰满人妻无码| 在线永久看片免费的视频| 大色欧美| 男女啪网| 99r6热只有精品免费观看| 自拍欧美亚洲| 婷婷丁香五月亚洲| 国产精品国产三级国产专业不| 欧美群交在线| 波多野结衣av在线| 欧美男人天堂网| 久久亚洲一区| AV福利在线观看| 一级片久久| 韩国无码免费| 日韩23岁观看| 伊人黄色网| 成人午夜啪免费视频在线观看软件 | 日批网站在线| 蜜桃视频网址| 国产黄片网站| 少妇一区二区三区| 免费观看一级A片| 啪啪网站免费看| 亚洲人成人无码一区二区三区| 国产精品乱子伦视频一区二区 | 欧美一区三区视频z| 欧美香蕉在线| 91亚洲精选| 俺去俺来也www色官网cms| 天天插天天插| 特黄特色免费大片| 欧美色图色就是色| 久热亚洲| 久草免费电影| 男人天堂影院| 特级西西444WWW高清大视频 | 91性爱嫩逼视频| 国产波霸爆乳一区二区| 国产又爽又黄免费网站在| 你懂的网址在线观看| 亚洲成人不卡| 99精品在线观看视频| 囯产精品久久久久久久久久| 精品人妻一二三区| 欧美精品网| 成人网站无码| 狠狠婷婷| 北条麻妃无码| jizz在线观看免费视频| 免费观看在线无码视频| 国产看片网站| 久久福利导航| 91人妻人人澡人人爽人人精品一 | 午夜福利区| 乱子伦国产精品一区二区| 水蜜桃一区| 欧美特级毛片| 一级片AV| 东北老女人操逼视频| 丁香五月天视频| 手机看片福利永久| 日韩無码专区| 国产乱子伦精品免费,| 国产激情无码视频| 麻豆精品国产| 亚洲午夜无码久久久| 色中色在线视频| 91色色色| 久久婷婷无码视频| 99精品无码视频| 东京热视频一区| 嘿咻无码| 久久久久久大香蕉| 亚洲精品无码免费| 特黄AV| 久久你懂的| 欧美日韩久久久| 免费视频在线观看一区| www.199麻豆在线观看网站| 开心五月激情婷婷| 亚洲码无| 在线国产小视频| 中文字幕AV播放| 女人的天堂AV| 99久久久国产精品免费蜜臀| 日韩中文AV| 免费日批网站| 日韩熟妇无码中文字慕| 成人黄色A片| 久久A√一区二区| 日本无码毛片| 国产男女啪啪视频| 黄色电影免费在线观看| 三级毛片网站| 精品欧美一区二区三区久久久| 日本无码中文字幕| 亚洲性爱大全| 色五月婷婷基地| 成人毛片18女人毛片真水| 日本综合在线| 另类老妇videos另类| 日韩三级视频| 欧美午夜电影| 国产91精品在线观看| 丁香五月天婷婷| 在线日韩国产| 一级黄色免费看| 日逼图| 午夜H片| 中文字幕在线播放视频| 成人网站视频在线观看| 日本www视频| 亚洲视频欧美视频| 操逼网页| 日本在线不卡视频| 热久久免费| 日本熟女视频| 欧美色爽| 影音先锋国产资源| 日本无码久久嗯啊流水| 黄网在线观看视频| 欧美性生交18XXXXX无码| 中文字幕12页| 国产91精品看黄网站在线观看| 女人特级毛片18| 亚洲AV无码成人精品区久| 国产在线中文字幕| 佐山爱人妻无码蜜桃| 国产香蕉在线视频| 亚洲久久视频| 热久久最新地址| JLZZJLZZ亚洲女人| 详情:绿帽夫妻多人运动开淫啪-91n | 久久久久亚洲AV成人片乱码| 国产视频一区二区在线观看 | jiujiuav| 午夜无码免费| 热久久免费| 淫荡少妇美红久久久久久久久久| 怡春院综合成人社区| 91在线无码精品秘入口电车| 四虎在线免费视频| 国产最新视频| 亚洲色无码人妻激情| sm国产在线调教视频| 91精品网站| 天天色天天干天天| 色老板视频在线观看| 日韩无码免费视频| 无码国产精品一区二区视频| 免费黄色一级片| 午夜免费福利视频| 亚洲午夜久久久久久久久红桃| 成人免费视频性爱| www.91AV| 一区二区无码视频| 九久热| 欧美成人h| 欧美日韩一区二区三区在线电影| www.豆花视频成人版| 欧美丰满老熟妇XXXXX性| 黄色一级A片| 日韩免费高清无码视频| 中文字幕99页| 久热国产视频| 久久久久亚洲精品| 成人乱无码AV在线观看| 中日韩中文字幕一区二区区别| 日本国产在线观看| 日本成人中文字幕在线观看| 免费黄色一级电影| 无码中文字幕| 影音先锋乱伦| 大香蕉啪啪| 欧美色色视频| 在线视频a| 中文熟女| 亚洲视频日韩在线观看| 国产一级片电影| 国产福利在线播放| 男女一区二区三区| 色五月网| 中文字幕人成人乱| 北条麻妃被躁57分钟视频在线 | 猛男大粗猛爽h男人味| 爆乳尤物一区二区三区| 久久青草影院| 欧美一級黃色A片免費看| 亚洲AV无码成人精品区东京热| 北条麻妃在线一区| 无码免费中文字幕| 草久网| A级黄色网| 成人三级毛片| 強暴人妻一区二区三区| 黄色激情在线| 国产在线观看97| 一级一级一级做a免费一级做a| 老女人操逼网| 天堂а√在线中文在线新版 | 成人免费视频性爱| 国产精品美女久久久久AV爽| www.色老板| 国产精品99精品| 丰满人妻一区二区三区免费| 亚洲国产精品成人综合色五月| 色色播| 青草社区在线观看| 午夜福利91| 天天爽夜夜爽AA片免费| 人妻天天干| 中国最大成人网站| 大鸡吧视频在线观看| 思思精品视频| 欧美日韩一区二区在线| 大香蕉999| 无码观看视频| 国产欧美日韩在线视频| 91在线无码精品秘国产三年| 尿在小sao货里面好不好| 麻豆三级| 国产毛片毛片毛片毛片毛片| 国产一级精品视频| 99久久久国产| 国产色婷婷一区二区| 亚洲激情视频在线观看| 日韩激情一区二区| 最新国产AV| 天天射天天日天天干| 99re久久| av一区在线观看| 91蜜桃视频| 久久成人影音| 午夜成人福利| 国产一級A片免费看| 一区二区三区四区视频| 日本人妻在线视频| 91大神在线资源观看无广告| 在线观看无码av| 亚洲中文字幕播放| 人妻丰满熟妇av无码区| 美女av免费| 岛国AV在线播放| 色综合五月婷婷| 999久久久| 久一在线| 人人妻人人澡人人爽人人欧美一区 | 欧美成人五月天| 自拍偷拍欧美| 国产一级黄色大片| 成人日韩| 国产一在线| 脓肿是什么原因引起的,该怎么治疗| 香蕉国产2023| 99热| 丁香五月网站| 无码小黄片| av先锋资源| 成年人激情网| 少妇免费视频| 免费网站观看www在线观| gogogo高清在线观看免费直播中国| 国产传媒精品| 国产精品成人69| 无码AⅤ一区二区三区| 丁香五月成人网| 国产第四页| 黄色a片视频| 少妇人妻偷人精品无码视频新浪 | 国产精品一卡二卡三卡| av免费在线播放| 人人操超碰在线观看| 18禁黄网站| AV无码免费一区二区三区不卡| 99亚洲欲妇| 最近2021中文字幕免费| 九九香蕉网| 国产啊啊啊| 日韩高清无码毛片| A级视频网| 一区二区三区四区免费| 91久久午夜无码鲁丝片久久人妻 | 91国在线视频| 五月激情视频| 久久大屌| 广西少妇BBwBBwBBw| 青青草精品视频| 一级黄色生活片| 精品国产va久久久久久| 草草久久久无码国产专区的优势| 天天干婷婷五月天| 亚洲AV成人无码网天堂| 色天使视频| 韩日午夜| 青青草精品| 国产一在线| 无码精品一区二区三区在线播放| 国产一区二区视频在线观看| 日本在线网站| 91久| 精品一区二区三区视频| 国产三级成人| 山东wBBBB搡wBBBB| 精品无码人妻一区二区媚黑| 久久久国产一区二区三区| 乱子伦】国产精品| 老师搡BBBB搡BBB| 成人国产精品在线观看| 91人人爱| 99久久9| 99热这里有精品| 国产一二区| 国产精品自在线| 欧美日韩在线免费观看| 一级无码视频| 欧美老熟妇BBBBB搡BBB| 91av在线播放| 99久久99九九九99九他书对| 国产无码自拍偷拍| 肏亚洲美女| 国产黄色视频免费| 免费在线观看无码| 玖玖爱资源站| 日韩人妻精品无码制服| 久久免费视频6| 五月婷婷啪| 狠狠撸在线| 久久九热| 蝌蚪窝在线视频观看| 乱伦五月天| 成年人免费视频在线观看| 成人在线网站| 蜜桃Av噜噜一区二区三区四区| 国产棈品久久久久久久久久九秃 | 九草在线| 国产人妻精品一区二区三区不卡| 麻豆免费成人传媒| 四个熟妇搡BBBB搡BBBB| 亚洲精品自拍视频| 九色PORNY国产成人蝌蚪| 中文日韩在线| japanese在线观看| 亚洲中文字幕播放| 影音先锋男人站| 五月天综合| 青娱乐国产av| 天天天天毛片| 亚洲第一av| 男人资源网| 无套内射在线播放| 永井玛丽亚av无码中出流出| 激情丁香| 中文不卡在线| 久久久久久亚洲AV黄床| 无码视频在线播放| 成人A片免费看| 91久久电影| 亚洲图片中文字幕| 国产午夜视频| 日韩熟妇无码中文字幕| 好吊顶亚洲AV大香蕉色色| 婷婷爱五月天| 无码视频在线| 日韩成人在线免费观看| 欧美成人高清无码| 日本天堂网在线观看| 激情五月天婷婷| 26∪u∪成人网站| 欧美射精视频| 香蕉在线播放| 国产18欠欠欠一区二区| 成人AAA| 亚洲调教| 午夜人妻AV| AA片免费| 亚洲777| 99热在线看| 亚洲A片V一区二区三区| 黄色免费AV| 国产无遮挡又黄又爽在线观看| 欧美精产国品一二三产品在哪买| 在线观看国产一区| 老师搡BBBB搡BBB| 亚洲中文字幕第一| 雾水情缘电影港片| 翔田千里无码XXXXXX| 国产一级片在线| 国产精品久久久久无码AV| 国产精品麻豆视频| 成人在线免费观看视频| 男男做受A片AAAA| 午夜福利视频网| 97久久超碰| 亚洲久久色| 黄片一区| 五月激情综合| 九九精品在线观看| 久9久9久9久9久9久9| 欧美精品秘一区二区三区蜜臀| 亚洲污| 免费在线观看内射| 国产成人精品a区在线观看| 91人人| 日韩高清毛片| 久久综合伊人777777| 91乱| AAA亚洲| 超碰超爽| 国产激情视频在线观看| 91丨国产丨白浆| 欧美视频区| 9999re| 五月丁香六月久久| 欧美专区一区| 国产剧情一区二区| 九七精品| 六月婷婷中文字幕| 大香蕉超碰在线| 色噜噜AV| 无码777| 最新无码视频| 狠狠干在线视频| jjzz亚洲| 国产精品无码天天爽视频| 亚洲熟女av中文字幕| 青青草成人在线观看| 婷婷综合一区| 青青草性爱| 色欲大香蕉| 97精品人妻一区二区三区在线| 久久久网| 日本一级片在线播放| 最新毛片网站〖网:.〗| 国产一级aa| 99久久99久久精品免费看小说。 | 一本色道精品久久一区二区三区| 国产无码一区二区| 天堂在线| 无码福利电影| 丰满人妻一区二区三区精品高 | 欧美性爱一区二区三区| 内射视频免费观看| 麻豆影音先锋| 韩国三级片在线| 欧美AAA黄片| 国产精品一卡二卡三卡| 免费无码| 色天使青青草| 国产福利视频在线观看| www香蕉成人片com| 99色综合| av手机版| 欧美午夜黄片| 成年人免费视频在线观看| av在线三级| 操人在线观看| 久久婷婷青青| 国产A级成人婬片1976| 亚洲AV日韩AV永久无码网站| 免费在线观看黄色视频| 大香蕉一级片| 一本一道AV| 三级无码中文| av在线免费观看网址| 日韩啪啪啪网站| 伊人黄色视频| 亚洲精品白浆高清久久久久久| 在线观看免费黄视频| 四虎在线观看视频| 亚洲草逼视频| 天堂无码| 91成人免费视频| 久久久网站| 国产av天堂| 人妻FrXXeeXXee护士| 丁香五月激情小说| 亚洲激情视频在线观看| 色综合中文字幕| 国产一a毛一a免费观看| 一级免费黄色视频| 亚洲五月丁香婷婷| chinese高潮老女人| 羞羞涩漫无码免费网站入口 | 免费成人高清视频| 动漫一区二区| 国产69精品久久| 你懂得在线视频| 一级a片在线播放| 久久国产一区二区| 中文字幕资源在线| 五月婷婷俺也去| AV在线小说| 99热精品久久| 98无码人妻精品一区二区三区| 久久久久国产一区二区三区四区| 免费看日韩毛片| 国产91视频| 成人性生活视频| 国产成人精品AV| 中文字幕第4页| 青娱乐国产在线| 伊人大香蕉在线观看| 亚洲图片欧美色图| 久久久精品国产| 亚洲黄色无码| 国产美女自慰网站| 福利视频网站| 成人欧美一区二区三区黑人免费| 日韩电影无码| 亚洲无码综合| 影音先锋成人网| 伊人亚洲| 水蜜桃视频网站| 日韩激情无码| 日韩AV在线免费观看| 亚洲综合无码| 青青草av| 成年人在线观看视频| 无码秘蜜桃一区二区| 女人操逼视频| 欧美操逼视频| 亚洲日本三级片| 日本的黄色视频| 日韩在线中文字幕亚洲| 国产av一二三区| 亚洲午夜无码精品专区| 久久系列观看完整指南| 人人爱人人爽人人操| 欧美日韩加勒比| 91麻豆国产在线| 国产精品啪啪啪啪| 日韩欧美91| 欧美日韩一区二区在线| 性爱免费视频网站| 狠狠干狠狠艹| 久久婷婷国产麻豆91天堂| 操学生妹| 囯产精品一区二区三区线一牛影视1 | 91在线精品一区二区| 亚洲AV成人无码精在线| 性爱视频网址| 桃色av| 性感欧美美女| 亚洲成人性爱av| 国产人成视频免费观看| 亚洲一区日韩| 欧美成人乱码一区二区三区| 亚洲日本中文字幕在线| 国产精品女人777777| 黑人一区二区三区四区| 人人超碰在线| 欧美一级欧美三级在线观看| 超碰97免费在线| 久久久久无码精品国产91福利| 亚洲专区中文字幕| 99热都是精品| 国产十八岁在线观看| 亚洲性爱在线观看| 一级A片免费看| 国产精品一麻了麻了| 最新中文字幕观看| 69堂在线观看| 国产精品一区一区三区| 免费日批网站| 乱伦AV片| AV网站免费在线观看| 久久99久久99久久99| 天天日天天射天天操| 国产又粗又长的视频| 国产黄色网| 六月婷| 操久久久久久| 国产精品国内自产| 欧美激情一区二区A片成人牛牛| 五月婷婷综合激情| 亚洲插菊花综合网| 人妻无码一区二区| 亚洲AV无码乱码精| 东京热AV在线| 国产欧美日韩在线| 色青草影院久久综合| 九九九九九九国产| 人妻免费在线视频| 黄色生活片| 一级午夜福利| 日本国产在线观看| 激情丁香| 69超碰| 九九精品12| 成人国产AV网站| 在线日韩国产| 人成无码| 日本综合视频| 中文字幕免费高清在线观看| 日韩AV电影在线观看| 爱操av| 日韩精品成人AV| 91精品少妇高潮一区二区三区不卡 | 大肉大捧一进一出两腿| 国产激情视频| 久久A√一区二区| 99久久亚洲精品日本无码| 97精品人妻一区二区三区香蕉 | 高清av无码| 日韩欧美在线播放| 欧美日韩在线观看一区| 人妻少妇精品视频一区二区三区| 九色91PORNY国产| 日韩精品免费在线观看| av天堂中文在线| 欧美在线综合| 欧美黄片免费| 日韩一区欧美| 97免费在线观看视频| 日本a在线免费观看| 亚洲激情视频在线观看| 亚洲有码在线观看| 亚洲成人网站在线观看| 免费成人国产| 在线播放高清无码| 男人的天堂在线播放| 天堂在线无码| 日日碰狠狠添| 三级电影久久麻豆| 成人黄色一级A片| 五月丁香花视频| 久久99久久99久久99| 97人妻无码一区二区| 日韩黄色电影| 日韩69| 国产激情在线观看视频| 国产女主播在线观看| 91小仙女jK白丝袜呻吟| 日韩A片一级无码免费蜜桃| 操逼电影免费| 特黄无码| 午夜无码高清| 精品国产乱码久久久久久郑州公司| 国产精品久久久久久久久免费无码 | 日韩2区| 天天日天天操天天射| 韩国日本久久| 999在线视频| av无码一区二区| 天天操天天插| 影音先锋成人在线| 日本黄色精品| 亚洲成人在线免费| 日本高清不卡视频| 日韩A片无码ⅩXXXX| 淫乱骚穴| 亚洲视频观看| 九九综合伊人7777777| 91av免费观看| 翔田千里被操120分钟| 特级西西444www| 欧洲一区在线观看| 中文在线字幕高清电视剧| 国产精品久久久久久久久久乐趣播| 中文字幕无码毛片| 91在线免费播放| 探花视频在线观看| 中文字幕日本| 中国少妇| 国产精品美女在线观看| 欧美日一区二区三区| 日屄视频在线观看| 亚洲国产成人自拍| 日韩小视频+国产| 草久网| 尤物视频网址| 欧美熟女一区二区| 91久久久久久久18| 国产成人精品123区免费视频| 蜜桃一区二区三区| 巨爆乳肉感一区二区三区视频| 国产成人网站免费观看| 毛片毛片毛片毛片毛片毛片| 99精品热| 乱伦AV网| 激情婷婷综合| 波多野成人无码精品69| 99美女精品视频| 国产免费AV在线观看| 久久久久精| 欧美老妇性猛交| 黄色a片在线观看| 超碰人妻97| 婷婷六月激情| 成人国产欧美日韩在线视频| 一级免费爱爱| 精品人妻午夜一区二区三区四区| 18禁免费网站| 欧美日韩在线视频免费播放| 色综合久久久无码中文字幕999| 人人干人人摸人人操| 影音先锋无码AV| 永久免费AV| 操B网址| 欧美男女日逼视频| 日日夜夜无码| 影音先锋av资源网站| 99久久综合国产精品二区| 午色婷婷国产无码| 自拍偷拍第一页| 青娱亚洲| 欧美日韩一区在线| 色吊丝中文字幕| 亚洲国产无码在线观看| 在线视频亚洲| 午夜亚洲AV永久无码精品蜜芽 | 精品日韩一区二区三区| 拍拍视频| 婷色五月| 日韩成年视频| 91乱子伦国产乱子伦| 女人一区二区| 特级欧美AAAAAA| 成人免费A片喷| 国产理论片在线观看| 国产jizz| 特黄在线| 不卡a12| 人人操人人摸人人爽| 国产成人精品久久二区二区91| 欧美老妇XX| 中文在线最新版天堂8| 狼友视频第二页| 在线观看一区| 波多野结衣被操| 成人网一区二区| 看国产AA免费| 91成人做爰A片| 91AV视频| 亚洲精品一区二区三区蜜桃| 无限高潮| 成人性生活视频| 波多野结衣高清无码| 国内精品一区二区| 操碰在线| 91黄色片| 国产裸体美女网站| 91无码在线观看| 91日韩欧美| 大香蕉亚洲| 国产一级18片视频| 成人在线视频观看| 波多野结衣AV在线| 特级西西人体444WWw高清大胆| 99这里都是精品|