日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

优达学城《DeepLearning》2-1:卷积神经网络

發布時間:2023/11/27 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优达学城《DeepLearning》2-1:卷积神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次由3部分組成:

  1. 可視化卷積神經網絡。
  2. 設計和訓練一個CNN來對MNIST手寫數字分類。
  3. 設計并訓練一個CNN來對CIFAR10數據集中的圖像進行分類。

?

本次遇到的深度學習核心概念:

  1. SGD優化器:GD就是梯度下降(Gradient Descent),SGD就是隨機梯度下降。SGD相對于GD優勢在于:①不用計算全部圖片輸入網絡的梯度,而用小批量圖來更新一次網絡,極大提升訓練速度。②“歪歪扭扭”地走,天生容易跳出局部最優點,最終訓練的精度往往比GD高的多。
  2. ?Sobel 算子:是一個離散微分算子, 結合了高斯平滑和微分求導,主要用來計算圖像中某一點橫向/縱向上的近似梯度,如果梯度值大于某一個閾值,則認為該點為邊緣點(像素值發生顯著變化的地方)。

    1. 圖像近似梯度計算如下:

    2. 所以,sobel x和sobel y參數一般如下:

  3. 交叉熵損失

    1. 二分類的交叉熵損失公式:(y為標簽,y^為預測為正樣本的概率)

    2. 訓練過程中代價函數是對m個樣本的損失函數求和然后除以m:

    3. 多分類交叉熵損失:

      1. K是種類數量
      2. y是標簽,也就是如果類別是 i,則 yi?=1,否則等于0
      3. p是神經網絡的輸出,也就是指類別是 i 的概率。這個輸出值就是用 softmax 計算得來的。

?

?

?

?

目錄

1 可視化卷積神經網絡

1.1 自定義濾波器

1.2 可視化卷積層

1.3 可視化池化層

1.3.1 Import the image

1.3.2 Define and visualize the filters

1.3.3 Define convolutional and pooling layers

1.3.4 Visualize the output of each filter

1.3.5 Visualize the output of the pooling layer

2 設計和訓練一個CNN對MNIST手寫數字分類

2.1 加載并可視化數據

2.1.1 可視化訓練集中一個batch圖像集

2.1.2 觀察單個圖像更詳細的信息

2.2 定義網絡結構

2.3 指定損失函數和優化器

2.4 訓練網絡

2.5 測試訓練好的網絡

2.6 可視化test集預測結果

3 設計并訓練一個CNN來對CIFAR10數據集中的圖像進行分類

3.1 CUDA測試

3.2 加載數據

3.3 可視化一批訓練數據

3.4 更詳細地查看圖像

3.5 定義網絡結構

3.6 指定損失函數和優化器

3.7 訓練網絡

3.8 加載模型

3.9 測試訓練好的模型

3.10 問題:你的模型有哪些缺點,如何改進?

3.11 可視化test集預測結果


?

1 可視化卷積神經網絡

1.1 自定義濾波器

導入資源并顯示圖像:

import matplotlib.pyplot as plt
import matplotlib.image as mpimgimport cv2
import numpy as np%matplotlib inline# Read in the image
image = mpimg.imread('data/curved_lane.jpg')plt.imshow(image)

將圖像轉換為灰度圖:

# Convert to grayscale for filtering
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

TODO:創建自定義內核

下面,我們為您提供了一種常見的邊緣檢測過濾器:Sobel操作符。

Sobel濾波器常用于邊緣檢測和圖像強度模式的提取。對圖像應用Sobel濾波器是一種分別獲取圖像在x或y方向上的導數(近似值)的方法。運算符如下所示。

由您創建一個sobel x操作符并將其應用于給定的圖像。

作為一個挑戰,看看你是否可以對圖像完成如下一系列濾波操作:模糊圖像(采取平均像素),然后一個檢測邊緣。

# Create a custom kernel# 3x3 array for edge detection
sobel_y = np.array([[ -1, -2, -1], [ 0, 0, 0], [ 1, 2, 1]])## TODO: Create and apply a Sobel x operator
sobel_x = np.array([[ -1, 0, 1], [ -2, 0, 2], [ -1, 0, 1]])# Filter the image using filter2D, which has inputs: (grayscale image, bit-depth, kernel)  
filtered_image_x = cv2.filter2D(gray, -1, sobel_x)
filtered_image_y = cv2.filter2D(gray, -1, sobel_y)plt.figure(figsize=(14,14))#設置圖像尺寸(畫面大小其實是 1400 * 1400)#要生成兩行兩列,這是第一個圖plt.subplot('行','列','編號')
plt.subplot(1,2,1) 
plt.title('sobel x')
plt.imshow(filtered_image_x, cmap='gray')plt.subplot(1,2,2) 
plt.title('sobel y')
plt.imshow(filtered_image_y, cmap='gray')plt.show()

結果:

測試其他過濾器!

我們鼓勵您創建其他類型的過濾器并應用它們來查看發生了什么!作為可選練習,請嘗試以下操作:

  1. 創建具有小數值參數的過濾器。
  2. 創建5x5過濾器
  3. 將過濾器應用于images目錄中的其他圖像。

image = mpimg.imread('data/bridge_trees_example.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)sobel_y = np.array([[ -1, -2, -1], [ 0, 0, 0], [ 1, 2, 1]])sobel_y_2 = np.array([[ -1.5, -2.5, -1.5], [ 0, 0, 0], [ 1.5, 2.5, 1.5]])sobel_x = np.array([[ -1, 0, 1], [ -2, 0, 2], [ -1, 0, 1]])sobel_x_5x5 = np.array([[ -1, 0, 0, 0, 1], [ -1, 0, 0, 0, 1],[ -2, 0, 0, 0, 2], [ -1, 0, 0, 0, 1],[ -1, 0, 0, 0, 1]])# Filter the image using filter2D, which has inputs: (grayscale image, bit-depth, kernel)  
filtered_image_y = cv2.filter2D(gray, -1, sobel_y)
filtered_image_y_2 = cv2.filter2D(gray, -1, sobel_y_2)
filtered_image_x = cv2.filter2D(gray, -1, sobel_x)
filtered_image_x_5x5 = cv2.filter2D(gray, -1, sobel_x_5x5)plt.figure(figsize=(14, 14))#設置圖像尺寸(畫面大小其實是 1200 * 1200)plt.subplot(3,2,1) 
plt.title('image')
plt.imshow(image)plt.subplot(3,2,2) 
plt.title('gray')
plt.imshow(gray, cmap='gray')plt.subplot(3,2,3) 
plt.title('sobel y')
plt.imshow(filtered_image_y, cmap='gray')plt.subplot(3,2,4) 
plt.title('sobel y decimal')
plt.imshow(filtered_image_y_2, cmap='gray')plt.subplot(3,2,5) 
plt.title('sobel x')
plt.imshow(filtered_image_x, cmap='gray')plt.subplot(3,2,6) 
plt.title('sobel x 5*5')
plt.imshow(filtered_image_x_5x5, cmap='gray')plt.show()

結果:

1.2 可視化卷積層

在本筆記本中,我們將卷積層的四個過濾輸出(又稱激活圖)可視化。

在這個例子中,我們定義了四個濾波器,通過初始化卷積層的權值來應用于輸入圖像,經過訓練的CNN將學習這些權值的值。

導入圖像:

import cv2
import matplotlib.pyplot as plt
%matplotlib inline# TODO: Feel free to try out your own images here by changing img_path
# to a file path to another image on your computer!
img_path = 'data/udacity_sdc.png'# load color image 
bgr_img = cv2.imread(img_path)
# convert to grayscale
gray_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)# normalize, rescale entries to lie in [0,1]
gray_img = gray_img.astype("float32")/255# plot image
plt.imshow(gray_img, cmap='gray')
plt.show()

定義并可視化過濾器:

# visualize all four filters
fig = plt.figure(figsize=(10, 5))
for i in range(4):ax = fig.add_subplot(1, 4, i+1, xticks=[], yticks=[])ax.imshow(filters[i], cmap='gray')ax.set_title('Filter %s' % str(i+1))width, height = filters[i].shapefor x in range(width):for y in range(height):ax.annotate(str(filters[i][x][y]), xy=(y,x),horizontalalignment='center',verticalalignment='center',color='white' if filters[i][x][y]<0 else 'black')

定義卷積層

初始化單個卷積層,使其包含所有創建的過濾器。請注意,您沒有訓練此網絡;您正在卷積層中初始化權重,以便可以直觀地看到前向傳播此網絡后發生的情況!

下面,我定義了一個名為Net類的結構,它有一個卷積層,可以包含四個4x4灰度過濾器。

import torch
import torch.nn as nn
import torch.nn.functional as F# define a neural network with a single convolutional layer with four filters
class Net(nn.Module):def __init__(self, weight):super(Net, self).__init__()# initializes the weights of the convolutional layer to be the weights of the 4 defined filtersk_height, k_width = weight.shape[2:]# assumes there are 4 grayscale filtersself.conv = nn.Conv2d(1, 4, kernel_size=(k_height, k_width), bias=False)self.conv.weight = torch.nn.Parameter(weight)def forward(self, x):# calculates the output of a convolutional layer# pre- and post-activationconv_x = self.conv(x)activated_x = F.relu(conv_x)# returns both layersreturn conv_x, activated_x# instantiate the model and set the weights
weight = torch.from_numpy(filters).unsqueeze(1).type(torch.FloatTensor)
model = Net(weight)# print out the layer in the network
print(model)

可視化每個過濾器的輸出

首先,我們將定義一個helper函數,即接受特定層和過濾器數量(可選參數)的?viz_layer,并在圖像通過后顯示該層的輸出。

# helper function for visualizing the output of a given layer
# default number of filters is 4
def viz_layer(layer, n_filters= 4):fig = plt.figure(figsize=(20, 20))for i in range(n_filters):ax = fig.add_subplot(1, n_filters, i+1, xticks=[], yticks=[])# grab layer outputsax.imshow(np.squeeze(layer[0,i].data.numpy()), cmap='gray')ax.set_title('Output %s' % str(i+1))

在應用ReLu激活函數之前和之后,讓我們看看卷積層的輸出。

# plot original image
plt.imshow(gray_img, cmap='gray')# visualize all filters
fig = plt.figure(figsize=(12, 6))
fig.subplots_adjust(left=0, right=1.5, bottom=0.8, top=1, hspace=0.05, wspace=0.05)
for i in range(4):ax = fig.add_subplot(1, 4, i+1, xticks=[], yticks=[])ax.imshow(filters[i], cmap='gray')ax.set_title('Filter %s' % str(i+1))# convert the image into an input Tensor
gray_img_tensor = torch.from_numpy(gray_img).unsqueeze(0).unsqueeze(1)# get the convolutional layer (pre and post activation)
conv_layer, activated_layer = model(gray_img_tensor)# visualize the output of a conv layer
viz_layer(conv_layer)

結果:

ReLu 激活函數

在這個模型中,我們使用了一個激活函數來縮放卷積層的輸出。我們選擇了一個ReLu函數來實現這一點,這個函數只是將所有負像素值轉換為0(黑色)。關于輸入像素值x,請參見下圖中的公式。

# after a ReLu is applied
# visualize the output of an activated conv layer
viz_layer(activated_layer)

結果:

1.3 可視化池化層

在這個筆記本中,我們添加并可視化了CNN中maxpooling層的輸出。

卷積層+激活函數、池化層和線性層(用于創建所需的輸出大小)構成CNN的基本層。

1.3.1 Import the image

1.3.2 Define and visualize the filters

1.3.3 Define convolutional and pooling layers

在下一個單元中,我們初始化一個卷積層,以便它包含所有創建的過濾器。然后添加一個maxpooling層,內核大小為(2x2),這樣您就可以看到在這一步之后圖像分辨率已經降低了!

maxpooling層減少了輸入的大小,并且只保留最活躍的像素值。下面是一個2x2池內核的示例,步長為2,應用于一小塊灰度像素值;將面片的大小減少2倍。只有2x2中的最大像素值保留在新的合并輸出中。

1.3.4 Visualize the output of each filter

首先,我們將定義一個helper函數,即接受特定層和過濾器數量(可選參數)的viz_layer,并在圖像通過后顯示該層的輸出。

# helper function for visualizing the output of a given layer
# default number of filters is 4
def viz_layer(layer, n_filters= 4):fig = plt.figure(figsize=(20, 20))for i in range(n_filters):ax = fig.add_subplot(1, n_filters, i+1)# grab layer outputsax.imshow(np.squeeze(layer[0,i].data.numpy()), cmap='gray')ax.set_title('Output %s' % str(i+1))

讓我們看看應用ReLu激活函數后卷積層的輸出:

# plot original image
plt.imshow(gray_img, cmap='gray')# visualize all filters
fig = plt.figure(figsize=(12, 6))
fig.subplots_adjust(left=0, right=1.5, bottom=0.8, top=1, hspace=0.05, wspace=0.05)
for i in range(4):ax = fig.add_subplot(1, 4, i+1, xticks=[], yticks=[])ax.imshow(filters[i], cmap='gray')ax.set_title('Filter %s' % str(i+1))# convert the image into an input Tensor
gray_img_tensor = torch.from_numpy(gray_img).unsqueeze(0).unsqueeze(1)# get all the layers 
conv_layer, activated_layer, pooled_layer = model(gray_img_tensor)# visualize the output of the activated conv layer
viz_layer(activated_layer)

結果:

1.3.5 Visualize the output of the pooling layer

然后,看看池層的輸出。池化層將上圖中的特征映射作為輸入,通過某種池化因子,通過在給定的內核區域中構造一個只有最大值(最亮值)的新的、更小的圖像來降低這些映射的維數。

仔細觀察x、y軸上的值,以查看圖像大小的變化。

?

2 設計和訓練一個CNN對MNIST手寫數字分類

在本筆記本中,我們將訓練一個MLP(Multi-Layer Perceptron 多層感知器)來對MNIST數據庫手寫數字數據庫中的圖像進行分類。

該過程將分為以下步驟:

  1. 加載并可視化數據
  2. 定義神經網絡
  3. 訓練模型
  4. 在測試數據集上評估我們訓練模型的性能!

在開始之前,我們必須導入處理數據和PyTorch所需的庫。

# import libraries
import torch
import numpy as np

2.1 加載并可視化數據

下載可能需要一些時間,您應該可以在加載數據時看到您的進度。如果要一次加載更多數據,也可以選擇更改批處理大小。

這個單元格將為每個數據集創建數據加載器。

# The MNIST datasets are hosted on yann.lecun.com that has moved under CloudFlare protection
# Run this script to enable the datasets download
# Reference: https://github.com/pytorch/vision/issues/1938from six.moves import urllib
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
from torchvision import datasets
import torchvision.transforms as transforms# number of subprocesses to use for data loading
num_workers = 0
# how many samples per batch to load
batch_size = 20# convert data to torch.FloatTensor
transform = transforms.ToTensor()# choose the training and test datasets
train_data = datasets.MNIST(root='data', train=True,download=True, transform=transform)
test_data = datasets.MNIST(root='data', train=False,download=True, transform=transform)# prepare data loaders
train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size,num_workers=num_workers)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=batch_size, num_workers=num_workers)

2.1.1 可視化訓練集中一個batch圖像集

分類任務的第一步是查看數據,確保數據正確加載,然后對數據中的模式進行任何初始觀察。

2.1.2 觀察單個圖像更詳細的信息

2.2 定義網絡結構

該網絡結構將784維度張量作為輸入,并輸出長度為10(我們的類別數)的張量,該張量指示輸入圖像的類分數。這個特殊的例子使用了2個隱藏層和dropout來避免過度擬合。

import torch.nn as nn
import torch.nn.functional as F## TODO: Define the NN architecture
class Net(nn.Module):def __init__(self):super(Net, self).__init__()# linear layer (784 -> 1 hidden node)self.fc1 = nn.Linear(28 * 28, 256)self.fc2 = nn.Linear(256, 64)self.fc3 = nn.Linear(64, 10)self.dropout = nn.Dropout(0.2)def forward(self, x):# flatten image inputx = x.view(-1, 28 * 28)# add hidden layer, with relu activation functionx = F.relu(self.fc1(x))x = self.dropout(x)x = F.relu(self.fc2(x))x = self.dropout(x)x = F.log_softmax(self.fc3(x), dim=1)  return x# initialize the NN
model = Net()
print(model)

2.3 指定損失函數和優化器

建議使用交叉熵損失進行分類。如果您查看文檔,您可以看到PyTorch的交叉熵函數將softmax函數應用于輸出層,然后計算日志損失。

## TODO: Specify loss and optimization functions
from torch import nn, optim
# specify loss function
criterion = nn.CrossEntropyLoss()# specify optimizer
optimizer = optim.SGD(model.parameters(), lr=0.01)

2.4 訓練網絡

從一批數據中訓練/學習的步驟在下面的注釋中描述:

  • 1.清除所有優化變量的梯度
  • 2.前向傳播:通過將輸入傳遞到模型來計算預測輸出
  • 3.計算損失
  • 4.反向傳播:計算相對于模型參數的損失梯度
  • 5.執行單個優化步驟(參數更新)
  • 6.更新平均訓練損失

以下是30個epoch的循環訓練;請隨意更改此值。目前,我們建議在20-50個epoch之間。在訓練時,看看訓練損失的值是如何隨著時間的推移而減少的。我們希望它減少,同時也避免過擬合訓練數據。

# number of epochs to train the model
n_epochs = 30  # suggest training between 20-50 epochsmodel.train() # prep model for trainingfor epoch in range(n_epochs):# monitor training losstrain_loss = 0.0#################### train the model ####################for data, target in train_loader:# clear the gradients of all optimized variablesoptimizer.zero_grad()# forward pass: compute predicted outputs by passing inputs to the modeloutput = model(data)# calculate the lossloss = criterion(output, target)# backward pass: compute gradient of the loss with respect to model parametersloss.backward()# perform a single optimization step (parameter update)optimizer.step()# update running training losstrain_loss += loss.item()*data.size(0)# print training statistics # calculate average loss over an epochtrain_loss = train_loss/len(train_loader.dataset)print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch+1, train_loss))

訓練結果:

  • Epoch: 1 ?? ?Training Loss: 0.950629
  • Epoch: 2 ?? ?Training Loss: 0.378016
  • Epoch: 3 ?? ?Training Loss: 0.292131
  • Epoch: 4 ?? ?Training Loss: 0.237494
  • Epoch: 5 ?? ?Training Loss: 0.203416
  • Epoch: 6 ?? ?Training Loss: 0.178869
  • Epoch: 7 ?? ?Training Loss: 0.157555
  • Epoch: 8 ?? ?Training Loss: 0.143985
  • Epoch: 9 ?? ?Training Loss: 0.132015
  • Epoch: 10 ?? ?Training Loss: 0.122434
  • Epoch: 11 ?? ?Training Loss: 0.113976
  • Epoch: 12 ?? ?Training Loss: 0.105239
  • Epoch: 13 ?? ?Training Loss: 0.098839
  • Epoch: 14 ?? ?Training Loss: 0.093791
  • Epoch: 15 ?? ?Training Loss: 0.088727
  • Epoch: 16 ?? ?Training Loss: 0.081909
  • Epoch: 17 ?? ?Training Loss: 0.079282
  • Epoch: 18 ?? ?Training Loss: 0.074924
  • Epoch: 19 ?? ?Training Loss: 0.071149
  • Epoch: 20 ?? ?Training Loss: 0.068345
  • Epoch: 21 ?? ?Training Loss: 0.065399
  • Epoch: 22 ?? ?Training Loss: 0.062431
  • Epoch: 23 ?? ?Training Loss: 0.060230
  • Epoch: 24 ?? ?Training Loss: 0.056332
  • Epoch: 25 ?? ?Training Loss: 0.055859
  • Epoch: 26 ?? ?Training Loss: 0.053873
  • Epoch: 27 ?? ?Training Loss: 0.050490
  • Epoch: 28 ?? ?Training Loss: 0.049184
  • Epoch: 29 ?? ?Training Loss: 0.046799
  • Epoch: 30 ?? ?Training Loss: 0.047051

2.5 測試訓練好的網絡

最后,我們在以前看不到的測試數據上測試了我們的最佳模型,并評估了它的性能。在看不見的數據上進行測試是檢驗我們的模型是否具有良好的泛化能力的一個好方法。在這個分析中,細化模型,看看這個模型在每個類上的表現,以及它的總體損失和準確性,也可能是有用的。

model.eval()?將模型中的所有層設置為評估模式。這會影響像dropout這樣的層,這些層在訓練期間以一定的概率關閉節點,但是評估時dropout的功能會被關閉

# initialize lists to monitor test loss and accuracy
test_loss = 0.0
class_correct = list(0. for i in range(10))
class_total = list(0. for i in range(10))model.eval() # prep model for *evaluation*for data, target in test_loader:# forward pass: compute predicted outputs by passing inputs to the modeloutput = model(data)# calculate the lossloss = criterion(output, target)# update test loss test_loss += loss.item()*data.size(0)# convert output probabilities to predicted class_, pred = torch.max(output, 1)# compare predictions to true labelcorrect = np.squeeze(pred.eq(target.data.view_as(pred)))# calculate test accuracy for each object classfor i in range(batch_size):label = target.data[i]class_correct[label] += correct[i].item()class_total[label] += 1# calculate and print avg test loss
test_loss = test_loss/len(test_loader.dataset)
print('Test Loss: {:.6f}\n'.format(test_loss))for i in range(10):if class_total[i] > 0:print('Test Accuracy of %5s: %2d%% (%2d/%2d)' % (str(i), 100 * class_correct[i] / class_total[i],class_correct[i], class_total[i]))else:print('Test Accuracy of %5s: N/A (no training examples)' % (classes[i]))print('\nTest Accuracy (Overall): %2d%% (%2d/%2d)' % (100. * np.sum(class_correct) / np.sum(class_total),np.sum(class_correct), np.sum(class_total)))

2.6 可視化test集預測結果

此單元格按以下格式顯示測試圖像及其標簽:predicted (ground-truth)。文本將是綠色的準確分類的例子和紅色的錯誤預測。

# obtain one batch of test images
dataiter = iter(test_loader)
images, labels = dataiter.next()# get sample outputs
output = model(images)
# convert output probabilities to predicted class
_, preds = torch.max(output, 1)
# prep images for display
images = images.numpy()# plot the images in the batch, along with predicted and true labels
fig = plt.figure(figsize=(25, 4))
for idx in np.arange(20):ax = fig.add_subplot(2, 20/2, idx+1, xticks=[], yticks=[])ax.imshow(np.squeeze(images[idx]), cmap='gray')ax.set_title("{} ({})".format(str(preds[idx].item()), str(labels[idx].item())),color=("green" if preds[idx]==labels[idx] else "red"))

3 設計并訓練一個CNN來對CIFAR10數據集中的圖像進行分類

在本筆記本中,我們訓練CNN對CIFAR-10數據庫中的圖像進行分類。

該數據庫中的圖像是小彩色圖像,分為10個類;下面是一些示例圖片。

3.1 CUDA測試

由于這些是更大(32x32x3)的圖像,因此使用GPU加速訓練可能會很有用。CUDA是一個并行計算平臺,CUDA張量與典型張量相同,只是利用GPU進行計算。

3.2 加載數據

下載可能需要一分鐘。我們加載訓練和測試數據,將訓練數據拆分為訓練和驗證集,然后為每個數據集創建數據加載器。

from torchvision import datasets
import torchvision.transforms as transforms
from torch.utils.data.sampler import SubsetRandomSampler# number of subprocesses to use for data loading
num_workers = 0
# how many samples per batch to load
batch_size = 20
# percentage of training set to use as validation
valid_size = 0.2# convert data to a normalized torch.FloatTensor
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])# choose the training and test datasets
train_data = datasets.CIFAR10('data', train=True,download=True, transform=transform)
test_data = datasets.CIFAR10('data', train=False,download=True, transform=transform)# obtain training indices that will be used for validation
num_train = len(train_data)
indices = list(range(num_train))
np.random.shuffle(indices)
split = int(np.floor(valid_size * num_train))
train_idx, valid_idx = indices[split:], indices[:split]# define samplers for obtaining training and validation batches
train_sampler = SubsetRandomSampler(train_idx)
valid_sampler = SubsetRandomSampler(valid_idx)# prepare data loaders (combine dataset and sampler)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size,sampler=train_sampler, num_workers=num_workers)
valid_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, sampler=valid_sampler, num_workers=num_workers)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=batch_size, num_workers=num_workers)# specify the image classes
classes = ['airplane', 'automobile', 'bird', 'cat', 'deer','dog', 'frog', 'horse', 'ship', 'truck']

3.3 可視化一批訓練數據

3.4 更詳細地查看圖像

在這里,我們將標準化后的紅色、綠色和藍色(RGB)顏色通道視為三個獨立的灰度強度圖像。

rgb_img = np.squeeze(images[6]) #上圖第6序號的紅色鳥
channels = ['red channel', 'green channel', 'blue channel']fig = plt.figure(figsize = (36, 36)) 
for idx in np.arange(rgb_img.shape[0]):ax = fig.add_subplot(1, 3, idx + 1)img = rgb_img[idx]ax.imshow(img, cmap='gray')ax.set_title(channels[idx])width, height = img.shapethresh = img.max()/2.5for x in range(width):for y in range(height):val = round(img[x][y],2) if img[x][y] !=0 else 0ax.annotate(str(val), xy=(y,x),horizontalalignment='center',verticalalignment='center', size=8,color='white' if img[x][y]<thresh else 'black')

結果如下(圖像可以放大查看):

?

3.5 定義網絡結構

這一次,您將定義一個CNN架構:

  • 卷積層,可以看作是過濾圖像的濾波器堆疊。
  • Maxpooling層,它減少輸入的x-y大小,只保留前一層中最活躍的像素。
  • 通常的線性+dropout層,以避免過度擬合,并產生一個10維度的輸出。

下面的圖片和代碼中顯示了一個具有兩個卷積層的網絡,您已經獲得了具有一個卷積層和一個maxpooling層的起始代碼。

TODO:定義具有多個卷積層的模型,并定義前饋網絡行為。

包含的卷積層越多,模型可以檢測到的顏色和形狀的模式就越復雜。建議您的最終模型包括2或3個卷積層以及線性層+dropout,以避免過擬合。

將相關模型的現有研究和實現作為定義您自己的模型的起點是一種很好的做法。您可能會發現查看這個PyTorch分類示例或這個更復雜的Keras示例有助于確定最終結構。

https://github.com/pytorch/tutorials/blob/master/beginner_source/blitz/cifar10_tutorial.py

https://github.com/keras-team/keras/blob/master/examples/cifar10_cnn.py

卷積層的輸出大小:

為了計算給定卷積層的輸出大小,我們可以執行以下計算(摘自斯坦福的cs231n課程):

  • 我們可以計算輸出卷的空間大小,作為輸入卷大小(W)、內核大小(F)、應用它們的步長(S)和邊界上使用的零填充量(P)的函數。計算輸出的正確公式為:(W?F+2P)/S + 1。

例如,對于7x7輸入和3x3濾波器,步幅1和pad 0,我們將得到5x5輸出。如果用步幅2,我們可以得到3x3的輸出。

import torch.nn as nn
import torch.nn.functional as F# define the CNN architecture
class Net(nn.Module):def __init__(self):super(Net, self).__init__()# convolutional layerself.conv1 = nn.Conv2d(3, 16, 3, padding=1) # convolutional layerself.conv2 = nn.Conv2d(16, 32, 3, padding=1)# convolutional layerself.conv3 = nn.Conv2d(32, 64, 3, padding=1)# max pooling layerself.pool = nn.MaxPool2d(2, 2)# linear layer (64 * 4 * 4 -> 200)self.fc1 = nn.Linear(64 * 4 * 4, 200)# linear layer (200 -> 10)self.fc2 = nn.Linear(200, 10)# dropout layer (p=0.2)self.dropout = nn.Dropout(0.2)def forward(self, x):# add sequence of convolutional and max pooling layersx = self.pool( F.relu( self.conv1(x))) #輸出維度:16 * 16*16x = self.pool( F.relu( self.conv2(x))) #輸出維度:32 * 8*8x = self.pool( F.relu( self.conv3(x))) #輸出維度:64 * 4*4# flatten image inputx = x.view(-1, 64 * 4 * 4)# add dropout layerx = self.dropout(x)# add 1st hidden layer, with relu activation functionx = F.relu(self.fc1(x)) #輸出維度:200# add dropout layerx = self.dropout(x)x = self.fc2(x) #輸出維度:10return x# create a complete CNN
model = Net()
print(model)# move tensors to GPU if CUDA is available
if train_on_gpu:model.cuda()

3.6 指定損失函數和優化器

import torch.optim as optim# specify loss function
criterion = nn.CrossEntropyLoss()# specify optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

3.7 訓練網絡

記住看看訓練集和驗證集損失是如何隨著時間的推移而減少的;如果驗證集損失增加,則表明可能過擬合。

# number of epochs to train the model
n_epochs = 8 # you may increase this number to train a final modelvalid_loss_min = np.Inf # track change in validation lossfor epoch in range(1, n_epochs+1):# keep track of training and validation losstrain_loss = 0.0valid_loss = 0.0#################### train the model ####################model.train()for data, target in train_loader:# move tensors to GPU if CUDA is availableif train_on_gpu:data, target = data.cuda(), target.cuda()# clear the gradients of all optimized variablesoptimizer.zero_grad()# forward pass: compute predicted outputs by passing inputs to the modeloutput = model(data)# calculate the batch lossloss = criterion(output, target)# backward pass: compute gradient of the loss with respect to model parametersloss.backward()# perform a single optimization step (parameter update)optimizer.step()# update training losstrain_loss += loss.item()*data.size(0)######################    # validate the model #######################model.eval()for data, target in valid_loader:# move tensors to GPU if CUDA is availableif train_on_gpu:data, target = data.cuda(), target.cuda()# forward pass: compute predicted outputs by passing inputs to the modeloutput = model(data)# calculate the batch lossloss = criterion(output, target)# update average validation loss valid_loss += loss.item()*data.size(0)# calculate average lossestrain_loss = train_loss/len(train_loader.dataset)valid_loss = valid_loss/len(valid_loader.dataset)# print training/validation statistics print('Epoch: {} \tTraining Loss: {:.6f} \tValidation Loss: {:.6f}'.format(epoch, train_loss, valid_loss))# save model if validation loss has decreasedif valid_loss <= valid_loss_min:print('Validation loss decreased ({:.6f} --> {:.6f}).  Saving model ...'.format(valid_loss_min,valid_loss))torch.save(model.state_dict(), 'model_cifar.pt')valid_loss_min = valid_loss

結果:

3.8 加載模型

model.load_state_dict(torch.load('model_cifar.pt'))

3.9 測試訓練好的模型

在以前看不到的數據上測試你的訓練模型!一個“好”的訓練結果大約有70%分類精度(或更多,盡你最大的努力!)。

# track test loss
test_loss = 0.0
class_correct = list(0. for i in range(10))
class_total = list(0. for i in range(10))model.eval()
# iterate over test data
for data, target in test_loader:# move tensors to GPU if CUDA is availableif train_on_gpu:data, target = data.cuda(), target.cuda()# forward pass: compute predicted outputs by passing inputs to the modeloutput = model(data)# calculate the batch lossloss = criterion(output, target)# update test loss test_loss += loss.item()*data.size(0)# convert output probabilities to predicted class_, pred = torch.max(output, 1)    # compare predictions to true labelcorrect_tensor = pred.eq(target.data.view_as(pred))correct = np.squeeze(correct_tensor.numpy()) if not train_on_gpu else np.squeeze(correct_tensor.cpu().numpy())# calculate test accuracy for each object classfor i in range(batch_size):label = target.data[i]class_correct[label] += correct[i].item()class_total[label] += 1# average test loss
test_loss = test_loss/len(test_loader.dataset)
print('Test Loss: {:.6f}\n'.format(test_loss))for i in range(10):if class_total[i] > 0:print('Test Accuracy of %5s: %2d%% (%2d/%2d)' % (classes[i], 100 * class_correct[i] / class_total[i],np.sum(class_correct[i]), np.sum(class_total[i])))else:print('Test Accuracy of %5s: N/A (no training examples)' % (classes[i]))print('\nTest Accuracy (Overall): %2d%% (%2d/%2d)' % (100. * np.sum(class_correct) / np.sum(class_total),np.sum(class_correct), np.sum(class_total)))

結果:

3.10 問題:你的模型有哪些缺點,如何改進?

答:

  1. 訓練結束時,loss還在快速下降,訓練的epoch數遠遠不夠。
  2. 不同類別的測試結果差異較大,類別比較復雜多變的類預測效果普遍較差(如狗、小汽車、鳥類),這些類相對其他類,類內距離較大,這要么表示模型訓練時間不夠還沒掌握復雜類的預測,要么模型結構的復雜度還較低導致無法表達復雜類情況。

3.11 可視化test集預測結果

# obtain one batch of test images
dataiter = iter(test_loader)
images, labels = dataiter.next()
images.numpy()# move model inputs to cuda, if GPU available
if train_on_gpu:images = images.cuda()# get sample outputs
output = model(images)
# convert output probabilities to predicted class
_, preds_tensor = torch.max(output, 1)
preds = np.squeeze(preds_tensor.numpy()) if not train_on_gpu else np.squeeze(preds_tensor.cpu().numpy())if train_on_gpu:images = images.cpu()# plot the images in the batch, along with predicted and true labels
fig = plt.figure(figsize=(25, 4))
for idx in np.arange(20):ax = fig.add_subplot(2, 20/2, idx+1, xticks=[], yticks=[])imshow(images[idx] if not train_on_gpu else images[idx].cpu())ax.set_title("{} ({})".format(classes[preds[idx]], classes[labels[idx]]),color=("green" if preds[idx]==labels[idx].item() else "red"))

結果:

總結

以上是生活随笔為你收集整理的优达学城《DeepLearning》2-1:卷积神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日日婷婷夜日日天干 | 国内精品在线观看视频 | av免费在线看网站 | 欧美成人精品欧美一级乱黄 | 日本精品一区二区三区在线观看 | 天天曰天天爽 | 婷婷激情综合五月天 | 97久久久免费福利网址 | 91九色视频网站 | 国产美女免费观看 | 欧美少妇xx| 国产精品免费久久久 | 久久视频免费在线观看 | 尤物九九久久国产精品的分类 | 在线视频 国产 日韩 | 丁香久久综合 | 成年人视频在线免费 | 99草视频 | 久草在线这里只有精品 | 一区国产精品 | 欧美视频日韩 | 成人av一区二区兰花在线播放 | 国产99久久久精品视频 | 麻豆久久久久久久 | 中文字幕在线国产精品 | japanese黑人亚洲人4k | 色婷婷av在线 | 天天在线视频色 | 国产99免费 | 香蕉在线播放 | 九热精品 | 欧美成人手机版 | wwwwwww黄 | 欧美性久久久 | 久久精品—区二区三区 | 久久超碰99 | 91激情视频在线 | 狠狠色伊人亚洲综合成人 | 500部大龄熟乱视频使用方法 | 亚州日韩中文字幕 | 免费高清av在线看 | 91成人区| 夜夜干夜夜 | 久久精品亚洲一区二区三区观看模式 | 最新在线你懂的 | 在线观看岛国av | 麻豆视频国产在线观看 | 免费观看的av网站 | 久久久久久久久久福利 | 亚洲欧美成人 | 色综合久久久久综合体桃花网 | 久久这里只有精品1 | 亚洲精品97 | 草久电影 | 在线观看中文字幕网站 | 波多野结衣一区二区三区中文字幕 | 狠狠干狠狠久久 | 黄污网站在线 | 日批视频在线播放 | 波多野结衣日韩 | 伊人狠狠色丁香婷婷综合 | 美女在线黄 | 国产精品一区二区久久 | 免费人成在线观看网站 | 国产美女无遮挡永久免费 | 日本动漫做毛片一区二区 | 人人爽久久久噜噜噜电影 | 成年人在线观看 | 99爱爱| www.888av| 热久久在线视频 | 8x8x在线观看视频 | 国产一区二区三区免费在线 | 午夜美女福利直播 | 久草五月 | 国内揄拍国内精品 | 亚洲国产精久久久久久久 | 久久 亚洲视频 | 涩涩在线 | www.天天射| 三级小视频在线观看 | 综合久久2023 | 久久精品网站免费观看 | 视频在线一区二区三区 | 中中文字幕av | 日本黄色免费在线 | 国产亚洲视频在线 | 91大神免费在线观看 | 中文成人字幕 | 婷婷激情在线 | 99爱爱| 国产又粗又猛又色又黄视频 | 色综合久久五月 | 成人在线视频一区 | 欧美日韩在线视频一区 | 操少妇视频 | 最近中文字幕高清字幕在线视频 | 亚洲成人免费在线观看 | 在线影院av| 久久不射电影院 | 久久视频国产 | 欧美另类成人 | 黄污网站在线 | 亚洲午夜精品久久久久久久久久久久 | 免费av在线网站 | 在线中文字幕播放 | 久久电影国产免费久久电影 | 亚洲综合视频在线 | 国产xxxxx在线观看 | 69国产盗摄一区二区三区五区 | 99在线视频观看 | 国产黄色理论片 | 欧美日韩aaaa | 色五月色开心色婷婷色丁香 | 亚洲视频第一页 | 成人宗合网 | 国产成人黄色片 | 色综合天天 | 亚洲国产精品传媒在线观看 | 国产96在线视频 | 日韩激情在线 | 伊人久久电影网 | www.天天成人国产电影 | 欧美91精品国产自产 | 国产精品伦一区二区三区视频 | 人人爽人人搞 | 中文字幕亚洲高清 | 色多视频在线观看 | 丁香伊人网 | 九九热视频在线免费观看 | 天天操夜操视频 | 久久精品站| 日韩在线一区二区免费 | 日韩视频在线不卡 | 国产精品11 | 日韩久久精品一区二区 | 精品国产一区二区三区久久影院 | 欧美亚洲一级片 | 国产一区二区精品91 | 久操97| 亚洲欧美日韩精品久久奇米一区 | 国产明星视频三级a三级点| 午夜 在线 | 九九视频在线观看视频6 | 国产剧情久久 | 狠狠色网 | 激情网在线视频 | 日韩大片免费在线观看 | 久精品在线 | 中文字幕精品三级久久久 | 男女啪啪免费网站 | 欧美激情精品久久久久久免费印度 | 色偷偷网站视频 | 日日干美女 | 免费男女羞羞的视频网站中文字幕 | 久久免费看视频 | 精品久久一 | 麻豆国产网站 | 97视频在线免费观看 | 天天爱天天色 | 欧美成人视 | 国产成人精品在线播放 | 久久久久久久网 | 国产剧在线观看片 | 国产拍揄自揄精品视频麻豆 | 国产99久久久国产 | 成年人网站免费观看 | 中文字幕日本在线观看 | 欧美网址在线观看 | 99国产精品久久久久久久久久 | 98超碰在线| 久久久噜噜噜久久久 | 丁香六月婷婷激情 | 午夜av影院 | 激情图片区 | 国产成人精品久久久久 | 一区二区三区四区精品视频 | 99re国产视频| 伊人狠狠色丁香婷婷综合 | 美女国内精品自产拍在线播放 | 在线看国产一区 | 亚洲成人免费在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩av男人的天堂 | 日韩精品免费一区二区 | 国产九九精品 | 国产精品成人一区二区三区 | 一区二区三区日韩在线 | 亚洲精品欧美视频 | 婷婷色在线播放 | 99久久精品午夜一区二区小说 | 久久精品国产免费 | 91在线免费公开视频 | 五月综合色 | 久久av网 | 免费看一级黄色大全 | 国产精品www | 综合色综合色 | 亚州黄色一级 | 在线视频福利 | www.色婷婷.com| 国产福利一区二区三区视频 | 久久久久国产精品一区二区 | 99视频偷窥在线精品国自产拍 | 中文字幕av最新更新 | 国产一区二区在线精品 | 中文字幕国产 | 久久99久国产精品黄毛片入口 | 一级黄色网址 | 中文字幕2021 | 久草在线观看 | 亚洲精品在 | 国产一级免费片 | 99热这里| 91香蕉视频 | 久久综合九色 | 黄色特级毛片 | 亚洲久草网 | 操久久免费视频 | 免费看污网站 | 日韩天堂网| 久久精品久久精品久久 | 蜜臀久久99静品久久久久久 | 久免费| 人人玩人人爽 | 国产成人香蕉 | 天海冀一区二区三区 | 亚洲精品成人av在线 | 久久免视频 | 国内精品久久久久影院优 | 日本乱视频 | 超碰97免费观看 | 成人免费看视频 | 久热爱 | 99国产精品久久久久老师 | 狠狠色丁香婷婷综合久小说久 | 黄色亚洲大片免费在线观看 | 免费三级在线 | 免费h视频 | 丁香五婷 | 成人一级免费视频 | 国产夫妻av在线 | 黄色一级大片免费看 | 99久久一区| 视频在线观看91 | 日韩视频在线观看免费 | 久久艹精品 | 国产精品成人一区二区三区 | 成人av手机在线 | 夜夜婷婷 | 国产高清中文字幕 | 国产在线不卡一区 | 国产精品videossex国产高清 | av中文天堂 | 国产福利一区二区三区视频 | 黄色国产精品 | 国产黄在线播放 | 精品国产一区二区三区四 | 婷婷伊人综合 | 激情综合色播五月 | 人人爱人人射 | 人人玩人人添人人澡97 | 国产一级大片免费看 | 精品国产一区二区三区久久影院 | 日韩试看| 99久久精品国产一区二区三区 | 免费黄色在线播放 | 久久国产视频网站 | 国产美女永久免费 | www99久久| 日韩中文字幕免费看 | 成人影音在线 | 99久久99久久精品国产片果冰 | 综合av在线 | av在线播放一区二区三区 | 国产精品入口66mio女同 | 亚洲理论在线观看 | 中文字幕亚洲综合久久五月天色无吗'' | 日韩av免费在线看 | 国产精品久久久久久久久久久久午夜 | 69精品人人人人 | 色网站视频 | 亚洲va在线va天堂 | 国产精品福利在线播放 | 99久久视频| 国产人成在线视频 | 中文av在线免费观看 | 深夜男人影院 | 国产高清日韩 | 久久ww | 五月天久久狠狠 | 男女激情麻豆 | 欧美久久影院 | 91大神精品视频在线观看 | 亚洲综合一区二区精品导航 | 99热高清 | 中文字幕中文字幕在线一区 | av在线等 | 婷婷视频在线观看 | 亚洲国产日韩欧美在线 | 中文字幕电影高清在线观看 | 亚洲激情校园春色 | 国产黄色在线观看 | 免费人成在线观看网站 | 在线观看你懂的网站 | 97日日| 一区二区国产精品 | 国产一区二区精品在线 | 久久国产99 | 久久婷婷五月综合色丁香 | 久操视频在线播放 | 91传媒在线观看 | 欧美日韩精品在线 | 久久高清| 热久久免费视频精品 | 色诱亚洲精品久久久久久 | 依人成人综合网 | 亚州成人av在线 | 免费成人黄色av | 99精品免费久久久久久久久 | 久久久久久久久久久久国产精品 | 亚洲三级网站 | 最近日本韩国中文字幕 | 亚洲午夜剧场 | 精品专区| 日韩欧美国产精品 | 看片网站黄色 | 黄色成品视频 | 色资源网在线观看 | 亚洲精品裸体 | 日韩爱爱网站 | 欧美日韩aa | 天天操比 | 欧美一级欧美一级 | 免费成人av| 精品一区电影 | 中文字幕在线观看第一页 | 福利电影一区二区 | 国产女人40精品一区毛片视频 | 蜜桃av人人夜夜澡人人爽 | 91福利视频免费 | 99久久精品免费看国产四区 | 99久久精品国产欧美主题曲 | 日韩精品免费在线 | 日批在线观看 | 久草视频在线看 | 免费看片成人 | 99久久精品免费看国产一区二区三区 | 国产精品ⅴa有声小说 | 国产成人精品免高潮在线观看 | 蜜桃av久久久亚洲精品 | 欧美性成人 | 国产一区二区电影在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 视频 天天草 | 国产精品1区2区3区在线观看 | 欧美国产日韩激情 | 日韩av一区二区三区在线观看 | 亚洲国产成人久久综合 | 免费看黄电影 | 日本资源中文字幕在线 | 亚洲成人精品影院 | 日韩www在线 | 亚洲91中文字幕无线码三区 | 最近中文字幕国语免费高清6 | 成人xxxx| 中文字幕av在线播放 | 97福利在线 | 伊人五月 | 国产精品欧美日韩 | 久草综合视频 | 国产精品岛国久久久久久久久红粉 | 日日干狠狠操 | 国产视频在线观看一区 | 视频99爱| 亚洲国产精品小视频 | 久久精品永久免费 | 国色天香第二季 | 国产精品a久久久久 | 亚洲精品乱码久久久久v最新版 | 99久久er热在这里只有精品15 | 国产成人福利在线 | 看片网站黄 | 日韩性久久 | 久艹视频免费观看 | 日日夜夜人人天天 | 天天操天天摸天天爽 | 欧美午夜久久久 | 成人在线视频论坛 | 亚洲欧洲精品视频 | 国产男女无遮挡猛进猛出在线观看 | www成人精品 | 精品欧美小视频在线观看 | 亚洲激情免费 | 久久er99热精品一区二区 | 中文字幕中文 | 97碰在线 | 在线国产中文 | 免费亚洲电影 | 中文字幕电影网 | 婷婷六月中文字幕 | 免费观看日韩 | 日韩精品一区二区三区免费观看视频 | 欧美色噜噜噜 | 欧美美女视频在线观看 | 国产高清久久 | 91麻豆免费版 | 丁香av| 精品一区电影国产 | 成人毛片在线观看 | 99久久一区| 国产成人av综合色 | 色在线网 | 午夜三级影院 | 久久电影中文字幕视频 | 久久超 | 久久理论电影网 | 亚洲va欧美 | 久久国产精品视频免费看 | 国产精品片 | 久久婷婷网| 久久久av免费 | 99视频在线精品免费观看2 | 天天操比 | 岛国精品一区二区 | 久久这里只有精品久久 | 色综合天天狠天天透天天伊人 | 亚洲成人中文在线 | 中文字幕高清在线播放 | 尤物九九久久国产精品的分类 | 天天天操天天天干 | 亚洲美女视频网 | 成人毛片在线观看视频 | 久久综合偷偷噜噜噜色 | 91成人黄色 | www.色综合.com | 免费在线成人av | 夜色在线资源 | 欧美成人亚洲成人 | 国产精品成人一区二区三区吃奶 | 免费网址在线播放 | 国产成人精品午夜在线播放 | 亚洲日本一区二区在线 | 日韩av电影免费在线观看 | 国产精品国产毛片 | 国产精品一区二区三区免费视频 | 日本色小说视频 | 久99久视频| 欧美一区二区三区不卡 | 国产在线第三页 | 国产免费观看久久黄 | 日本久久久久久科技有限公司 | 97人人模人人爽人人喊中文字 | www久久精品 | 日韩av在线资源 | 成人资源在线观看 | 午夜精品三区 | 麻豆久久| 在线观看免费版高清版 | 91精品国产99久久久久久久 | 国产亚洲精品免费 | 国产精品久久久久久欧美 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲精品免费播放 | 在线电影 一区 | 五月婷婷综合久久 | 9i看片成人免费看片 | 草草草影院| www.在线看片.com | www.久久久com | 欧美视频xxx| 欧美一区二区三区在线看 | 国产日韩欧美在线播放 | 久久免费国产精品 | 久久精品99精品国产香蕉 | 亚洲精品一区二区在线观看 | 91免费看片黄 | 欧美日韩国产区 | 色小说av | 99日韩精品 | 五月婷在线播放 | 精品一区在线 | 婷婷精品在线 | 精品一区二区免费 | 国产中文字幕在线免费观看 | 不卡的av在线 | 天天干天天拍天天操天天拍 | av在线免费播放网站 | 97超碰中文字幕 | 免费美女久久99 | 天天操 夜夜操 | 久久视频在线观看免费 | 欧美日韩在线网站 | 亚洲国产成人精品久久 | 国产第一页福利影院 | 91综合色| 天天天天干| 激情欧美xxxx | 人人玩人人添人人澡97 | 久久久久久久影院 | 激情伊人五月天久久综合 | 果冻av在线| 久久久成人精品 | 国产不卡在线播放 | 婷婷爱五月天 | 亚洲欧洲精品一区二区 | 国产精品永久免费 | 国产最新91| 午夜精品视频免费在线观看 | av成人亚洲 | 日批视频国产 | www色av| 在线观看不卡视频 | 久久视频在线视频 | 亚洲少妇xxxx| av在线精品 | 亚洲视频精品在线 | 人人看人人 | 免费观看性生活大片 | 三级大片网站 | 午夜成人免费电影 | www..com黄色片 | 中文字幕日韩免费视频 | 超碰av在线播放 | 亚洲 欧美 成人 | 色www. | 狠狠干狠狠久久 | 国产97碰免费视频 | 国产精品中文字幕在线观看 | 国产美女精品人人做人人爽 | 99热最新在线 | 在线欧美国产 | 狠狠搞,com | 国内精品久久久久 | 中文字幕日韩国产 | 亚洲好视频 | 国产精品一区二区三区在线看 | 欧美成人xxx| 91亚瑟视频 | 7799av | 狠狠干 狠狠操 | 亚洲精品视频在线观看视频 | 狠狠操在线 | 亚洲国产一区在线观看 | 久久精品成人欧美大片古装 | www.97色.com | 成人四虎 | 亚洲 欧美 变态 国产 另类 | 亚洲国产欧美在线看片xxoo | 久久婷综合 | 最近中文字幕国语免费av | 精品国产aⅴ一区二区三区 在线直播av | 中国美女一级看片 | 视频一区二区三区视频 | 在线免费高清 | 草免费视频 | 亚洲三区在线 | 国产成人一二三 | 国产黄影院色大全免费 | av中文字幕av | 粉嫩高清一区二区三区 | 狠狠色丁香婷婷综合欧美 | 色婷婷激婷婷情综天天 | 一本一道波多野毛片中文在线 | 国产成人一区二区三区免费看 | 久久精品久久精品久久 | www.国产在线 | 欧美在线观看视频一区二区三区 | japanesefreesex中国少妇 | 国产成人精品亚洲a | 亚洲精品在线免费看 | 日韩欧美一区二区在线播放 | 国产亲近乱来精品 | 在线观看的a站 | 国产精品一区二区你懂的 | 成人免费看片98欧美 | 久久久免费精品 | 国产欧美精品一区二区三区四区 | 日韩精品一区二区免费视频 | www.香蕉| 夜夜爽天天爽 | 亚州国产视频 | 最近日本中文字幕 | 成人av免费在线观看 | 色丁香婷婷 | 97视频免费观看2区 亚洲视屏 | 久久精品看片 | 日韩av电影一区 | 国产精品久久久久久久久久免费看 | 一区二区在线影院 | 亚洲视频在线观看 | 色视频网页 | 久久视频这里有精品 | 国产高清无av久久 | 中文字幕一区二区三 | 日韩高清在线一区 | 中文字幕888 | 久久久久久美女 | 婷婷草| 不卡的一区二区三区 | 色干综合 | 国产在线高清视频 | 正在播放亚洲精品 | 天天干天天插 | 九九热在线观看视频 | 久久夜av| 深夜福利视频在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 色小说av| 青青啪 | 欧美日韩中文字幕综合视频 | 久久久www成人免费毛片麻豆 | 美女在线观看网站 | 日韩欧美在线高清 | 一区二区影视 | 国产精品视屏 | 国偷自产中文字幕亚洲手机在线 | 成人国产电影在线观看 | av高清一区二区三区 | 日韩一区二区三区免费视频 | 亚洲另类在线视频 | 99色网站 | 国产精品不卡在线观看 | 天天天天天天干 | 91九色精品国产 | 日本精品一区二区在线观看 | 国产精品免费视频网站 | 91精品一区二区在线观看 | 91视频 - v11av| av中文字幕亚洲 | 日韩av片在线 | 91最新在线视频 | av在线网站观看 | www.久久爱.cn | 中文字幕亚洲在线观看 | www.日本色 | 亚洲狠狠丁香婷婷综合久久久 | 久久久久久久久久久综合 | 日韩欧美精品在线 | 国内精品久久久久久久97牛牛 | 97夜夜澡人人双人人人喊 | 国产精品久久久久亚洲影视 | 九九国产精品视频 | 夜夜躁日日躁狠狠躁 | 天天插天天干天天操 | 99视频+国产日韩欧美 | 中文字幕a∨在线乱码免费看 | 在线观看免费一区 | 日韩 国产 | 国产成人av免费在线观看 | 欧美视频国产视频 | 亚洲精品久久视频 | 日日日操 | 99在线精品观看 | 亚洲综合激情 | 亚洲精品午夜aaa久久久 | 国产精品mm | 久久久资源网 | 色九九影院 | 亚洲欧美国产日韩在线观看 | 最新国产一区二区三区 | 中文字幕一区二 | av在线永久免费观看 | 激情综合五月 | 精品美女久久久久 | 一本—道久久a久久精品蜜桃 | 国产色影院 | 91国内在线 | 久久视频精品 | 久久久久久久av | 亚洲成人网在线 | 免费看三级网站 | 色综合久久久网 | 91黄在线看 | 在线小视频你懂的 | 国产精品九九九九九九 | 国产在线免费 | 成人一区二区三区在线 | 91精品啪在线观看国产线免费 | 色搞搞 | 中文字幕 国产视频 | 久久蜜臀一区二区三区av | 久99久在线 | 五月天中文在线 | 国产女人18毛片水真多18精品 | 96亚洲精品久久 | 九九免费在线观看 | 欧美性爽爽 | 免费观看黄色12片一级视频 | 欧美色就是色 | 亚洲精品国产精品久久99 | 婷婷丁香七月 | 97成人在线| 中文字幕刺激在线 | 免费观看国产视频 | 丁香六月激情 | 中文字幕在线视频免费播放 | 日本精品午夜 | 丁香六月在线观看 | a天堂在线看 | 精品九九九 | 天天色 天天 | 成人在线视| 园产精品久久久久久久7电影 | 美女久久精品 | 三级黄色免费片 | 国产精品入口a级 | 国产一区二区在线免费播放 | 在线观看国产一区二区 | 中文字幕在线视频一区二区三区 | 免费观看一区 | 天堂中文在线播放 | 粉嫩av一区二区三区四区在线观看 | 国产视频欧美视频 | 国产三级久久久 | 免费网站黄 | 国产精品成人久久久 | 中文字幕电影在线 | 国产原创在线 | 亚洲天堂精品 | 欧美日本在线视频 | 国产一区播放 | a天堂最新版中文在线地址 久久99久久精品国产 | 久草视频免费观 | 久久字幕精品一区 | 在线天堂中文在线资源网 | 五月天婷婷在线播放 | 亚洲精品美女久久久久网站 | 久久精品伊人 | 日韩欧美国产精品 | 久久精品国产亚洲精品2020 | 亚洲视频电影在线 | 久久99久国产精品黄毛片入口 | 国产精品久久久久久久久久久久 | 美女网站视频色 | 西西4444www大胆艺术 | 日本高清中文字幕有码在线 | 国产精品va在线 | 九九免费观看全部免费视频 | 98超碰在线观看 | 久久黄色影院 | 成人一级电影在线观看 | 午夜精品久久久久久99热明星 | 四虎永久免费在线观看 | 日韩电影一区二区三区在线观看 | 射久久| 91精品成人 | 久久免费精品一区二区三区 | 黄色在线免费观看网址 | 99久久99久久精品国产片 | 正在播放国产一区二区 | 日韩精品大片 | 最近最新mv字幕免费观看 | 51久久夜色精品国产麻豆 | 欧美一级专区免费大片 | 日韩簧片在线观看 | 丁香激情综合 | 久久在现 | 国产免费视频一区二区裸体 | 中文字幕在线看视频 | 日本久久99 | 午夜资源站 | 久久蜜臀一区二区三区av | 香蕉97视频观看在线观看 | 免费一级特黄毛大片 | 91免费日韩 | 亚洲国产片色 | 国产精品久久久久一区二区国产 | 九草视频在线观看 | 日韩精选在线 | 黄网站免费久久 | 日韩91精品| 免费性网站| 亚州精品天堂中文字幕 | 日韩精品一区二区三区三炮视频 | 91超碰在线播放 | 久久久精品综合 | 特级黄录像视频 | 99久久久久久国产精品 | 久久久一本精品99久久精品66 | 国产精品福利在线 | 欧美精品v国产精品 | 国产成本人视频在线观看 | 999亚洲国产996395 | 奇米网8888| 色婷婷视频在线 | 九九精品久久久 | 亚洲japanese制服美女 | 免费色网 | 福利视频一区二区 | 欧美日韩在线免费视频 | 精品久久久久久久久久久久久久久久 | 狠狠色丁香 | 国产精品一区二区免费 | 看黄色91| 免费99精品国产自在在线 | 正在播放日韩 | 97爱爱爱| av久久在线 | 亚洲少妇久久 | 中文字幕一区二区三 | 中文一区在线观看 | 中文字幕在线观看免费高清电影 | 97超碰人人澡人人 | 色综合国产| 97人人澡人人添人人爽超碰 | 日韩高清免费观看 | 国产一级视屏 | 国产精品一区二区久久精品 | www.xxxx欧美| 国产精品av免费观看 | 欧美日高清视频 | 国产日产精品一区二区三区四区 | 久久久免费精品国产一区二区 | 五月婷婷六月丁香在线观看 | 不卡的一区二区三区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成人黄色大片在线观看 | 激情综合网五月婷婷 | 91精品少妇偷拍99 | 成人资源网 | 亚洲精品在线看 | 国产伦理一区二区三区 | 久久久综合九色合综国产精品 | 97视频总站 | 密桃av在线| 久久,天天综合 | 亚洲第一中文网 | 三级在线国产 | 亚洲精品乱码久久久久 | 亚洲妇女av | 久久经典国产视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久青草影院 | a级国产乱理论片在线观看 特级毛片在线观看 | 色综合天天色综合 | 国产最顶级的黄色片在线免费观看 | 欧美性生活小视频 | 久久久综合色 | www亚洲一区 | 国产精品毛片久久久久久 | 日韩av成人在线 | 天堂麻豆| av中文字幕日韩 | 久久99久久99精品免观看粉嫩 | 911免费视频 | 911国产在线观看 | 天天曰夜夜操 | 国产又粗又长的视频 | 美女免费黄网站 | 在线观看av大片 | 欧美精品国产综合久久 | 欧美成人999| 3d黄动漫免费看 | 日韩精品视频免费在线观看 | 韩国av一区二区 | 日韩资源在线 | 成人免费毛片aaaaaa片 | 99精品欧美一区二区三区 | 国产粉嫩在线观看 | 干干日日 | 国产欧美精品一区二区三区 | 不卡在线一区 | 五月天激情综合 | 亚洲美女免费视频 | 国产经典 欧美精品 | 国产.精品.日韩.另类.中文.在线.播放 | 天天综合网 天天综合色 | 亚洲九九九在线观看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产专区欧美专区 | 久免费 | 天天色草 | 欧美久久综合 | 狠狠狠狠狠狠狠狠干 | 色综合久久久久综合 | 在线小视频你懂的 | 黄色片软件网站 | 日韩在线播放视频 | 日韩在线免费视频 | 国产日产精品久久久久快鸭 | 91视频 - x99av| 精品美女在线观看 | 久草线| 在线导航av | 韩国av一区二区三区在线观看 | a爱爱视频 | 国产精品美女免费视频 | 一级黄色a视频 | 中文字幕免费一区 | 国产成人精品一区二区在线观看 | 日韩在线播放欧美字幕 | 久久久精品国产一区二区三区 | 国产1区在线 | 国产精品高清在线观看 | 五月婷婷在线观看视频 | 国产在线a不卡 | 精品久久电影 | 91福利社在线观看 | 玖玖在线视频观看 | 一区二区三区四区精品视频 | 成人av影视观看 | 日韩在线免费高清视频 | 日韩精品一区电影 | 人人爽人人爱 | 91精品一区在线观看 | 亚洲永久字幕 | 婷婷综合电影 | 亚洲精品资源在线观看 | 国产精品伦一区二区三区视频 | 波多野结衣网址 | 五月天亚洲婷婷 | 日韩视频免费在线观看 | 国产 日韩 中文字幕 | 日韩在线播放欧美字幕 | 又粗又长又大又爽又黄少妇毛片 | 久久精品亚洲综合专区 | 探花视频在线观看免费 | 国产精品私拍 | 91黄色在线看 | 日韩精品一区二区在线视频 | 欧美激情综合色综合啪啪五月 | 人人舔人人插 | 国产一区二区三精品久久久无广告 | 日韩欧美网址 | 午夜黄网 | 在线精品视频免费观看 | 女人18毛片a级毛片一区二区 | 最新婷婷色 | 久久国产女人 | 精品日韩在线 | 欧美精品一区二区三区四区在线 | 国产精品18毛片一区二区 | 97在线视 | 在线高清一区 | 九九九九免费视频 | 欧美在线a视频 | 日本黄区免费视频观看 | 欧美极品少妇xbxb性爽爽视频 | 日韩精品一区在线播放 | 成 人 黄 色 视频 免费观看 | 一级黄色在线视频 | 成人久久影院 | 国产精品免费人成网站 | 亚洲一区二区三区四区精品 | 最近高清中文字幕在线国语5 | av网站有哪些 | 免费精品视频在线观看 | 日日干天天插 | 三级黄色网址 | 国产小视频在线 | 在线免费中文字幕 | 综合色中色 | 国产免费又爽又刺激在线观看 | 91在线日韩 | 国产精品video爽爽爽爽 | www国产精品com | 国产在线精品一区二区三区 | 91麻豆精品 | 免费高清在线一区 | 国产一区二区在线视频观看 | 国产在线观看午夜 | 久久国产精品一国产精品 | 午夜av剧场 | 日韩精品中文字幕久久臀 | 婷婷伊人网| 精品久久久久久久久久久院品网 | 成人久久18免费 | 草久在线 | 中文字幕一区二区三区乱码在线 | 波多野结衣一区三区 | 日韩精品久久久久 | 日本少妇久久久 | 夜夜夜夜夜夜操 | 欧美精品国产综合久久 | 日韩电影久久久 | 国产精选在线 | 午夜少妇一区二区三区 | 综合网五月天 | 性色av免费看| 日本aaaa级毛片在线看 | 亚洲成人中文在线 | 91精品毛片 | 在线免费91| 毛片视频电影 | www.久久爱.cn | 精品国产资源 | 久久伊人色综合 | www.人人草| 亚洲另类视频 | 久久国产精品一国产精品 | 在线视频亚洲 | 伊人久在线 | 国产偷国产偷亚洲清高 | 蜜臀一区二区三区精品免费视频 | 视频在线观看亚洲 | 777奇米四色| 99久久精品国产一区 |