日韩人妻av在线,92自拍视频在线观看,亚洲一区二区欧美精品,日韩视频一区二区免费在线观看,色噜噜狠狠网站狠狠爱,亚洲午夜性感av,欧美日韩亚洲国内视频,国产免费看av大片的网站吃奶,国产精品美女激情视频

當(dāng)前位置: 首頁 >滾動 > 正文

PyTorch 2簡介:卷積神經(jīng)網(wǎng)絡(luò) 當(dāng)前視點

2023-06-27 11:40:48 來源:維科號

介紹


【資料圖】

在本系列的上一部分中,我們使用了CIFAR-10數(shù)據(jù)集,并介紹了PyTorch的基礎(chǔ)知識:

張量及其相關(guān)操作

數(shù)據(jù)集和數(shù)據(jù)加載器

構(gòu)建基本的神經(jīng)網(wǎng)絡(luò)

基本模型的訓(xùn)練和評估

我們?yōu)镃IFAR-10數(shù)據(jù)集中的圖像分類開發(fā)的模型只能在驗證集上達到53%的準(zhǔn)確率,并且在一些類別(如鳥類和貓類)的圖像分類上表現(xiàn)非常困難(約33-35%的準(zhǔn)確率)。這是預(yù)期的,因為我們通常會使用卷積神經(jīng)網(wǎng)絡(luò)進行圖像分類。在本教程系列的這一部分,我們將專注于卷積神經(jīng)網(wǎng)絡(luò)(CNN)并改善在CIFAR-10上的圖像分類性能。

CNN基礎(chǔ)知識

在我們深入代碼之前,讓我們討論卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識,以便更好地理解我們的代碼在做什么。如果你已經(jīng)對CNN的工作原理感到熟悉,可以跳過本節(jié)。

與前一部分中開發(fā)的前饋網(wǎng)絡(luò)相比,卷積神經(jīng)網(wǎng)絡(luò)具有不同的架構(gòu),并由不同類型的層組成。在下圖中,我們可以看到典型CNN的一般架構(gòu),包括它可能包含的不同類型的層。

卷積網(wǎng)絡(luò)中通常包含的三種類型的層是:

卷積層(紅色虛線框)

池化層(藍色虛線框)

全連接層(紅色和紫色實線框)

卷積層

CNN的定義組件和第一層是卷積層,它由以下部分組成:

輸入數(shù)據(jù)(在本例中為圖像)

濾波器

特征圖

將卷積層與全連接層區(qū)分開來的關(guān)鍵是卷積運算。我們不會詳細討論卷積的定義,但如果你真的感興趣并想深入了解其數(shù)學(xué)定義以及一些具體的示例,我強烈推薦閱讀這篇文章,它在解釋數(shù)學(xué)定義方面做得非常好

https://betterexplained.com/articles/intuitive-convolution/#Part_3_Mathematical_Properties_of_Convolution

卷積相對于密集連接層(全連接層)在圖像數(shù)據(jù)中的優(yōu)勢何在?簡而言之,密集連接層會學(xué)習(xí)輸入中的全局模式,而卷積層具有學(xué)習(xí)局部和空間模式的優(yōu)勢。這可能聽起來有些模糊或抽象,所以讓我們看一個例子來說明這是什么意思。

在圖片的左側(cè),我們可以看到一個基本的2D黑白圖像的4是如何在卷積層中表示的。

紅色方框是濾波器/特征檢測器/卷積核,在圖像上進行卷積操作。在右側(cè)是相同圖像在一個密集連接層中的表示。你可以看到相同的9個圖像像素被紅色的卷積核框起來。請注意,在左側(cè),像素在空間上是分組的,與相鄰的像素相鄰。然而,在右側(cè),這相同的9個像素不再是相鄰的。

通過這個例子,我們可以看到當(dāng)圖像被壓平并表示為完全連接/線性層時,空間/位置信息是如何丟失的。這就是為什么卷積神經(jīng)網(wǎng)絡(luò)在處理圖像數(shù)據(jù)時更強大的原因。輸入數(shù)據(jù)的空間結(jié)構(gòu)得到保留,圖像中的模式(邊緣、紋理、形狀等)可以被學(xué)習(xí)。

這基本上是為什么在圖像上使用卷積神經(jīng)網(wǎng)絡(luò)的原因,但現(xiàn)在讓我們討論一下如何實現(xiàn)。讓我們來看看我們的輸入數(shù)據(jù)的結(jié)構(gòu),我們一直在談?wù)摰哪切┙凶觥盀V波器”的東西,以及當(dāng)我們將它們放在一起時卷積是什么樣子。

輸入數(shù)據(jù)

CIFAR-10數(shù)據(jù)集包含60,000個32x32的彩色圖像,每個圖像都表示為一個3D張量。每個圖像將是一個(32,32,3)的張量,其中的維度是32(高度)x 32(寬度)x 3(R-G-B顏色通道)。下圖展示了從數(shù)據(jù)集中分離出來的飛機全彩色圖像的3個不同的顏色通道(RGB)。

通常將圖像視為二維的,所以很容易忘記它們實際上是以三維表示的,因為它們有3個顏色通道!

濾波器

在卷積層中,濾波器(也稱為卷積核或特征檢測器)是一組權(quán)重數(shù)組,它以滑動窗口的方式在圖像上進行掃描,計算每一步的點積,并將該點積輸出到一個稱為特征圖的新數(shù)組中。這種滑動窗口的掃描稱為卷積。讓我們看一下這個過程的示例,以幫助理解正在發(fā)生的事情。

一個3x3的濾波器(藍色)對輸入(紅色)進行卷積,生成一個特征圖(紫色):

在每個卷積步驟中計算點積的示意圖:

需要注意的是,濾波器的權(quán)重在每個步驟中保持不變。就像在全連接層中的權(quán)重一樣,這些值在訓(xùn)練過程中進行學(xué)習(xí),并通過反向傳播在每個訓(xùn)練迭代后進行調(diào)整。

這些示意圖并不能完全展示所有情況。當(dāng)訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)時,模型不僅在卷積層中使用一個濾波器是很常見的。通常在一個卷積層中會有32或64個濾波器,實際上,在本教程中,我們將在一個層中使用多達96個濾波器來構(gòu)建我們的模型。

最后,雖然濾波器的權(quán)重是需要訓(xùn)練的主要參數(shù),但卷積神經(jīng)網(wǎng)絡(luò)也有一些可以調(diào)整的超參數(shù):

層中的濾波器數(shù)量

濾波器的維度

步幅(每一步濾波器移動的像素數(shù))

填充(濾波器如何處理圖像邊界)

我們不會詳細討論這些超參數(shù),因為本文不旨在全面介紹卷積神經(jīng)網(wǎng)絡(luò),但這些是需要注意的重要因素。

池化層

池化層與卷積層類似,都是通過濾波器對輸入數(shù)據(jù)(通常是從卷積層輸出的特征圖)進行卷積運算。

然而,池化層的功能不是特征檢測,而是降低維度或降采樣。最常用的兩種池化方法是最大池化和平均池化。在最大池化中,濾波器在輸入上滑動,并在每一步選擇具有最大值的像素作為輸出。在平均池化中,濾波器輸出濾波器所經(jīng)過像素的平均值。

全連接層

最后,在卷積和池化層之后,卷積神經(jīng)網(wǎng)絡(luò)通常會有全連接層,這些層將在圖像分類任務(wù)中執(zhí)行分類,就像本教程中的任務(wù)一樣。

現(xiàn)在,我們已經(jīng)了解了卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和操作方式,讓我們開始進行有趣的部分,在PyTorch中訓(xùn)練我們自己的CNN模型!

設(shè)置

與本教程的第一部分一樣,我建議使用Google Colab進行跟隨,因為你的Python環(huán)境已經(jīng)安裝了PyTorch和其他庫,并且有一個GPU可以用于訓(xùn)練模型。

因此,如果你使用的是Colab,請確保使用GPU,方法是轉(zhuǎn)到“運行時”(Runtime)并點擊“更改運行時類型”。

在對話框中選擇GPU并保存。

現(xiàn)在你可以在Colab中使用GPU了,并且我們可以使用PyTorch驗證你的設(shè)備。

因此,首先,讓我們處理導(dǎo)入部分:

importtorch

fromtorchimportnn

fromtorch.utils.dataimportDataLoader

fromtorchvision.utilsimportmake_grid

fromtorchvision.datasetsimportCIFAR10

fromtorchvisionimporttransforms

fromtorchvisionimportutils

fromtorchvision.utilsimportmake_grid

importmatplotlib.pyplotasplt

importnumpyasnp

importseabornassns

importpandasaspd

如果你想檢查你可以訪問的GPU是什么,請鍵入并執(zhí)行torch.cuda.get_device_name(0),你應(yīng)該會看到設(shè)備輸出。Colab有幾種不同的GPU選項可供選擇,因此你的輸出將根據(jù)你所能訪問的內(nèi)容而有所不同,但只要你在運行此代碼時沒有看到“RuntimeError: No CUDA GPUs are available”錯誤,那么你正在使用GPU!

我們可以將GPU設(shè)備設(shè)置為device,以便在開發(fā)模型時將其分配給GPU,如果沒有CUDA GPU設(shè)備可用,我們也可以使用CPU。

device="cuda"iftorch.cuda.is_available()else"cpu"

print(device)

#cuda

接下來,讓我們設(shè)置一個隨機種子,以便我們的結(jié)果是可重現(xiàn)的,并下載我們的訓(xùn)練數(shù)據(jù)并設(shè)置一個轉(zhuǎn)換,將圖像轉(zhuǎn)換為張量并對數(shù)據(jù)進行歸一化。

torch.manual_seed(42)

transform=transforms.Compose(

[transforms.ToTensor(),

transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))]

)

training_data=CIFAR10(root="cifar",

train=True,

download=True,

transform=transform)

test_data=CIFAR10(root="cifar",

train=False,

download=True,

transform=transform)

一旦下載完成,讓我們查看數(shù)據(jù)集中的類別:

classes=training_data.classes

classes

#["airplane",

#"automobile",

#"bird",

#"cat",

#"deer",

#"dog",

#"frog",

#"horse",

#"ship",

#"truck"]

最后,讓我們設(shè)置訓(xùn)練和測試數(shù)據(jù)加載器:

batch_size=24

train_dataloader=DataLoader(training_data,batch_size=batch_size,shuffle=True,num_workers=0)

test_dataloader=DataLoader(test_data,batch_size=batch_size,shuffle=True,num_workers=0)

forX,yintrain_dataloader:

print(f"ShapeofX[N,C,H,W]:{X.shape}")

print(f"Shapeofy:{y.shape}{y.dtype}")

break

#ShapeofX[N,C,H,W]:torch.Size([24,3,32,32])

#Shapeofy:torch.Size([24])torch.int64

現(xiàn)在我們準(zhǔn)備構(gòu)建我們的模型!

構(gòu)建CNN

在PyTorch中,nn.Conv2d是用于圖像輸入數(shù)據(jù)的卷積層。Conv2d的第一個參數(shù)是輸入中的通道數(shù),在我們的第一層卷積層中,我們將使用3,因為彩色圖像將有3個顏色通道。

在第一個卷積層之后,該參數(shù)將取決于前一層輸出的通道數(shù)。第二個參數(shù)是在該層中卷積操作輸出的通道數(shù)。這些通道是卷積層介紹中討論的特征圖。最后,第三個參數(shù)將是卷積核或濾波器的大小。這可以是一個整數(shù)值,如3表示3x3的卷積核,或者是一個元組,如(3,3)。因此,我們的卷積層將采用nn.Conv2d(in_channels, out_channels, kernel_size)的形式。還可以添加其他可選參數(shù),包括(但不限于)步幅(stride)、填充(padding)和膨脹(dilation)。在我們的卷積層conv4中,我們將使用stride=2。

在一系列卷積層之后,我們將使用一個扁平化層將特征圖扁平化,以便能夠輸入到線性層中。為此,我們將使用nn.Flatten()。我們可以使用nn.BatchNorm1d()應(yīng)用批量歸一化,并需要將特征數(shù)作為參數(shù)傳遞。

最后,我們使用nn.Linear()構(gòu)建線性的全連接層,第一個參數(shù)是特征數(shù),第二個參數(shù)是指定輸出特征數(shù)。

因此,要開始定義我們模型的基本架構(gòu),我們將定義一個ConvNet類,該類繼承自PyTorch的nn.Module類。然后,我們可以將每個層定義為類的屬性,并根據(jù)需要構(gòu)建它們。

一旦我們指定了層的架構(gòu),我們可以通過創(chuàng)建一個forward()方法來定義模型的流程。我們可以使用激活函數(shù)包裝每個層,在我們的情況下,我們將使用relu。我們可以通過傳遞前一層和p(元素被丟棄的概率,缺省值為0.5)在層之間應(yīng)用dropout。

最后,我們創(chuàng)建模型對象并將其附加到設(shè)備上,以便可以在GPU上訓(xùn)練。

classConvNet(nn.Module):

def__init__(self):

super().__init__()

self.d1=0.1

self.conv1=nn.Conv2d(3,48,3)

self.conv2=nn.Conv2d(48,48,3)

self.conv3=nn.Conv2d(48,96,3)

self.conv4=nn.Conv2d(96,96,3,stride=2)

self.flat=nn.Flatten()

self.batch_norm=nn.BatchNorm1d(96*12*12)

self.fc1=nn.Linear(96*12*12,256)

self.fc2=nn.Linear(256,10)

defforward(self,x):

x=nn.functional.relu(self.conv1(x))

x=nn.functional.relu(self.conv2(x))

x=nn.functional.dropout(x,self.d1)

x=nn.functional.relu(self.conv3(x))

x=nn.functional.relu(self.conv4(x))

x=nn.functional.dropout(x,0.5)

x=self.flat(x)

x=nn.functional.relu(self.batch_norm(x))

x=nn.functional.relu(self.fc1(x))

x=self.fc2(x)

returnx

model=ConvNet().to(device)

訓(xùn)練和測試函數(shù)

如果你完成了本教程的第一部分,我們的訓(xùn)練和測試函數(shù)將與之前創(chuàng)建的函數(shù)相同,只是在訓(xùn)練方法中返回損失,而在測試方法中返回損失和正確數(shù)量,以便在調(diào)整超參數(shù)時使用。

#TrainMethod

deftrain(dataloader,model,loss_fn,optimizer,verbose=True):

size=len(dataloader.dataset)

model.train()

forbatch,(X,y)inenumerate(dataloader):

X,y=X.to(device),y.to(device)

#Computepredictionerror

pred=model(X)

loss=loss_fn(pred,y)

#Backpropagation

optimizer.zero_grad()

loss.backward()

optimizer.step()

ifverbose==True:

ifbatch%50==0:

loss,current=loss.item(),batch*len(X)

print(f"loss:{loss:>7f}[{current:>5d}/{size:>5d}]")

returnloss

#TestMethod

deftest(dataloader,model,loss_fn,verbose=True):

size=len(dataloader.dataset)

num_batches=len(dataloader)

model.eval()

test_loss,correct=0,0

withtorch.no_grad():

forX,yindataloader:

X,y=X.to(device),y.to(device)

pred=model(X)

test_loss+=loss_fn(pred,y).item()

correct+=(pred.argmax(1)==y).type(torch.float).sum().item()

test_loss/=num_batches

correct/=size

ifverbose==True:

print(f"TestError:Accuracy:{(100*correct):>0.1f}%,Avgloss:{test_loss:>8f}")

returntest_loss,correct#Forreportingtuningresults/earlystopping

最后,在基本模型訓(xùn)練之前,我們定義損失函數(shù)和優(yōu)化器。

loss_fn=nn.CrossEntropyLoss()

optimizer=torch.optim.Adam(model.parameters(),lr=0.001)

讓我們訓(xùn)練模型。

epochs=10

fortinrange(epochs):

print(f"Epoch{t+1}-------------------------------")

train(train_dataloader,model,loss_fn,optimizer)

test(test_dataloader,model,loss_fn)

print("Done!")

僅經(jīng)過10個epochs,61.7%的性能比我們訓(xùn)練的全連接模型要好得多!很明顯,CNN更適合用于圖像分類,但我們可以通過延長訓(xùn)練時間和調(diào)整超參數(shù)來進一步提高性能。

在進行這些之前,讓我們快速看看模型內(nèi)部是什么樣子。請記住,濾波器的像素是我們模型中可訓(xùn)練的參數(shù)。這不是訓(xùn)練圖像分類模型的必要步驟,也不會得到太多有用的信息,但是了解模型內(nèi)部的情況還是挺有意思的。

可視化濾波器

我們可以編寫一個函數(shù)來繪制模型中指定層的濾波器。我們只需要指定要查看的層,并將其傳遞給我們的函數(shù)。

defvisualizeTensor(tensor,ch=0,all_kernels=False,nrow=8,padding=1):

n,c,w,h=tensor.shape

ifall_kernels:

tensor=tensor.view(n*c,-1,w,h)

elifc!=3:

tensor=tensor[:,ch,:,:].unsqueeze(dim=1)

rows=np.min((tensor.shape[0]//nrow+1,64))

grid=utils.make_grid(tensor,

nrow=nrow,

normalize=True,

padding=padding)

grid=grid.cpu()#backtocpufornumpyandplotting

plt.figure(figsize=(nrow,rows))

plt.imshow(grid.numpy().transpose((1,2,0)))

讓我們來看看第一個卷積層(conv1)中的濾波器是什么樣子,因為這些濾波器直接應(yīng)用于圖像。

filter=model.conv1.weight.data.clone()

visualizeTensor(filter)

plt.axis("off")

plt.ioff()

plt.show

下面是輸出,包含了我們的conv1卷積層中48個濾波器的可視化。我們可以看到每個濾波器都是一個不同值或顏色的3x3張量。

如果我們的濾波器是5x5的,我們會在繪圖中看到以下差異。請記住,使用nn.Conv2d我們可以使用第三個參數(shù)更改濾波器的大小,因此如果我們想要一個5x5的濾波器,conv1將如下所示:

self.conv1=nn.Conv2d(3,48,5)#NewKernelSize

如果我們用新的5x5濾波器重新訓(xùn)練模型,輸出將如下所示:

如我之前提到的,這里并沒有太多有用的信息,但還是很有趣可以看到這些。

超參數(shù)優(yōu)化

在本教程中,我們將調(diào)整的超參數(shù)是卷積層中的濾波器數(shù)量以及線性層中的神經(jīng)元數(shù)量。當(dāng)前這些值在我們的模型中是硬編碼的,所以為了使它們可調(diào)整,我們需要使我們的模型可配置。

我們可以在模型的__init__方法中使用參數(shù)(c1、c2和l1),并使用這些值創(chuàng)建模型的層,在調(diào)整過程中將動態(tài)傳遞這些值。

classConfigNet(nn.Module):

def__init__(self,l1=256,c1=48,c2=96,d1=0.1):

super().__init__()

self.d1=d1

self.conv1=nn.Conv2d(3,c1,3)

self.conv2=nn.Conv2d(c1,c1,3)

self.conv3=nn.Conv2d(c1,c2,3)

self.conv4=nn.Conv2d(c2,c2,3,stride=2)

self.flat=nn.Flatten()

self.batch_norm=nn.BatchNorm1d(c2*144)

self.fc1=nn.Linear(c2*144,l1)

self.fc2=nn.Linear(l1,10)

defforward(self,x):

x=nn.functional.relu(self.conv1(x))

x=nn.functional.relu(self.conv2(x))

x=nn.functional.dropout(x,self.d1)

x=nn.functional.relu(self.conv3(x))

x=nn.functional.relu(self.conv4(x))

x=nn.functional.dropout(x,0.5)

x=self.flat(x)

x=nn.functional.relu(self.batch_norm(x))

x=nn.functional.relu(self.fc1(x))

x=self.fc2(x)

returnx

model=ConfigNet().to(device)

當(dāng)然,我們不僅限于調(diào)整這些超參數(shù)。事實上,學(xué)習(xí)率和批量大小通常也包括在要調(diào)整的超參數(shù)列表中,但由于我們將使用網(wǎng)格搜索,為了保持訓(xùn)練時間合理,我們必須大大減少可調(diào)整的變量數(shù)量。

接下來,讓我們?yōu)樗阉骺臻g定義一個字典,并保存給我們最佳結(jié)果的參數(shù)。由于我們使用網(wǎng)格搜索進行優(yōu)化,將使用每個超參數(shù)組合的所有組合。

你可以輕松地向每個超參數(shù)的列表中添加更多值,但每個額外的值都會大大增加運行時間,因此建議從以下值開始以節(jié)省時間。

search_space={

"c1":[48,96],

"c2":[96,192],

"l1":[256,512],

}

best_results={

"c1":None,

"c2":None,

"l1":None,

"loss":None,

"acc":0

}

提前停止

優(yōu)化過程中一個重要的組成部分是使用提前停止。由于我們將進行多次訓(xùn)練運行,每次訓(xùn)練運行時間都很長,如果訓(xùn)練性能沒有改善,我們將希望提前結(jié)束訓(xùn)練。繼續(xù)訓(xùn)練一個沒有改善的模型是沒有意義的。

實質(zhì)上,我們將在每個時期之后跟蹤模型產(chǎn)生的最低損失。然后,我們定義一個容差,指定模型必須在多少個時期內(nèi)達到更好的損失。如果在指定的容差內(nèi)沒有實現(xiàn)更低的損失,將終止該運行的訓(xùn)練,并繼續(xù)下一個超參數(shù)組合。

如果你像我一樣,喜歡檢查訓(xùn)練過程,可以設(shè)置self.verbose = True來記錄控制臺上的更新,并查看提前停止計數(shù)器增加的情況。你可以在此處硬編碼到EarlyStopping類中,也可以在優(yōu)化過程中實例化EarlyStopping對象時更改verbose值。

classEarlyStopping():

def__init__(self,tolerance=5,verbose=False,path="cifar-tune.pth"):

self.tolerance=tolerance

self.counter=0

self.early_stop=False

self.lowest_loss=None

self.verbose=verbose

self.path=path

defstep(self,val_loss):

if(self.lowest_loss==None):

self.lowest_loss=val_loss

torch.save(model.state_dict(),self.path)

elif(val_loss

self.lowest_loss=val_loss

self.counter=0

torch.save(model.state_dict(),self.path)

else:

ifself.verbose:

print("Earlystopcounter:{}".format(self.counter+1))

self.counter+=1

ifself.counter>=self.tolerance:

self.early_stop=True

ifself.verbose:

print("Earlystoppingexecuted.")

圖像增強

在設(shè)置超參數(shù)優(yōu)化方法之前,我們還有最后一件事要做,以提取出一些額外的性能并避免在訓(xùn)練數(shù)據(jù)上過度擬合。圖像增強是一種將隨機變換應(yīng)用于圖像的技術(shù),從本質(zhì)上講,它會創(chuàng)建“新的”人工數(shù)據(jù)。這些變換可以是以下幾種:

旋轉(zhuǎn)圖像幾度

水平/垂直翻轉(zhuǎn)圖像

裁剪

輕微的亮度/色調(diào)變化

隨機縮放

包含這些隨機變換將提高模型的泛化能力,因為增強后的圖像將與原始圖像類似,但不同。內(nèi)容和模式將保持不變,但數(shù)組表示將有所不同。

PyTorch通過torchvision.transforms模塊使圖像增強變得很容易。如果我們想要應(yīng)用多個變換,可以使用Compose將它們鏈接在一起。

需要記住的一點是,圖像增強對每個變換需要一點計算量,并且這些計算量應(yīng)用于數(shù)據(jù)集中的每個圖像。將許多不同的隨機變換應(yīng)用于我們的數(shù)據(jù)集將增加訓(xùn)練時間。

因此,現(xiàn)在讓我們限制變換的數(shù)量,以便訓(xùn)練時間不會太長。如果你想添加更多變換,請查看PyTorch關(guān)于轉(zhuǎn)換和增強圖像的文檔,然后將它們添加到Compose列表中。

選擇了增強變換之后,我們可以像應(yīng)用規(guī)范化和將圖像轉(zhuǎn)換為張量一樣將它們應(yīng)用于數(shù)據(jù)集。

#AugmentImagesforthetrainset

augmented=transforms.Compose([

transforms.RandomRotation(20),

transforms.ColorJitter(brightness=0.2,hue=0.1),

transforms.RandomHorizontalFlip(p=0.5),

transforms.ToTensor(),

transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))

])

#Standardtransformationforvalidationset

transform=transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))

])

training_data=CIFAR10(root="cifar",

train=True,

download=True,

transform=augmented)

test_data=CIFAR10(root="cifar",

train=False,

download=True,

transform=transform)

現(xiàn)在我們已經(jīng)在訓(xùn)練數(shù)據(jù)上設(shè)置了圖像增強,我們準(zhǔn)備設(shè)置我們的超參數(shù)優(yōu)化方法。

定義優(yōu)化方法

我們可以創(chuàng)建一個類(HyperSearch),其中包含超參數(shù)值配置、詳細報告設(shè)置、報告列表(以便在優(yōu)化完成后查看每個配置的表現(xiàn))的屬性,以及一個變量來存儲具有最佳性能的配置。

classHyperSearch():

def__init__(self,config,verbose=True):

self.config=config

self.verbose=verbose

self.report_list=[]

self.best_results={"c1":None,

"c2":None,

"l1":None,

"loss":None,

"acc":0

}

接下來,我們可以創(chuàng)建一個方法(仍在HyperSearch類中),以執(zhí)行網(wǎng)格搜索,并對每個超參數(shù)組合進行訓(xùn)練運行。首先,我們將使用tolerance=3配置EarlyStopping,并設(shè)置它保存每個超參數(shù)組合的權(quán)重。如果我們將self.verbose設(shè)置為True,我們可以在控制臺中看到當(dāng)前正在訓(xùn)練的超參數(shù)組合。

之后,我們使用我們設(shè)計的CoinfigNet模型定義我們的模型,并傳遞l1、c1和c2的值,同時選擇損失函數(shù)和優(yōu)化器,并設(shè)置我們的訓(xùn)練和驗證DataLoader。由于我們沒有時間也沒有意愿完全訓(xùn)練每個組合,所以我們將保持較低的時期數(shù)。目標(biāo)是了解哪種組合在對數(shù)據(jù)集進行分類時效果最好,然后我們可以將該模型完全訓(xùn)練,以查看它在完整的訓(xùn)練周期中的性能。

#OptimizationMethod

defoptimize(self):

forl1inself.config["l1"]:

forc1inself.config["c1"]:

forc2inself.config["c2"]:

early_stopping=EarlyStopping(tolerance=3,verbose=False,path="{}-{}-{}.pth".format(c1,c2,l1))

ifself.verbose==True:

print("Conv1:{}|Conv2:{}|Lin1:{}".format(str(c1),str(c2),str(l1)))

model=ConfigNet(l1=l1,c1=c1,c2=c2).to(device)

loss_fn=nn.CrossEntropyLoss()

optimizer=torch.optim.Adam(model.parameters(),lr=lrate)

train_dataloader=DataLoader(training_data,batch_size=batch_sz,shuffle=True,num_workers=0)

test_dataloader=DataLoader(test_data,batch_size=batch_sz,shuffle=True,num_workers=0)

現(xiàn)在,我們定義訓(xùn)練循環(huán),大部分與之前相同,只是現(xiàn)在我們將保存train和test方法的損失,以便early_stopping可以跟蹤訓(xùn)練進展(或缺乏進展)。最后,在每個時期之后,將結(jié)果保存到報告中,并更新最佳損失的值。

epochs=10

fortinrange(epochs):

ifself.verbose==True:

print(f"Epoch{t+1}-------------------------------")

train_loss=train(train_dataloader,model,loss_fn,optimizer,verbose=self.verbose)

test_loss,test_acc=test(test_dataloader,model,loss_fn,verbose=self.verbose)

#EarlyStopping

early_stopping.step(test_loss)

ifearly_stopping.early_stop:

break

print("Done!")

self.append_to_report(test_acc,test_loss,c1,c2,l1)

ifself.best_results["loss"]==Noneortest_loss

ifself.verbose==True:

print("UPDATE:Bestlosschangedfrom{}to{}".format(self.best_results["loss"],test_loss))

self.best_results.update({

"c1":c1,

"c2":c2,

"loss":test_loss,

"l1":l1,

"acc":test_acc

})

self.report()

我們可以將整個超參數(shù)優(yōu)化周期的結(jié)果輸出到一個漂亮的表格中,在表格中,我們可以看到每次運行的超參數(shù)配置,以及相應(yīng)的損失和準(zhǔn)確率。

defreport(self):

print("""

|-----------------------------------------------------------------------------------------------------|

||

|Reportforhyperparameteroptimization|

||

|-----------------------------------------------------------------------------------------------------|

|RUN|PERFORMANCE|CONFIGURATION|

|------------|--------------------------------------|-------------------------------------------------|""")

foridx,iteminenumerate(self.report_list):

print("|Run{:02d}|Accuracy:{:.2f}%|Loss:{:.2f}|Conv-1:{}|Conv-2:{:3}|Linear-1:{:>4}|".format(idx,

item[0]*100,

item[1],

item[2],

item[3],

item[4]))

print("|------------|---------------------|----------------|--------------|---------------|------------------|")

print("BestResults|Accuracy:{:.2f}%|Loss:{:.2f}|Conv-1:{}|Conv-2:{}|Linear-1:{:>4}|".format(self.best_results["acc"]*100,

self.best_results["loss"],

self.best_results["c1"],

self.best_results["c2"],

self.best_results["l1"]))

defappend_to_report(self,acc,loss,c1,c2,l1):

list_set=(acc,loss,c1,c2,l1)

self.report_list.append(list_set)

因此,將所有這些代碼放在一起,我們的HyperSearch類應(yīng)該如下所示:

classHyperSearch():

def__init__(self,config,verbose=True):

self.config=config

self.verbose=verbose

self.report_list=[]

self.best_results={"c1":None,

"c2":None,

"l1":None,

"loss":None,

"acc":0

#"d1":None,

#"lr":None,

#"bsz":None,

}

#OptimizationMethod

defoptimize(self):

forl1inself.config["l1"]:

forc1inself.config["c1"]:

forc2inself.config["c2"]:

early_stopping=EarlyStopping(tolerance=3,verbose=False,path="{}-{}-{}.pth".format(c1,c2,l1))

ifself.verbose==True:

print("Conv1:{}|Conv2:{}|Lin1:{}".format(str(c1),str(c2),str(l1)))

model=ConfigNet(l1=l1,c1=c1,c2=c2).to(device)

loss_fn=nn.CrossEntropyLoss()

optimizer=torch.optim.Adam(model.parameters(),lr=lrate)

train_dataloader=DataLoader(training_data,batch_size=batch_sz,shuffle=True,num_workers=0)

test_dataloader=DataLoader(test_data,batch_size=batch_sz,shuffle=True,num_workers=0)

epochs=10

fortinrange(epochs):

ifself.verbose==True:

print(f"Epoch{t+1}-------------------------------")

train_loss=train(train_dataloader,model,loss_fn,optimizer,verbose=self.verbose)

test_loss,test_acc=test(test_dataloader,model,loss_fn,verbose=self.verbose)

#EarlyStopping

early_stopping.step(test_loss)

ifearly_stopping.early_stop:

break

print("Done!")

self.append_to_report(test_acc,test_loss,c1,c2,l1)

ifself.best_results["loss"]==Noneortest_loss

ifself.verbose==True:

print("UPDATE:Bestlosschangedfrom{}to{}".format(self.best_results["loss"],test_loss))

self.best_results.update({

"c1":c1,

"c2":c2,

"loss":test_loss,

"l1":l1,

"acc":test_acc

})

self.report()

defreport(self):

print("""

|-----------------------------------------------------------------------------------------------------|

||

|Reportforhyperparameteroptimization|

||

|-----------------------------------------------------------------------------------------------------|

|RUN|PERFORMANCE|CONFIGURATION|

|------------|--------------------------------------|-------------------------------------------------|""")

foridx,iteminenumerate(self.report_list):

print("|Run{:02d}|Accuracy:{:.2f}%|Loss:{:.2f}|Conv-1:{}|Conv-2:{:3}|Linear-1:{:>4}|".format(idx,

item[0]*100,

item[1],

item[2],

item[3],

item[4]))

print("|------------|---------------------|----------------|--------------|---------------|------------------|")

print("BestResults|Accuracy:{:.2f}%|Loss:{:.2f}|Conv-1:{}|Conv-2:{}|Linear-1:{:>4}|".format(self.best_results["acc"]*100,

self.best_results["loss"],

self.best_results["c1"],

self.best_results["c2"],

self.best_results["l1"]))

defappend_to_report(self,acc,loss,c1,c2,l1):

list_set=(acc,loss,c1,c2,l1)

self.report_list.append(list_set)

調(diào)整

現(xiàn)在我們可以調(diào)整超參數(shù)了!通過使用%%time,在整個調(diào)整過程執(zhí)行完成后,我們可以看到整個過程花費的時間。讓我們保持學(xué)習(xí)率lrate=0.001和批量大小batch_sz=512,用我們之前定義的search_space實例化HyperSearch類,將verbose設(shè)置為True或False(根據(jù)你的喜好),然后調(diào)用optimize()方法開始調(diào)優(yōu)。

注意:在我的機器上(NVIDIA RTX 3070),完成這個過程大約需要50分鐘,所以如果你使用的是Colab上提供的GPU,可能需要大致相同的時間。

%%time

lrate=0.001

batch_sz=512

hyper_search=HyperSearch(search_space,verbose=True)

hyper_search.optimize()

完成整個優(yōu)化周期后,你應(yīng)該得到一個如下所示的表格:

結(jié)果

從表格中可以看出,最佳結(jié)果來自于Run 00,它具有c1=48、c2=96和l1=256。損失為0.84,準(zhǔn)確率為71.24%,這是一個不錯的改進,尤其是考慮到只有10個時期!

因此,現(xiàn)在我們已經(jīng)找到了在10個時期內(nèi)性能最佳的超參數(shù),讓我們對這個模型進行微調(diào)!我們可以在更多的時期內(nèi)訓(xùn)練它,并稍微降低學(xué)習(xí)率,以嘗試獲得更好的性能。

所以首先,讓我們定義我們想要使用的模型,并設(shè)置批量大小和學(xué)習(xí)率:

classConfigNet(nn.Module):

def__init__(self,l1=256,c1=48,c2=96,d1=0.1):

super().__init__()

self.d1=d1

self.conv1=nn.Conv2d(3,c1,3)

self.conv2=nn.Conv2d(c1,c1,3)

self.conv3=nn.Conv2d(c1,c2,3)

self.conv4=nn.Conv2d(c2,c2,3,stride=2)

self.flat=nn.Flatten()

self.batch_norm=nn.BatchNorm1d(c2*144)

self.fc1=nn.Linear(c2*144,l1)

self.fc2=nn.Linear(l1,10)

defforward(self,x):

x=nn.functional.relu(self.conv1(x))

x=nn.functional.relu(self.conv2(x))

x=nn.functional.dropout(x,self.d1)

x=nn.functional.relu(self.conv3(x))

x=nn.functional.relu(self.conv4(x))

x=nn.functional.dropout(x,0.5)

x=self.flat(x)

x=nn.functional.relu(self.batch_norm(x))

x=nn.functional.relu(self.fc1(x))

x=self.fc2(x)

returnx

model=ConfigNet().to(device)

model=ConfigNet(l1=256,c1=48,c2=96,d1=0.1).to(device)

batch_sz=512

lrate=0.0008

最后,我們可以將時期數(shù)設(shè)置為50,并更改保存權(quán)重的路徑。讓訓(xùn)練周期運行起來,如果進展停滯,early stopping將終止訓(xùn)練。

%%time

early_stopping=EarlyStopping(tolerance=6,verbose=True,path="cifar-optimized-test.pth")

loss_fn=nn.CrossEntropyLoss()

optimizer=torch.optim.Adam(model.parameters(),lr=lrate)

train_dataloader=DataLoader(training_data,batch_size=batch_sz,shuffle=True,num_workers=0)

test_dataloader=DataLoader(test_data,batch_size=batch_sz,shuffle=True,num_workers=0)

epochs=50

fortinrange(epochs):

print(f"Epoch{t+1}-------------------------------")

train_loss=train(train_dataloader,model,loss_fn,optimizer)

test_loss,test_acc=test(test_dataloader,model,loss_fn)

#EarlyStopping

early_stopping.step(test_loss)

ifearly_stopping.early_stop:

break

print("Done!")

Early stopping應(yīng)該在達到50個時期之前終止訓(xùn)練,并且應(yīng)該達到約77%的準(zhǔn)確率。

現(xiàn)在,我們已經(jīng)調(diào)整了超參數(shù),找到了最佳配置,并對該模型進行了微調(diào),現(xiàn)在是對模型的性能進行更深入評估的時候了。

模型評估

在這種情況下,我們的測試數(shù)據(jù)集實際上是我們的驗證數(shù)據(jù)。我們將重復(fù)使用我們的驗證數(shù)據(jù)來評估模型,但通常在超參數(shù)調(diào)整之后,你將希望使用真實的測試數(shù)據(jù)進行模型評估。

讓我們加載優(yōu)化后的模型,準(zhǔn)備沒有應(yīng)用任何圖像增強的test_dataloader,并運行test()來進行評估。

model=ConfigNet(l1=256,c1=48,c2=96,d1=0.1).to(device)

model.load_state_dict(torch.load("cifar-optimized-test.pth"))

loss_fn=nn.CrossEntropyLoss()

batch_sz=512

test_dataloader=DataLoader(test_data,batch_size=batch_sz,shuffle=False,num_workers=0)

classes=test_data.classes

test_loss,test_acc=test(test_dataloader,model,loss_fn)

這應(yīng)該會輸出準(zhǔn)確率和損失:

總體性能不錯,但每個類別的性能對我們更有用。以下代碼將輸出數(shù)據(jù)集中每個類別的模型準(zhǔn)確率:

correct_pred={classname:0forclassnameinclasses}

total_pred={classname:0forclassnameinclasses}

withtorch.no_grad():

fordataintest_dataloader:

images,labels=data

outputs=model(images.to(device))

_,predictions=torch.max(outputs,1)

forlabel,predictioninzip(labels,predictions):

iflabel==prediction:

correct_pred[classes[label]]+=1

total_pred[classes[label]]+=1

forclassname,correct_countincorrect_pred.items():

accuracy=100*float(correct_count)/total_pred[classname]

print(f"Accuracyforclass{classname:5s}:{accuracy:.1f}%")

執(zhí)行此代碼塊將給出以下輸出:

我們的模型在飛機、汽車、青蛙、船和卡車類別上表現(xiàn)非常好。有趣的是,它在狗和貓這兩個類別上遇到了最大的困難,這也是前面這個系列中完全連接模型面臨的最棘手的類別。

混淆矩陣

我們可以通過混淆矩陣進一步了解模型的性能。讓我們設(shè)置一個混淆矩陣,并進行可視化。

num_classes=10

confusion_matrix=torch.zeros(num_classes,num_classes)

withtorch.no_grad():

fori,(inputs,classes)inenumerate(test_dataloader):

inputs=inputs.to(device)

classes=classes.to(device)

outputs=model(inputs)

_,preds=torch.max(outputs,1)

fort,pinzip(classes.view(-1),preds.view(-1)):

confusion_matrix[t.long(),p.long()]+=1

通過定義混淆矩陣,我們可以使用Seaborn庫來幫助我們可視化它。

plt.figure(figsize=(15,10))

cf_dataframe=pd.DataFrame(np.array(confusion_matrix,dtype="int"),index=test_data.classes,columns=test_data.classes)

heatmap=sns.heatmap(cf_dataframe,annot=True,fmt="g")

這個表格的兩個維度是“實際”和“預(yù)測”值。我們希望大部分?jǐn)?shù)據(jù)都在中心對角線上對齊,即實際和預(yù)測屬于同一類別。從錯誤的預(yù)測中,我們可以看到模型經(jīng)?;煜埡凸罚@兩個類別的準(zhǔn)確率最低。

總數(shù)看起來不錯,但每個類別的精確度和召回率將為我們提供更有意義的數(shù)據(jù)。讓我們首先看一下每個類別的召回率。

每個類別的召回率cf=np.array(confusion_matrix)

norm_cf=cf/cf.astype(float).sum(axis=1)

plt.figure(figsize=(15,10))

cf_dataframe=pd.DataFrame(np.array(norm_cf,dtype="float64"),index=test_data.classes,columns=test_data.classes).astype(float)

heatmap=sns.heatmap(cf_dataframe,annot=True)

每個類別的精確度cf=np.array(confusion_matrix)

norm_cf=cf/cf.astype(float).sum(axis=0)

plt.figure(figsize=(15,10))

cf_dataframe=pd.DataFrame(np.array(norm_cf,dtype="float64"),index=test_data.classes,columns=test_data.classes).astype(float)

heatmap=sns.heatmap(cf_dataframe,annot=True)

樣本模型預(yù)測

最后,讓我們給模型提供幾張圖像,并檢查它的預(yù)測結(jié)果。讓我們創(chuàng)建一個函數(shù)來準(zhǔn)備我們的圖像數(shù)據(jù)以供查看:

defimshow(img):

img=img/2+.05#revertnormalizationforviewing

npimg=img.numpy()

plt.imshow(np.transpose(npimg,(1,2,0)))

plt.show()

現(xiàn)在,我們可以準(zhǔn)備我們的測試數(shù)據(jù),并創(chuàng)建另一個函數(shù)來獲取n個樣本預(yù)測。

test_data=CIFAR10(root="cifar",

train=False,

transform=transforms.ToTensor())

classes=test_data.classes

defsample_predictions(n=4):

test_dataloader=DataLoader(test_data,batch_size=n,shuffle=True,num_workers=0)

dataiter=iter(test_dataloader)

images,labels=dataiter.next()

outputs=model(images.to(device))

_,predicted=torch.max(outputs,1)

imshow(make_grid(images))

print("[GroundTruth|Predicted]:","".join(f"[{classes[labels[j]]:5s}|{classes[predicted[j]]:5s}]"forjinrange(n)))

調(diào)用該函數(shù),傳遞你想要采樣的圖像數(shù)量。輸出將給出每個圖像的實際類別和預(yù)測類別,從左到右。

利用經(jīng)過超參數(shù)調(diào)優(yōu)和圖像增強的卷積網(wǎng)絡(luò),我們成功提高了在CIFAR-10數(shù)據(jù)集上的性能!感謝你的閱讀,希望你對PyTorch和用于圖像分類的卷積神經(jīng)網(wǎng)絡(luò)有所了解。這里提供了包含所有代碼的完整筆記本在GitHub上可用。

https://github.com/florestony54/intro-to-pytorch-2/blob/main/pytorch2_2.ipynb

標(biāo)簽:

返回頂部
五月激情婷婷久久伊人| 精品视频一卡二卡三卡| 人人妻人人爽人人……| 污的视频免费在线观看| 久久久91人精品一区二区三| 国产精品久久久久久久久高潮| 久久精品国产亚洲av高清yw| 肥臀熟女一区二区三区蜜臀| 日本成人久久久久久久久| 欧美日韩免费高清不卡视频| 丰满人妻中伦妇伦精品app| 激情五月天丁香在线| 日韩欧美国产中文字幕视频| 欧美一区二区三区电影院 | 国产熟女大全一区二区三区| 最近中文字幕的在线91| 狠狠操天天操狠狠操| 99re久久热在线视频| 黄色a级在线免费看| 欧美日韩国产精品免费在线观看| 国产午夜毛片v区一区二区三区| 亚洲综合婷婷大香蕉| 欧美色欧美亚洲高清在线观看| 日本人妻久久在线| 亚洲视频欧美视频网| 国产精品内射一片天| 97久久人妻精品中文无码| 精品国产乱码久久久…| 国产视频激情在线区| 91精品国产三级在线观看| 国产精品自拍中文字幕| 中文成人在线视频| suv精品一区二区6| 久久久一区二区三区免费观看av| 97人妻人人揉人人澡| 福利免费一区二区三区| 色哟哟在线视频免费观看进入| 欧美日韩日韩三级久久| 亚洲三级黄色生活片| 蒂亚田中被黑人裸操xxx片| 欧美日韩每日更新在线| 精品国产一区二区99| 天天爱天天色天天综合| 97日日碰人人模人人澡分享吧| 天天操天天啪天天干| 欧美日韩一区二区三区观看| 人妻a在线免费视频| 成人版中文字幕一区| 北条麻妃肛交一区二区| 99久在线精品99re8蜜桃| 麻豆国产在线观看激情| 久久人人爽人人妻人人玩| 一本一道久久久久a精品综合| 午夜激情小视频在线观看| 日本熟女久久婷婷| av午夜人妻一区二区| 久久国产这里只有精品视频| 国产国语av毛片在线看| 色在线播放国产一区| 美女图片视频久久99| 久久精品国产亚洲av高清yw| 超碰91在线中文字幕| 亚洲欧美日韩一区综合网| 在线成人教育平台有哪些| 欧美mv亚洲mv日韩mv| 久碰在线视频在线观看视频| 1024香蕉在线观看| 五月开心婷婷中文字幕| 国产精品久久久久久久久高潮| 色哟哟免费视频网站| 五月激情婷婷久久伊人| 在线观看日本亚洲一区二区三区| 午夜在线福利观看| 久久国产这里只有精品视频| 操美女完整版中文字幕| 99r在线观看精品视频| 蜜臀av成人精品在线| 蜜臀av性久久久久av蜜桃| 五月激情婷婷久久伊人| 日韩欧美国内精品| 少妇久久久中出中文字幕| 亚洲一级特黄色大片| 日韩人妻精品视频免费| 91国偷自产一区二区三区换脸 | 成人国产精品免费看| 激情小说 另类小说 亚洲欧美 | 欧美一区二区三区在线播放视频| 公侵人妻一区二区三区| 97日日碰人人模人人澡分享吧| 国产熟女大全一区二区三区| 日韩欧美人妻久久精品| 人妻少妇中文888久久| 天天色,天天操.| 久久久久精品人妻al黑| 亚洲免费av资源网站| 日韩av在线高清不卡| 91久久国产综合久久91雪峰| 黄色a级在线免费看| 99 久久 这里只有精品| 日本久久国产精品视频| 可以免费在线看黄色的网站| 综合一区蜜臀av| 久久久久久久美女内射 | 最淫最色成人网上| 91大神康先生在线| 精品一区,精品二区| 91精品高清在线观看| www.国产黄片在线免费观看 | 美女视频福利免费看| 久久一区二区三区四区亚洲| 99久久精品一品区免视观看| 精品国产乱码久久久久久老虎| 视频二区亚洲欧美在线观看| 噜噜久久精品夜色亚洲| 亚洲最大的成人一区二区| 日韩熟妇人妻av中文字幕| 激情五月天丁香在线| 亚洲最新偷拍视频| 久久久久久少妇久久久久久| 色综合久久超碰大香蕉| 久久久久久少妇久久久久久| 日韩性生交大片免费看| 99久久久久免费精品国产国产| 日韩国产欧美成人综合另类| 91丨九色丨国产熟女| 日韩四级片在线看| 69堂成人免费视频精品| 手机视频国产精品| 区一区二区在线观看视频| 国产乱子伦一区二区三区四区五区| 日韩中文字幕三级在线| 日韩国产欧美成人综合另类 | 在线观看高清不卡日韩av| 国产亚洲av成人| 在线一区二区三区四区av| 在线中文字幕字幕888| 99er久久99久久久| 99久久免费看少妇高潮| 亚洲中文黄色av| 天天色,天天操.| 精品久久久久中文字幕加勒比| 久久久久久久国产麻豆| 日韩五月中文字幕| 超碰91在线中文字幕| 日本人妻被黑人巨大中出| 99久久精品国产专区| 污的视频在线观看8| www.国产黄片在线免费观看 | 少妇久久久中出中文字幕| 日本不卡在线视频播放| 强d乱码中文字幕熟女| 2023国产精品自拍视频| av小说免费在线看| 国产人妻人伦精品9| 国产精品自拍中文字幕| 久久亚洲AV成人无码精品| 亚洲欧美日韩在线色图| 日产国产亚洲av| 新激情五月天综合久久| 69堂成人免费视频精品| 国产二区视频免费在线观看| 日韩欧美国内精品| 中文字幕精品熟女人妻| 麻豆精品2021最新| 日韩午夜精品人妻| 丰满人妻一区二区三区四区54| 日韩欧美亚洲电影在线观看| 日韩五月中文字幕| 高清国产一区二区三区四区五区| 99视频在线观看成人| av中文字幕一区在线| 国内精品99在线免费观看| 久久久久久久人妻熟女| 亚洲成人中文字幕高清乱码| av中文字幕在线观看免费观看| 91成人免费看片下载| 日韩国产欧美色婷婷影院| 久久人人爽人人妻人人玩| 欧美久久老太婆逼逼| 亚洲成人动漫av| 丰满少妇欧美久久久久久| 日本女人操比视频| 精品人妻伦一二二区久久懂色 | 国产乱淫av一区二区三区| 日韩熟妇人妻av中文字幕| 一本一本久久aa精品综合| www.国产黄片在线免费观看 | 成人国产黄片在线观看| 国产69精品久久久久999天美| 久久久久国产精品嫩草| 91免费福利视频网站| 91xxxx在线观看视频| 成人 在线 一区二区三区| 成人av电影一区二区| janpense人妻中文字幕| 婷婷xxxx五月天| 亚州av综合在线| www.国产黄片在线免费观看| 天堂av国产av在线观看| 日韩一区二区三区在线播放| 天天日天天操天天想天天舔天天射| 91大神康先生在线| 手机在线播放日韩av| 亚洲va韩国va欧美va国产| 91国产在线精品99| 久久久久久久久久av资源| 久久久久久久久一级| 国产老熟女在线视频五区| 国产亚洲综合久久系列抖音| 欧美日韩久久久九九| 久久久久久国产日韩| 蜜臀av成人精品在线| 亚洲中文字幕97久久精品少妇| 成人国产黄片在线观看| 少女日本电视高清观看| 公侵人妻一区二区三区| 欧美日韩国产高清在线| 日韩av一级不卡| 久久久久少妇xxxbbb| 91国产久久久久久久| 最新国产激情视频| 最近中文字幕的在线91| 91思思久久精品视频| 大香蕉av综合在线| 污视频在线观看网| 美女视频福利免费看| 国产又大又猛又粗又长| 婷婷xxxx五月天| 亚洲av大粗黑在线| www婷婷在线视频,com| 麻豆精品av国产传媒mv| 亚洲天堂av有码| 国产乱子伦一区二区三区四区五区 | 最淫最色成人网上| 久久96热在精品国产高清| 日韩人妻精品丰满少妇| 蜜桃一区二区人妻熟女 | 日韩视频国产视频| 天堂在线伦理影院| 人妻a在线免费视频| 福利一区二区不卡国产| 2017日日夜夜操| 青青青视频自偷自拍视频1| 日韩一级大片在线观看| 欧美丰满熟妇乱淫在线观看| 97人妻精品全国免费| 国产日韩欧美亚欧在线| 日本100禁中文字幕| 午夜久久精品一区二区三区| 超碰97免费青青热| 蜜臀av性久久久久av蜜桃| 久久国产视频中文字幕| 国产精品一卡二卡久久久| 中文字幕av男人天堂| 麻豆精品一区二区三区| 国产精品久久久久久久久久辛辛 | 精品久久久中文字幕| 精久久久久久久久久| 91精品高清在线观看| 久久久国产精品人妻aⅴ免费看| 亚洲五月综合激情综合久久| 国产一级黄色片在线播放| 亚洲黄色分享大全探花| 色综合久久久久久久久久综合| 久久成人精品国产亚洲av蝌蚪| 91麻豆蜜桃在线观看| 亚洲精品无码久久蜜桃网站| 国产av天堂资源在线| 97人妻免费精品一区二区| 91成人在线观看视频| 国产山东老熟女48嗷嗷叫91| 污版视频在线观看| 久久老熟女av一区三区福利| 亚洲av口爆深喉| 久久一亚色院精品全部免费| av在线中文字幕强| 天天色综合天天网| 一区二区三区国产视频在线 | www.国产黄片在线免费观看| 国产精品久久久亚洲一区| 日韩欧美一级毛卡片| 欧美亚洲国产日韩精品在线观看| 国产精品久久久久久最猛| 日韩人妻精品视频免费| 天天摸天天舔天天玩天天谢| 熟女人妻大屁股呻吟gif| 久久久久国产精品久久| 91精品欧美久久久久久| 精品一区二区三区视| 熟女av在线视频| 噜噜久久精品夜色亚洲| 欧美一区二区三区中文电影| 国产精品欠久久久久久| 久久国产精品99久久口爆| 97久久精品91n| 中文字幕人妻二区综合| 国产欧精精久久久久久久| 国产亚洲中文字幕视频| 日韩伦理一区二区手机在线| 在线观看日本亚洲一区二区三区 | 亚洲国产欧美日韩一区| 欧美mv亚洲mv日韩mv| 亚洲春色综合另类网蜜桃| 99久久在线观看6免费视频| 国产乱淫av一区二区三区| 国产区视频一区二区三区| 秋霞午夜影院在线| 少妇人妻av一区二区| 在线不卡日本v二区三区18| 伊人精品视频在线播放| 免费日韩高清成人av| 日韩av二区三区一区| 日韩激情视频高清| 久久久久久久av麻豆| 国产又大又猛又粗又长又爽| 日韩人妻熟女av中字| 成人午夜电影在线免费| 东京热久久这里全是精品| 高清亚洲成在人天堂网| 六月丁香久久激情综合| 日韩三级四级电影| 日韩高清久久久久久久| 久久久久久久av麻豆| 中文字幕一区二区麻豆| 丰满人妻一区二区三区四季| 91av在线观看地址一| 999久久久999精品视频| 色www亚洲阿娇| 91av在线观看地址一| 麻豆乱淫一区二区三区在线看| 亚洲综合av色婷婷| 欧美激情,国产精品| 老熟女高潮一区二区三区四区 | 搡老熟女乱淫一区二区在线97| www.久久久久久99| 亚洲颜射在线视频| 97香蕉碰碰国产人妻欧美| 欧美亚洲一区二区三区四区五区| 日韩av一区二区三区四区公司| 99精品国产免费观看视频| 亚洲国内另类精品| 午夜激情小视频在线观看| 久久久久久少妇久久久久久| 少妇惨叫久久久久久久久久| 五月婷婷加勒比一区二区三区| 99中文字幕在线在线| 久久久久久少妇久久久久久| 五月天丁香久久一区二区| 久久久久久久久免费精品蜜臀| 成人日韩电影免费观看| 91国偷自产一区二区三区换脸 | 91joy视频在线| 欧美日韩国产综合中文| 中文字幕日韩日本| 久久热这里只有精品18| 日韩高跟丝袜诱惑美腿黄片| 污的视频免费在线观看| www.亚洲男人天堂网| 亚洲麻豆精品av| 中文字幕日韩高清乱码| 人妻a在线免费视频| 亚洲av成在线播放| 日韩熟妇人妻av中文字幕| 欧美亚洲国产日韩精品在线观看| 青青青视频自偷自拍视频1| 日韩欧美黄色小视频| 亚洲av激情文学综合| 久久久久久久婷婷激情五月天| 99色一区二区三区| 久久久人妻国产精品| tube8日本少妇| 在线免费观看中文字幕av| 亚洲成αv人在线电影| 色婷婷1024导航| 99re在线视频精品视频| 在线免费观看日韩欧美国产片| 国产av天堂资源在线| 午夜影院十八岁在线试看 | 精品久久久久18禁免费| 久久视频网址在线观看| 91成人免费看片下载| 91污污污视频网站| 一区二区三区乱子伦| 久9热在线视频精品| 天天日天天舔天天舔| 久久激情五月天专区视频| 一本一道久久a久久精品综合蜜臀| 激情综合网激情五月在线| 五月 激情中文字幕| 欧美亚洲av一区二区| 日韩成人在线毛片| 人妻另类专区欧美制服| av东京热加勒比av| 天天上天天操天天舔| 久久riav中文精品| 51精品视频在线免费观看| 999久久a精品合区久久久 | sss视频在线亚洲| 成人三级福利视频网站大全| 亚洲精品国产精品成人| 免费69av福利视频网站| 少妇惨叫久久久久久久久久| 丰满少妇欧美久久久久久| 日韩精品中文字幕有码| 日本aa 1级片| 人妻少妇中文888久久| 国产理论av在线第一页| 亚洲黄色av图片天堂| 污视频在线观看网| 成人午夜美女主播在线视频| 日韩人妻在线视频免费| 激情小视频欧美国产| 新激情五月天综合久久| 精品无人区麻豆乱码1区2区| 久久激情五月天专区视频| 亚洲在线免费资源网| 久久久久久国产精品免费播放| 久久久久久久久九九九人妻| 51精品视频在线免费观看| 青草伊人天堂在线| 亚洲黄色分享大全探花| 熟女av在线视频| 日韩亚洲天堂网站| 黄色一级大片在线免费看| 国产69精品久久久久999天美| 久久久久久久久免费精品蜜臀| 欧美日韩在线播放一区三区四区| 日韩亚洲欧美中文字幕一| 国产又粗又长又黄刺激视频| 久久精品国产亚洲av高清| 天天干天天操天天透天天射| 亚洲欧美成视频在线| 深爱激情四射婷婷网| 久久久久久久久久久久久日本| 国产区视频一区二区三区| 色欲AV蜜臀AV水蜜桃AV| 麻豆在媒一区二区三区四区| 超碰欧美日韩高清美女图片| 久久免费女人高潮流水毛片| 日本一区欧美高清国产久久| 999久久久999精品视频| 久久久精品国产蜜臀| av五月天在线免费观看| av在线中文字幕乱码| 国产亚洲欧美日一区二区三区| 久久国产精品视频在线观看啊 | 亚洲五月综合激情综合久久| 成熟妇女毛耸耸视频做性性色av| 欧美精品乱码视频在线| 久久国产精品视频在线观看啊 | 日韩人妻福利在线| 欧美综合激情婷婷色| 日产国产亚洲av| 亚洲va韩国va欧美va国产| 久久久久久久熟女网| 久久av一区二区三区小说| 日本男人操日本女人| 欧美精品日韩中文字幕在| 国产乱淫av一区二区三区| 视频午夜在线观看视频| 91成人在线观看喷潮视频| 狠狠操天天操狠狠操| 天天日天天操天天想天天舔天天射| 国产精品久久久久久久久高潮| 在线免费观看麻豆黄片久久久| 精品一区二区三区四区乱码| 日韩亚洲天堂网站| 欧美色一区二区三区四区五区| 日韩成人免费大片| 黄色一级大片在线免费看| 99久在线精品99re8蜜桃| 污版视频在线观看| 综合另类亚洲图片| eeuss一区二区三区在线观看| 欧美一区二区三区在线播放视频| 日韩国产午夜在线| 亚洲欧美激情在线一区| 日韩午夜精品小视频| 大香蕉 一条大香蕉| 国产成人精品视频小说| 免费人妻av一区二区| 在线播放中文字幕人妻被中出| 国产乱淫av一区二区三区| 国产欧精精久久久久久久| 麻豆精品av国产传媒mv| 蜜桃视频久久一区免费观看入口 | 在线观看日本亚洲一区二区三区 | 欧美日本综合一区二区三区| 狠狠亚洲婷婷综合色| 久久综合综合久久在线| 亚洲综合av色婷婷| 亚洲国产高清不卡一区二区| 日本老太老熟妇bbb| 亚洲av综合av自拍自拍| 少妇高潮久久久久久久久久| 国产高潮呻吟久久av| 亚洲欧洲一区二区三区在线播放| janpense人妻中文字幕| 亚洲电影 欧美电影| 国产中文字幕国产中文| 欧美精品日韩国产一区原创色| 精品人妻中出一区二区| 日本成人久久久久久久久| 国产一区二区三区无码精品久久| 好看的中文字幕一区二区三区| suv精品一区二区6| 2021国产在线观看无码| 久夜色精品国产噜噜亚洲av| 久久久久久久永久免费视频| 日韩欧美一级毛卡片| 麻豆高清在线观看视频| 亚洲精品婷婷91| 粉嫩av一区二区在线| 国产精品,亚洲视频| 久久久免费观看完整版视频| 久久久久久久久高清精品| 国内精品99在线免费观看| 人妻互换中文字幕一区二区| 色丁香婷婷综合久久在线观看| 久久av高潮av无av萌白| 天天干天天操狠狠干| 国产免费超碰在线观看| 91久久香蕉国产孰女线看| 中文字幕人妻呻吟在线| 亚洲中文字幕亚洲中文字幕| 欧美日韩一区二区三区观看| 成人 短视频 在线| 99国产手机在线播放| 国产国语av毛片在线看| 免费在线观看av日韩| 人妻少妇第一区二区三区| 国产一区二区三区 中文字幕| 中文字幕精品熟女人妻| 日韩欧美黄色小视频| 天天干天天操天天透天天射| 国产又粗又猛又黄的网站| 午夜啪啪av网站| 国产精品国产三级国产专不| 熟女av在线视频| 精品久久久久中文字幕加勒比| 欧美日韩亚洲国产校园| 丰满熟女一区二区三区三州| 人人妻人人爽人人……| 国产精品99精品免费视频| 午夜污视频在线免费观看| 日韩精品后入视频| 日产免费的一级黄片| 蜜桃视频18禁一区二区| 日韩熟妇人妻av中文字幕| 日韩在线成人字幕| 加勒比海中文字幕免费视频| 亚洲在线免费资源网| 午夜影院十八岁在线试看 | 99免费在线观看精品| 日本老熟妇四十路| 下载黄页视频在线观看| www.麻豆在线观看| 中文字幕在线视频97| 超碰在线97公开免费| www.久久久久久99| 中文字幕人妻交换| 日韩欧美亚洲电影在线观看| 蜜乳av人妻一区二区三区| 操美女完整版中文字幕| 国产午夜毛片v区一区二区三区| 国产又粗又长又黄刺激视频| 日韩一区二区三区在线播放| 97超碰资源在线免费看| 久久综合福利导航视频| 中文字幕人妻一区二区一| 久久久久久国产精品免费播放| 999热久久国内精熟女| 91麻豆精品国产亚洲| 99r在线观看精品视频| 久久精品国产亚洲av大桥未久 | 99er视频在线观看| 麻豆国产在线观看激情| 91精品亚洲视频在线观看| 尹人大香蕉五月天久久| 日本久久精品高清| 色先锋久久亚洲中文字幕| 日韩av熟妇在线| 第二十四色男人天堂| 天天上天天操天天舔| 亚洲av电影黄片| 五月婷婷丁香花综合| 9999精品在线视频| 久久精品视频这里只有精品| 国产又大又爽aaa毛片| 日本人妻诱惑网址| 国产一区二区日韩av| 香港三级日韩三级| 99久久久久免费精品国产国产| 国产欧美日韩精品小视频| 日本不卡一区二区三区四区五区| 熟女人妻大屁股呻吟gif| 丰满少妇欧美久久久久久| 91麻豆蜜桃在线观看| 室外偷拍激情视频| 亚洲高清中文字幕不卡av大全| 午夜激情小视频在线观看| 91精品国产福利线观看日日| 人妻中文字幕久久不卡| 成人乱性视频自拍在线| 国产天堂男人av一区二区三区| juy320友田真希中文字幕| 99精品在线观看视频66| 精品久久中文字幕人妻系列蜜臀| 亚洲a久久悠天堂| 六月丁香久久激情综合| 日韩欧美中文字幕情色| 一区二区三区欧美影片| 日韩一区二区三区免费视频播放| 丰满人妻一区二区三区四区54| 日韩a不卡av在线| 久热精品视频在线看| 青青青视频自偷自拍视频1| 日本老熟妇bbwwbbww| 91joy视频在线| 日本熟女三级电影| 天天舔天天舔天天日| 老熟女高潮一区二区三区四区 | 国产97视频在线精品| 天天躁日日躁狠狠躁av人妻| 亚洲国内另类精品| 欧美日韩在线播放一区三区四区| 日韩欧美国产中文字幕视频| 国产av天堂资源在线| 人妻av中文字幕在线播放| 麻豆国产在线观看激情| 99精品网站在线观看| 五月婷婷丁香婷婷色| 免费国产日产高潮色网站 | 精品成人一区二区三区四区影视| 偷拍自拍 国产精品| 无码国产精成人午夜视频不卡| 亚洲欧美一区免费观看视频| 一级少妇精品久久久久久久| 亚洲一级黄片av| 91在线永久免费观看| 国产小视频在线观看不卡| 国产不卡av一区二区三区| 国产精品女女女女女女av爽| 五月开开婷婷综合久久| 国产伦精一品二品三品app| 亚洲乱熟女一区二区三区0| 亚洲av大粗黑在线| 国产亚洲欧美日一区二区三区| 自拍视频在线观看| 亚洲欧洲av性色在线观看| 一本一道久久a久久精品综合蜜臀| 蜜臂女同久久另类精品| 日韩人妻熟女av中字| 99re在线精品视频99| 91偷拍视频最新网址| 日韩四级片在线看| 日韩一级大片在线观看| 久久久久久久永久免费视频| 中文字幕色区一区二区 | 日韩午夜精品小视频| 国产成人自拍精品在线| 老熟女高潮一区二区三区四区| www.久久精品草| 第一区二区三区免费观看视频 | 五月婷婷色视频在线| 欧美激情亚洲另类在线一区| 久久久精品视频中文字幕| 一区二区三区熟女| 污的视频免费在线观看| 日韩国产欧美色婷婷影院| 成人av在线观看久久久| 青青青视频自偷自拍视频1| 精品成人一区二区三区四区影视| 亚洲精品资源综合网| 久久九九精彩美女视频| 高清亚洲成在人天堂网| 日本男人操日本女人| 天天操操操天天搞搞搞| 亚洲欧洲美洲av| 国产成人亚洲精品影院| 成人一区二区电影网| 999久久久999精品视频| 午夜日本伦理视频| 日产国产亚洲av| 欧美亚洲av一区二区| 日本熟女久久婷婷| 亚洲人妻中文字幕日韩| 国产老熟女在线视频五区| 99热这里88久久久蜜桃| 久久6在线观看视频| 手机日韩av在线免费观看| 久久激情五月天专区视频| 蜜臀久久99精品久久久酒店| 国产精品国产三级国产专不| 亚洲av色资源站| 丰满少妇欧美久久久久久| av2024男人天堂| 久久久久亚洲精品国| 香蕉人妻系列推荐| 少妇惨叫久久久久久久久久| 国产原创中文字幕国产av| 成人福利中文字幕在线| 蜜桃视频久久一区免费观看入口| 国产精品一卡二卡久久久| 成人 短视频 在线| 日韩午夜福利在线观看| 2021精品久久久久精品免费网| 蜜乳av人妻一区二区三区| 男人的天堂久久精品| 日韩少妇一区二区电影| 精品成人av在线观| 欧美日韩亚洲国产校园| 91丝袜精品久久久久久久人妻| 最淫最色成人网上| 亚洲三级黄色生活片| 国产精品一卡二卡久久久| 国产亚洲av综合人人澡精品小说| 天天干天天日天天射天天拍天天操| 日本成人久久久久久久久| 精品麻豆av影视在线观看| 第一区二区三区免费观看视频| 成人 在线 一区二区三区| 粉嫩av一区二区在线| 麻豆精品国产av在线观看观看| 国产精品原创久久久久久| 国产自拍 亚洲视频| 日韩人妻精品视频免费| av毛片一区二区三区| 久久精品国产亚洲av高清yw| 欧美亚洲一区二区三区四区五区| 中文字幕人妻精品一区| 欧美日韩免费精品视频| 99re99这里只有精品| 亚洲国产欧美日韩一区| 中文字幕人妻呻吟在线| 97久久精品91n| 中文字幕色区一区二区 | 日韩丝袜欧美人妻制服网站| 一本一道久久久久a精品综合| 亚洲女人久久久久久久久久久| 欧美精品视一区二区三| 自拍视频在线观看| 91久久香蕉国产孰女线看| 久久在线精品一区二区| 日本亚洲中文字幕不卡| 日韩人妻福利在线| 日韩人妻精品视频免费| 亚洲欧美日韩颜射| 亚洲欧美日韩在线色图| 黄色a级在线免费看| 香港三级日韩三级亚洲三级| 久久伊人精品一区二区三区| 亚洲va韩国va欧美va国产| 天天操天天干加勒比久久| 亚洲 日韩 另类 制服 无码| av破解版在线观看| 久久av高潮av无av萌白| 日韩高清久久久久久久| 国产一区二区日韩av| 九九在线免费视频精品| 亚洲视频欧美视频网| 日韩欧美人妻久久精品| 天天日熟女少妇av| 亚洲精品国产成人a| 免费一区二区高清欧美| 福利久久久久久久久久久久久| 一区二区三区国产视频在线| 成人乱性视频自拍在线| 日本不卡一区二区三区四区五区| 麻豆在媒一区二区三区四区| juy320友田真希中文字幕| 2019中文字幕视频在线观看| 91丨九色丨国产熟女| 五月激激激综合网色播| 国产农村一级黄色片网站| 欧美精品99久久久久久| 日本在线一区二区三区不卡| 中文字幕在线视频97| 肥臀熟女一区二区三区蜜臀| 日本100禁中文字幕| 日韩一区二区三区免费视频播放| 91久久国产综合久久91雪峰| 色综合久久综合久久| 北条麻妃肛交一区二区| 日韩精品后入视频| 伊人之综合视频在线观看| 最新国产黄色av| 美女图片视频久久99| 精彩久久国产久久久| 亚洲图色 一区二区| 久久精品国产99亚洲| 老熟女高潮一区二区三区四区| 日韩亚洲国产一区二区三区| 日本老太老熟妇bbb| 亚洲 激情 av在线| 日韩av高清在线免费观看| 熟妇人妻无乱码中文字幕熟| 久久99精品久久在线观看| 久久精品视频这里只有精品 | 国产精品,亚洲视频| 日韩午夜福利在线观看| 丰满人妻一区二区三区四季| 久久精品国产亚洲av成人看光了| 亚洲中文字幕亚洲中文字幕| 日韩人妻精品视频免费| 成人版中文字幕一区| 亚洲人妻中文av| 成人免费视频成人免费视频| 一级精品久久久无数码高清av| 91热国内精品永久免费观看| 人妻少妇中文888久久| 日本女人啪啪视频| 人妻av中文字幕在线播放| 国语自产偷拍精品视频偷 | 日韩偷拍久久久久久久久久| 色婷婷久久综合五月激情网| 一本一道久久久久a精品综合| 一区二区三区精品自拍视频| 少妇久久久中出中文字幕| www.男人天堂,亚洲天堂男人| 第二十四色男人天堂| 中文字幕人妻交换| 国产日韩精品欧美激情在线| 婷婷xxxx五月天| 久久精品国产99亚洲| 日韩精品国产中文字幕欧美| 亚洲av区一区二区三区色婷婷| 最新亚洲中文字幕av| 亚洲精品综合久久中文字幕| 91中文字幕一区二区| 亚洲欧美日韩一区综合网| 国产精品爽妇一区二区| 国产原创中文字幕国产av| 国产精品色哟哟入口| 绿岛电影院亚洲av| 中文字幕在线看日本| 国产精品国产三级国产专不| 亚洲最大av资源网站| 欧美va亚洲va日韩va综合| 中文字幕人妻一区色偷久久| 亚洲精品国产成人av在线| 欧美日韩国产高清在线| 337q日本亚洲欧洲大胆色噜噜 | 国产亚洲av综合人人澡精品小说| 欧美精品黄页在线视频免费| 久久视频网址在线观看| 日本人妻被黑人巨大中出| 麻豆精品av国产传媒mv| 91成人免费看片下载| 欧美一区二区三区中文电影| 中文字幕日韩无敌亚洲精品| 中文字幕人妻交换| 天天日,天天干,天天操| 青青草99久久精品国产综合| 欧美日韩一区二区三区观看| 天天色,天天操.| 欧美综合激情婷婷色| 成人 在线 一区二区三区 | 91精品国产自产在线观看免费| 亚洲国产综合久久灌醉| 久久精品国产亚洲av高清yw| 成人激情视频在线观看视频| 中国夫妻生出黑人宝宝| 欧美日韩午夜影视精品| 日韩狼窝日韩狼日韩在线观看视频| av小说免费在线看| 福利免费一区二区三区| 欧美日韩一区二区三区观看| 国产成人久久爽aa| 日本欧美内射少妇| 国产av天堂资源在线| 亚洲最大的成人一区二区| 欧美一区二区三区中文电影| 久久久久sm久久久久久| 日韩无毛黄色片亚洲| 国产免费超碰在线观看| 99国产精品久久久久久久成人热 | 久久精品国产亚洲夜色av| 蜜臀精品一区二区资源| 北条麻妃肛交一区二区| 污视频在线观看网| 精品成人一区二区三区四区影视| 国产又大又硬又粗又黄视频| 日韩成人影院免费观看| 日本女人啪啪视频| r18视频一区二区三区| 日韩欧美不卡视频| 久久久久久久国产麻豆| 国产一区二区三区精品小说| 观看在线免费av| 人妻日韩内射黄片一区二区| av中文字幕一区在线| 一本一道久久久久a精品综合| 91中文字幕一区二区| 黄色一级av特黄片| 国产精品一卡二卡久久久| 精品自拍小视频在线| 97超级碰碰碰碰精品久久| 久久精品国产亚洲av高清| 91国自产在线在线看完整| 日本不卡的在线播放| 亚洲中文黄色av| 国产原创中文字幕国产av| 最新中文字幕av| 亚洲人妻中文av| 精品成人av在线观| 日本熟女三级电影| 黑人系列番号一览表| 午夜亚洲av天堂影视在线| 精品国产乱码久久久久app| 亚洲国产精品乱码久久久久久久| 日韩,国产,欧美一级| 久久久亚洲熟妇熟女ⅹxxxav| 天天操天天啪天天干| 精品一区二区三区四区乱码| 久久se综合中文字幕| 欧美mv亚洲mv日韩mv| 亚洲天堂中文字幕精品在线观看| 国产成人精品视频小说| 在线一区二区三区四区av| 天天舔天天舔天天日| 麻豆αv片在线观看| 日韩人妻熟女av中字| 97人妻精品全国免费| 日本欧美内射少妇| 久久久久久免费视频久久久看| 国内精品视频免费在线播放| 日韩在线免费观看av网站| 午夜精品久久久久久久99热| 亚洲欧美日韩另类春色| 亚洲 激情 av在线| 国产日韩精品欧美激情在线| 清纯唯美激情国产精品| 一级欧美一级日韩片一级.| 日韩欧美另类少妇| 99久在线精品99re8蜜桃| av色在线观看网站| 丰满人妻一区二区三区四季| 欧美亚洲另类视频在线观看| 亚洲最新偷拍视频| 日韩无毛黄色片亚洲| 久久久久国产精品久久| 最新亚洲中文字幕av| 亚洲成人av在线免费播放| 色先锋久久亚洲中文字幕| 91麻豆欧美久久九色| 人妻午夜激情中文网| 国产精品色哟哟入口| 日韩性生活视频在线观看| 国内熟妇人妻色在线视频| 成人福利中文字幕在线| 色噜噜久久综合伊人超| www.日韩一二三| Av无码专区亚洲Av波多野吉衣| 国产又大又硬又粗又黄视频 | 中文字幕人妻交换| 少妇精品一区二区三区久久久| 熟女 中出 在线| 久久久精品国产蜜臀| 少女日本电视高清观看| 国内精品视频免费在线播放| 老鸭窝在线毛片观看视频| 99国产精品久久久久久久成人热 | 天天干天天操狠狠干| 99re99这里只有精品| 亚洲成人午夜在线| 五月激情婷婷久久伊人| 秋霞午夜电影久久久| 久久久人妻国产精品| 亚洲欧洲一区二区三区在线播放| 日韩一区二区三区在线播放| 蒂亚田中被黑人裸操xxx片| 99久久免费看少妇高潮 | 久久99视频久久99视频| 亚洲国产精品国自产拍性色| 91人人妻人人澡人人草精品| 久久久久夜夜夜综合国产| 99re在线视频精品视频| 成人三级福利视频网站大全| 日本aa 1级片| 国产欧美高清一区二区三区 | 无套中出内射人妻| 人妻a在线免费视频| 久久av一区二区三区四区五区| 亚洲一级黄片av| 日韩动作片在线免费观看| 亚洲一级黄片av| 五月婷婷色视频在线| 91精品国产综合久久久久久白拍| 专约老熟女丰满探花av| 日韩欧美中文字幕情色| 亚洲中文字幕18p| 日本极品少妇videossex| 欧美日韩免费高清不卡视频| 黄色一级av特黄片| 日韩欧美国内精品| 99er视频在线观看| 国产成人在线播放精品| 日韩亚洲天堂网站| 天天操天天日天天日干| 偷拍自拍 国产精品| 在线免费观看日韩欧美国产片 | 亚洲男人天堂网久久| 黑人中文字幕日本人妻| 中国a精久久久久| av2024男人天堂| 亚洲国产精品久久久蜜桃| 欧美日韩国产综合中文| 视频二区亚洲欧美在线观看| 欧美一区二区三区高高清视频| 日韩激情极品视频| 大尺度激情吻胸吃奶视频| www.一级黄色片.com| 国产视频激情在线区| 日韩人妻福利在线| 亚洲av日韩不卡一区| 欧美日韩免费精品视频| 日韩丝袜在线中文字幕| 久久精品日产第一区二区三| 少妇人妻av一区二区| 女人天堂国产精品资源麻豆| 人妻少妇视频一区| 久久riav中文精品| 91精品视频手机在线观看| 国产成人精品视频小说| 操美女完整版中文字幕| 狠狠亚洲婷婷综合色| 亚洲国产精品99久久午夜| www.麻豆在线观看| 九九在线免费视频精品| 亚洲最新偷拍视频| 99精品网站在线观看| 99人人妻人人澡人人| 人妻夜夜爽天天爽一区三级| 99re视频精品全部免| 国产成人亚洲综合麻豆| 亚洲国产精品乱码久久久久久久| 欧美国产成人精品一区二区三区| 美女图片视频久久99| 91人妻成人精品一区二区| 久久久免费观看完整版视频| 伊人伊人伊人伊人av在线| 天天躁日日躁狠狠躁av人妻| 国产激情久久一区二区| 日本极品少妇videossex| 久久69国产精品久久69软件| 五月开心婷婷中文字幕| 日韩黄色免费电影| 国产成人亚洲精品影院| 日本极品少妇videossex| 激情小说 另类小说 亚洲欧美| 中文字幕色区一区二区| 久久综合福利导航视频| 青青草99久久精品国产综合| 玖玖玖精品中文字幕| 国产五月婷婷综合视频| 五月婷婷丁香花综合| 涩涩久久涩涩综合天堂| 日韩伦理一区二区手机在线| 视频午夜在线观看视频| 日韩成人影院免费观看| 久久久久国产精品久久| 日韩偷拍久久久久久久久久| 久久一区二区欧美精品| 亚洲人妻中文字幕日韩| av在线一级免费看| 91久久这里都是精品| 久久久久久久久高清精品| 一本一道久久a久久精品综合蜜臀 国产日韩欧美另类一区二区三区 日产免费的一级黄片 | 好看的中文字幕一区二区三区| 一二三区欧美在线观看| 欧美熟妇在线视频播放| 亚洲中字性色av| 日韩欧美黄色小视频| 蜜乳av人妻一区二区三区| 亚洲成人免费在线观看| 中文字幕精品人妻一区二区三| 久久久人妻国产精品| 久久久日韩中文字幕| 国产一区二区伊人久久| 人人妻人人爽人人……| 精品久久久久中文字幕加勒比| 精品人妻伦一二二区久久懂色| 久久香蕉国产线看观看亚洲片| 欧美人妻中文字幕在线视频| 日本高清久久久久| 国产成人久久a免费观看| 国产激情高潮刺激叫喊视频| 久久久综合久久久大香蕉| 看日韩黄色的网站在线观看| 中文人妻av在线| 日韩人妻精品视频免费| 亚洲av激情文学综合| 91joy视频在线| 福利一区二区不卡国产| 91人人妻人人澡人人草精品| 国产又大又猛又粗又长| 成人国产黄片在线观看| 91国产久久久久久久| 国产精品九九九久久久久| 欧美亚洲av一区二区| 国产欧美一区二区三区久久| 久久一区二区av三区| 中国a精久久久久| 人妻一区二区三区中文免费视频| 在线成人教育平台有哪些| 国产一区二区伊人久久| 人人妻人人澡人人爽人人av| 日韩在线免费观看av网站| 久久草视频在线观看| 91中文字幕一区二区| 国产日韩一区二区免费| 五月天丁香久久一区二区| 熟女 中出 在线| 91中文字幕一区二区| 成人 短视频 在线| 91精品国产自产在线观看免费| 亚洲一级特黄色大片| 国产97视频在线精品| 久久久精品日本人妻| 亚洲欧美激情在线一区| 五月天色中文在线视频网站| av免费观看亚洲一区二区| 人妻少妇中文888久久| 激情五月天丁香在线| 色就色欧美综合在线影院| 久久久久久久二区三区| 亚洲高清一线av| 999av中文字幕| 区一区二区在线观看视频| 蜜桃视频久久一区免费观看入口| 东京热亚洲一区二区三区| 日本亚洲中文字幕不卡| 亚洲av日韩精品久久久久久小说 | 人人妻人人爽人人……| 中文字幕人妻呻吟在线 | 亚洲欧美激情在线一区| 亚洲成人精品女人久久久| 日韩丝袜在线中文字幕| 深夜宅男小视频在线| 欧美在线播放一区二区| 公侵人妻一区二区三区| 久久久久亚洲av专属首夜区| 少妇惨叫久久久久久久久久| 日本五十路熟女视频| 精品无人区麻豆乱码1区2区| 激动网国产手机在线| juy320友田真希中文字幕| 国产亚洲av日韩在线| 国产一区二区三区无码精品久久 | 一区二区三区中文人妻| 婷婷九九在线视频| 中文字幕你懂的在线| 成人版中文字幕一区| 日韩无毛黄色片亚洲| 天天干天天操天天日天天爽| 日韩av手机在线免费电影| 在线不卡日本v二区三区18| 日韩精品在线第8页| 久久99国产成人精品久久久| 天天日熟女少妇av| 91精品国产综合久久久久久白拍| 亚洲男人天堂九九九| 成人性福利免费电影| 亚州av综合在线| 国产最粗最爽最黄最狠的视频| 国产自拍 亚洲视频| 久久久久久久久一级| 91精品国产91久久久久久51| 亚洲女同性恋电影| 中文字幕在线av观看| 超碰人人人人人人人人人人人人人| 久久se综合中文字幕| 人妻互换中文字幕一区二区| 最新日韩在线一区二区| 久久九九精彩美女视频| 秋霞午夜影院在线| 国产成人在线播放精品| 九九在线免费视频精品| 国产亚洲av成人| 亚洲成人福利电影网| 91丨九色丨国产熟女| 起碰97视频在线观看| 日韩成人影院免费观看| 伊人久久大杳蕉综合牛牛| 久久精品视频这里只有精品 | 欧美在线播放一区二区| 国产精品乱码久久久不卡| 欧美国产成人精品一区二区三区| 国产熟女熟妇11p| 国产五月婷婷综合视频| 亚洲精品乱码久久久v| 亚洲精品mv免费看| 国产激情高潮刺激叫喊视频| 污的视频在线观看8| 在线视频中文字幕日韩一级| 成人日韩电影免费观看| 不卡一区二区在线视频观看| 日本不卡一区二区三区四区五区 | 人妻少妇第一区二区三区| 欧美日韩免费高清不卡视频| 久碰在线视频在线观看视频| 欧美亚洲一区二区三区四区五区| 色欲狠狠躁天天无码中文字幕| 中文字幕人妻一区二区一| 亚洲国产精品久久久蜜桃| 超碰97免费青青热| 日韩视频国产视频| 国产日韩成人av电影在线观看| 色在线播放国产一区| 久久爱爱视频在线播放| 久久久久久久av麻豆| 亚洲人妻中文av| 国产免费超碰在线观看| 亚州av综合在线| 天天干天天日天天要天天爽| 欧美精品99久久久久久| 香港三级日韩三级| 欧美日韩午夜影视精品| www.久久精品草| 欧美综合激情婷婷色| 精品国产乱码久久久久软件| 在线视频国产av| 亚洲少妇精品自拍av| 99久久久久免费精品国产国产| 日韩成人av激情| 国产熟女人妻一区二′区久久| 人妻少妇中文888久久| 日本不卡在线视频播放| 日夜狠狠搞 蜜桃视频| 蜜臀av性久久久久av蜜桃| 久久这里只有精品18岁| janpense人妻中文字幕| 日韩激情视频高清| 欧美一区二区三区中文电影| 成人乱人乱一区二区三区| 激情四射久久不能爱五月婷婷| 激情五月婷婷中文视频| 欧美一区二区三区电影院| 成人av在线观看久久久| 精品人妻中出一区二区| 亚洲av成在线播放| 久久人妻中出中文字幕| 五十路熟女在线视频| 91成人在线观看喷潮视频| 日韩s片在线观看| 日韩精品在线观看网页| 欧美亚洲一区二区三区四区五区| 久久久久久久久久久久久久撸| 丰满熟女一区二区三区三州| 亚洲成人免费在线观看| 国产又大又猛又粗又黄的视频| 天天日天天操天天干天| 日产国产亚洲av| 麻豆精品一区二区视频| 久久99久久99精品免观看| 日韩av一区二区免费| 中文字幕人妻呻吟在线 | 中文成人在线视频| 日韩丝袜欧美人妻制服网站| 天天日,天天干,天天操| 一区二区少妇xxx| 久久夜色国产精品亚洲| 天天干天天操天天日天天爽| 国产一区二区日韩av| 女人天堂国产精品资源麻豆| 国产精品免费区二区三区观看 | 精品国产乱码久久久久软件| 中文字幕人妻一二三区| 亚洲人成看片网址| 亚洲男人天堂网久久| 露脸熟女一区二区三区| 久久人妻中出中文字幕| 国产69av一区二区三区| 日韩欧美中文字幕情色| 久久视频网址在线观看| 国产成人精品一区二三区| 激动网国产手机在线| 懂色av粉嫩av绯色| 日韩一区二区三区三级电影| 久久久亚洲熟妇熟女ⅹxxxav| 2019中文字幕视频在线观看| 区一区二区在线观看视频| 蜜桃视频av在线观看| 91成人在线观看视频| 一区二区三区精品自拍视频| 日韩av男人的天堂在线| 久久精品日产第一区二区三| 日韩成人激情电影在线| 亚洲天堂色一区二区| 国产日韩一区二区免费| 色噜噜久久综合伊人超| 中文字幕乱码一区二| 热re99久久精品国产首页| 日韩成人影院免费观看| 国产欧美日韩免费成人| 麻豆αv片在线观看| 99久久免费看少妇高潮| 亚洲av口爆深喉| 亚洲av熟女五十路中出 | 久久在精品线影院精品国产| 亚洲精品无码久久蜜桃网站| 久久国产乱子伦精品免费女| 手机视频国产精品| 中文字幕 日韩 在线 91| 国产伦一区二区三区免费视频| 不卡一区二区在线视频观看| 日韩成人av电影免费| av2024男人天堂| 91丨九色丨国产熟女| 337q日本亚洲欧洲大胆色噜噜| 97超级碰碰碰碰精品久久| av2024男人天堂| 日韩无毛黄色片亚洲| 日韩国产欧美成人综合另类| 日韩丝袜在线中文字幕| 十八禁国产精品久久久久久久| 欧美在线播放一区二区| 国产精品原创久久久久久| 国产熟女大全一区二区三区 | 99久久精品一品区免视观看| 秋霞午夜影院在线| 久久久久久久久高清精品| 美女被人操视频在线观看 | 亚洲国产aⅴ精品视觉盛宴| 中文字幕一区二区三区你懂得| 久久久精品一区二区蜜av| 人妻日韩亚洲中文字幕av| 男人操女人的逼视频| 日本三区不卡高清更新二区| 国产黄色精品久久久| 精彩久久国产久久久| 中文字幕人妻呻吟在线 | 亚洲国产中文制服人妻| 欧美精品日韩国产一区原创色| 日日夜夜天天久久久久久| 日韩欧美不卡视频| 日本高清av一区二区三区| 天堂精品中文av| 在线观看国产成人91| 91成人免费看片下载| av中文字幕一区在线| 99免费在线观看精品| 男人天堂2022中文字幕| 日本久久久免费看| 麻豆精品av国产传媒mv| 99国产精品视频免费的| 91久久香蕉国产孰女线看| 黄色一级大片在线免费看| 欧美精品日韩国产一区原创色| 久久精品国产99亚洲| 亚洲免费av资源网站| 国产又大又爽aaa毛片| 久久香蕉国产线看观看亚洲片| 国产欧美高清一区二区三区 | 久久久久亚洲av专属首夜区| 日本不卡的在线播放| 日本一区激情在线| 操美女完整版中文字幕| 欧美亚洲一区二区三区四区五区| 人妻少妇中文字幕的| 亚洲精品中文字幕下载| 漂亮的人妻中文字幕| 久久久久久免费视频久久久看| 国产亚洲欧美日一区二区三区| 91热国内精品永久免费观看| 中文字幕有码第二页| 青草伊人天堂在线| 日韩欧美亚洲中出在线| 欧美一级特黄aaaa色| 国产人妻av一区二区三区色| 日本做爰三级床戏| 69精品久久久久久精品| 日韩字幕在线一区二区三区| 人妻午夜激情中文网| 欧美日韩免费高清不卡视频| 国产a亚洲精品久久久久| 国产精品av自拍偷拍| 国产91轻吻在线看| 日本不卡在线视频播放| 色噜噜久久综合伊人超| 黑人久久久免费观看| 日本成人久久久久久久久| 在线授课成人高考| 国产精品av自拍偷拍| 久久久人妻国产精品| 可以免费在线看黄色的网站| 日韩性生活视频在线观看| 国产91精彩天天久久久| 一区二区少妇xxx| 91精品国产福利线观看日日| 1024香蕉在线观看| 成人午夜电影在线免费| 日韩欧美一区二区三区在| 精品久久久久中文字幕加勒比| 久久久亚洲熟妇熟女ⅹxxxav| 美女被人操视频在线观看 | 天堂av最新地址| 日韩黄色免费电影| 亚洲欧美一区免费观看视频| 天天摸天天舔天天玩天天谢| 少女日本电视高清观看| 日韩av一区二区免费| 国产精品福利2020久久| 久久久久成人精品在线| 国产中文精品视频久久| 国产最粗最爽最黄最狠的视频| 欧美色一区二区三区四区五区| 亚洲av熟女五十路中出 | 亚洲国产综合久久灌醉| 99re热精品在线观看| 人妻久久在线视频| 日韩欧美不卡视频| 99re在线视频精品最新| 国产激情高潮刺激叫喊视频| 99热资源网在线观看| 91亚洲国产系列精品第56| 亚洲成人动漫av| 麻豆精品一区二区视频| 粉嫩av一区二区在线| 中文字幕乱码一区二| 国产精品,亚洲视频| 久久久久久久国产麻豆| 日韩人妻av在线| 久久人人爽人人爽人人片av剧情| 亚洲av日韩av高清av| 日韩中文字幕性感人妻| 69精品久久久....| 99re在线精品视频99| 337q日本亚洲欧洲大胆色噜噜| 亚洲国产精品99久久午夜| 久久久精品日本人妻| 区一区二区在线观看视频| 久久精品国产亚洲av成人看光了| 人妻少妇第一区二区三区| 亚洲av色资源站| 99色一区二区三区| 欧美国产日韩成人自拍|