精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

機器學習 | PyTorch簡明教程下篇

人工智能 機器學習
接著上篇《PyTorch簡明教程上篇》,繼續學習多層感知機,卷積神經網絡和LSTMNet。

接著上篇《PyTorch簡明教程上篇》,繼續學習多層感知機,卷積神經網絡和LSTMNet。

1、多層感知機

多層感知機通過在網絡中加入一個或多個隱藏層來克服線性模型的限制,是一個簡單的神經網絡,也是深度學習的重要基礎,具體圖如下:

import numpy as np
import torch
from torch.autograd import Variable
from torch import optim
from data_util import load_mnist

def build_model(input_dim, output_dim):
    return torch.nn.Sequential(
        torch.nn.Linear(input_dim, 512, bias=False),
        torch.nn.ReLU(),
        torch.nn.Dropout(0.2),
        torch.nn.Linear(512, 512, bias=False),
        torch.nn.ReLU(),
        torch.nn.Dropout(0.2),
        torch.nn.Linear(512, output_dim, bias=False),
    )

def train(model, loss, optimizer, x_val, y_val):
    model.train()
    optimizer.zero_grad()
    fx = model.forward(x_val)
    output = loss.forward(fx, y_val)
    output.backward()
    optimizer.step()
    return output.item()

def predict(model, x_val):
    model.eval()
    output = model.forward(x_val)
    return output.data.numpy().argmax(axis=1)

def main():
    torch.manual_seed(42)
    trX, teX, trY, teY = load_mnist(notallow=False)
    trX = torch.from_numpy(trX).float()
    teX = torch.from_numpy(teX).float()
    trY = torch.tensor(trY)

    n_examples, n_features = trX.size()
    n_classes = 10
    model = build_model(n_features, n_classes)
    loss = torch.nn.CrossEntropyLoss(reductinotallow='mean')
    optimizer = optim.Adam(model.parameters())
    batch_size = 100

    for i in range(100):
        cost = 0.
        num_batches = n_examples // batch_size
        for k in range(num_batches):
            start, end = k * batch_size, (k + 1) * batch_size
            cost += train(model, loss, optimizer,
                          trX[start:end], trY[start:end])
        predY = predict(model, teX)
        print("Epoch %d, cost = %f, acc = %.2f%%"
              % (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))

if __name__ == "__main__":
    main()

(1)以上代碼和單層神經網絡的代碼類似,區別是build_model構建一個包含三個線性層和兩個ReLU激活函數的神經網絡模型:

  • 向模型中添加第一個線性層,該層的輸入特征數量為input_dim,輸出特征數量為512;
  • 接著添加一個ReLU激活函數和一個Dropout層,用于增強模型的非線性能力和防止過擬合;
  • 向模型中添加第二個線性層,該層的輸入特征數量為512,輸出特征數量為512;
  • 接著添加一個ReLU激活函數和一個Dropout層;
  • 向模型中添加第三個線性層,該層的輸入特征數量為512,輸出特征數量為output_dim,即模型的輸出類別數量;

(2)什么是ReLU激活函數?ReLU(Rectified Linear Unit,修正線性單元)激活函數是深度學習和神經網絡中常用的一種激活函數,ReLU函數的數學表達式為:f(x) = max(0, x),其中x是輸入值。ReLU函數的特點是當輸入值小于等于0時,輸出為0;當輸入值大于0時,輸出等于輸入值。簡單來說,ReLU函數就是將負數部分抑制為0,正數部分保持不變。ReLU激活函數在神經網絡中的作用是引入非線性因素,使得神經網絡能夠擬合復雜的非線性關系,同時,ReLU函數相對于其他激活函數(如Sigmoid或Tanh)具有計算速度快、收斂速度快等優點;

(3)什么是Dropout層?Dropout層是一種在神經網絡中用于防止過擬合的技術。在訓練過程中,Dropout層會隨機地將一部分神經元的輸出置為0,即"丟棄"這些神經元,這樣做的目的是為了減少神經元之間的相互依賴,從而提高網絡的泛化能力;

(4)print("Epoch %d, cost = %f, acc = %.2f%%" % (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))最后打印當前訓練的輪次,損失值和acc,上述的代碼輸出如下:

...
Epoch 91, cost = 0.011129, acc = 98.45%
Epoch 92, cost = 0.007644, acc = 98.58%
Epoch 93, cost = 0.011872, acc = 98.61%
Epoch 94, cost = 0.010658, acc = 98.58%
Epoch 95, cost = 0.007274, acc = 98.54%
Epoch 96, cost = 0.008183, acc = 98.43%
Epoch 97, cost = 0.009999, acc = 98.33%
Epoch 98, cost = 0.011613, acc = 98.36%
Epoch 99, cost = 0.007391, acc = 98.51%
Epoch 100, cost = 0.011122, acc = 98.59%

可以看出最后相同的數據分類,準確率比單層神經網絡要高(98.59% > 97.68%)。

2、卷積神經網絡

卷積神經網絡(CNN)是一種深度學習算法,如果輸入一個矩陣,CNN能夠區分出重要的部分和不重要的部分(分配權重),相比較其他分類任務,CNN對數據預處理的要求不是很高,只要經過足夠的訓練,就可以學習到矩陣中的特征,如下圖:

import numpy as np
import torch
from torch.autograd import Variable
from torch import optim
from data_util import load_mnist

class ConvNet(torch.nn.Module):
    def __init__(self, output_dim):
        super(ConvNet, self).__init__()

        self.conv = torch.nn.Sequential()
        self.conv.add_module("conv_1", torch.nn.Conv2d(1, 10, kernel_size=5))
        self.conv.add_module("maxpool_1", torch.nn.MaxPool2d(kernel_size=2))
        self.conv.add_module("relu_1", torch.nn.ReLU())
        self.conv.add_module("conv_2", torch.nn.Conv2d(10, 20, kernel_size=5))
        self.conv.add_module("dropout_2", torch.nn.Dropout())
        self.conv.add_module("maxpool_2", torch.nn.MaxPool2d(kernel_size=2))
        self.conv.add_module("relu_2", torch.nn.ReLU())

        self.fc = torch.nn.Sequential()
        self.fc.add_module("fc1", torch.nn.Linear(320, 50))
        self.fc.add_module("relu_3", torch.nn.ReLU())
        self.fc.add_module("dropout_3", torch.nn.Dropout())
        self.fc.add_module("fc2", torch.nn.Linear(50, output_dim))

    def forward(self, x):
        x = self.conv.forward(x)
        x = x.view(-1, 320)
        return self.fc.forward(x)

def train(model, loss, optimizer, x_val, y_val):
    model.train()
    optimizer.zero_grad()
    fx = model.forward(x_val)
    output = loss.forward(fx, y_val)
    output.backward()
    optimizer.step()
    return output.item()

def predict(model, x_val):
    model.eval()
    output = model.forward(x_val)
    return output.data.numpy().argmax(axis=1)

def main():
    torch.manual_seed(42)
    trX, teX, trY, teY = load_mnist(notallow=False)
    trX = trX.reshape(-1, 1, 28, 28)
    teX = teX.reshape(-1, 1, 28, 28)

    trX = torch.from_numpy(trX).float()
    teX = torch.from_numpy(teX).float()
    trY = torch.tensor(trY)

    n_examples = len(trX)
    n_classes = 10
    model = ConvNet(output_dim=n_classes)
    loss = torch.nn.CrossEntropyLoss(reductinotallow='mean')
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
    batch_size = 100

    for i in range(100):
        cost = 0.
        num_batches = n_examples // batch_size
        for k in range(num_batches):
            start, end = k * batch_size, (k + 1) * batch_size
            cost += train(model, loss, optimizer,
                          trX[start:end], trY[start:end])
        predY = predict(model, teX)
        print("Epoch %d, cost = %f, acc = %.2f%%"
              % (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))

if __name__ == "__main__":
    main()

(1)以上代碼定義了一個名為ConvNet的類,它繼承自torch.nn.Module類,表示一個卷積神經網絡,在__init__方法中定義了兩個子模塊conv和fc,分別表示卷積層和全連接層。在conv子模塊中,我們定義了兩個卷積層(torch.nn.Conv2d)、兩個最大池化層(torch.nn.MaxPool2d)、兩個ReLU激活函數(torch.nn.ReLU)和一個Dropout層(torch.nn.Dropout)。在fc子模塊中,定義了兩個線性層(torch.nn.Linear)、一個ReLU激活函數和一個Dropout層;

(2)定義池化層的目的?池化層(Pooling layer)是CNN中的一個重要組成部分。池化層的主要目的有以下幾點:

  • 降低維度:池化層通過對輸入特征圖(Feature maps)進行局部區域的下采樣操作,降低了特征圖的尺寸。這樣可以減少后續層中的參數數量,降低計算復雜度,加速訓練過程;
  • 平移不變性:池化層可以提高網絡對輸入圖像的平移不變性。當圖像中的某個特征發生小幅度平移時,池化層的輸出仍然具有相似的特征表示。這有助于提高模型的泛化能力,使其能夠在不同位置和尺度下識別相同的特征;
  • 防止過擬合:通過減少特征圖的尺寸,池化層可以降低模型的參數數量,從而降低過擬合的風險;
  • 增強特征表達:池化操作可以聚合局部區域內的特征,從而強化和突出更重要的特征信息。常見的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling),分別表示在局部區域內取最大值或平均值作為輸出;

(3)print("Epoch %d, cost = %f, acc = %.2f%%" % (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))最后打印當前訓練的輪次,損失值和acc,上述的代碼輸出如下:

...
Epoch 91, cost = 0.047302, acc = 99.22%
Epoch 92, cost = 0.049026, acc = 99.22%
Epoch 93, cost = 0.048953, acc = 99.13%
Epoch 94, cost = 0.045235, acc = 99.12%
Epoch 95, cost = 0.045136, acc = 99.14%
Epoch 96, cost = 0.048240, acc = 99.02%
Epoch 97, cost = 0.049063, acc = 99.21%
Epoch 98, cost = 0.045373, acc = 99.23%
Epoch 99, cost = 0.046127, acc = 99.12%
Epoch 100, cost = 0.046864, acc = 99.10%

可以看出最后相同的數據分類,準確率比多層感知機要高(99.10% > 98.59%)。

3、LSTMNet

LSTMNet是使用長短時記憶網絡(Long Short-Term Memory, LSTM)構建的神經網絡,核心思想是引入了一個名為"記憶單元"的結構,該結構可以在一定程度上保留長期依賴信息,LSTM中的每個單元包括一個輸入門(input gate)、一個遺忘門(forget gate)和一個輸出門(output gate),這些門的作用是控制信息在記憶單元中的流動,以便網絡可以學習何時存儲、更新或輸出有用的信息。

import numpy as np
import torch
from torch import optim, nn
from data_util import load_mnist

class LSTMNet(torch.nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(LSTMNet, self).__init__()
        self.hidden_dim = hidden_dim
        self.lstm = nn.LSTM(input_dim, hidden_dim)
        self.linear = nn.Linear(hidden_dim, output_dim, bias=False)

    def forward(self, x):
        batch_size = x.size()[1]
        h0 = torch.zeros([1, batch_size, self.hidden_dim])
        c0 = torch.zeros([1, batch_size, self.hidden_dim])
        fx, _ = self.lstm.forward(x, (h0, c0))
        return self.linear.forward(fx[-1])

def train(model, loss, optimizer, x_val, y_val):
    model.train()
    optimizer.zero_grad()
    fx = model.forward(x_val)
    output = loss.forward(fx, y_val)
    output.backward()
    optimizer.step()
    return output.item()

def predict(model, x_val):
    model.eval()
    output = model.forward(x_val)
    return output.data.numpy().argmax(axis=1)

def main():
    torch.manual_seed(42)
    trX, teX, trY, teY = load_mnist(notallow=False)

    train_size = len(trY)
    n_classes = 10
    seq_length = 28
    input_dim = 28
    hidden_dim = 128
    batch_size = 100
    epochs = 100

    trX = trX.reshape(-1, seq_length, input_dim)
    teX = teX.reshape(-1, seq_length, input_dim)

    trX = np.swapaxes(trX, 0, 1)
    teX = np.swapaxes(teX, 0, 1)

    trX = torch.from_numpy(trX).float()
    teX = torch.from_numpy(teX).float()
    trY = torch.tensor(trY)

    model = LSTMNet(input_dim, hidden_dim, n_classes)
    loss = torch.nn.CrossEntropyLoss(reductinotallow='mean')
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

    for i in range(epochs):
        cost = 0.
        num_batches = train_size // batch_size
        for k in range(num_batches):
            start, end = k * batch_size, (k + 1) * batch_size
            cost += train(model, loss, optimizer,
                          trX[:, start:end, :], trY[start:end])
        predY = predict(model, teX)
        print("Epoch %d, cost = %f, acc = %.2f%%" %
              (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))

if __name__ == "__main__":
    main()

(1)以上這段代碼通用的部分就不解釋了,具體說LSTMNet類:

  • self.lstm = nn.LSTM(input_dim, hidden_dim)創建一個LSTM層,輸入維度為input_dim,隱藏層維度為hidden_dim;
  • self.linear = nn.Linear(hidden_dim, output_dim, bias=False)創建一個線性層(全連接層),輸入維度為hidden_dim,輸出維度為output_dim,并設置不使用偏置項(bias);
  • h0 = torch.zeros([1, batch_size, self.hidden_dim])初始化LSTM層的隱藏狀態h0,全零張量,形狀為[1, batch_size, hidden_dim];
  • c0 = torch.zeros([1, batch_size, self.hidden_dim])初始化LSTM層的細胞狀態c0,全零張量,形狀為[1, batch_size, hidden_dim];
  • fx, _ = self.lstm.forward(x, (h0, c0))將輸入數據x以及初始隱藏狀態h0和細胞狀態c0傳入LSTM層,得到LSTM層的輸出fx;
  • return self.linear.forward(fx[-1])將LSTM層的輸出傳入線性層進行計算,得到最終輸出。這里fx[-1]表示取LSTM層輸出的最后一個時間步的數據;

(2)print("Epoch %d, cost = %f, acc = %.2f%%" % (i + 1, cost / num_batches, 100. * np.mean(predY == teY)))最后打印當前訓練的輪次,損失值和acc,上述的代碼輸出如下:

Epoch 91, cost = 0.000468, acc = 98.57%
Epoch 92, cost = 0.000452, acc = 98.57%
Epoch 93, cost = 0.000437, acc = 98.58%
Epoch 94, cost = 0.000422, acc = 98.57%
Epoch 95, cost = 0.000409, acc = 98.58%
Epoch 96, cost = 0.000396, acc = 98.58%
Epoch 97, cost = 0.000384, acc = 98.57%
Epoch 98, cost = 0.000372, acc = 98.56%
Epoch 99, cost = 0.000360, acc = 98.55%
Epoch 100, cost = 0.000349, acc = 98.55%

4、輔助代碼

兩篇文章的from data_util import load_mnist的data_util.py代碼如下:

import gzip
import os
import urllib.request as request
from os import path
import numpy as np

DATASET_DIR = 'datasets/'

MNIST_FILES = ["train-images-idx3-ubyte.gz", "train-labels-idx1-ubyte.gz",
               "t10k-images-idx3-ubyte.gz", "t10k-labels-idx1-ubyte.gz"]

def download_file(url, local_path):
    dir_path = path.dirname(local_path)
    if not path.exists(dir_path):
        print("Creating the directory '%s' ..." % dir_path)
        os.makedirs(dir_path)

    print("Downloading from '%s' ..." % url)
    request.urlretrieve(url, local_path)

def download_mnist(local_path):
    url_root = "http://yann.lecun.com/exdb/mnist/"
    for f_name in MNIST_FILES:
        f_path = os.path.join(local_path, f_name)
        if not path.exists(f_path):
            download_file(url_root + f_name, f_path)

def one_hot(x, n):
    if type(x) == list:
        x = np.array(x)
    x = x.flatten()
    o_h = np.zeros((len(x), n))
    o_h[np.arange(len(x)), x] = 1
    return o_h

def load_mnist(ntrain=60000, ntest=10000, notallow=True):
    data_dir = os.path.join(DATASET_DIR, 'mnist/')
    if not path.exists(data_dir):
        download_mnist(data_dir)
    else:
        # check all files
        checks = [path.exists(os.path.join(data_dir, f)) for f in MNIST_FILES]
        if not np.all(checks):
            download_mnist(data_dir)

    with gzip.open(os.path.join(data_dir, 'train-images-idx3-ubyte.gz')) as fd:
        buf = fd.read()
        loaded = np.frombuffer(buf, dtype=np.uint8)
        trX = loaded[16:].reshape((60000, 28 * 28)).astype(float)

    with gzip.open(os.path.join(data_dir, 'train-labels-idx1-ubyte.gz')) as fd:
        buf = fd.read()
        loaded = np.frombuffer(buf, dtype=np.uint8)
        trY = loaded[8:].reshape((60000))

    with gzip.open(os.path.join(data_dir, 't10k-images-idx3-ubyte.gz')) as fd:
        buf = fd.read()
        loaded = np.frombuffer(buf, dtype=np.uint8)
        teX = loaded[16:].reshape((10000, 28 * 28)).astype(float)

    with gzip.open(os.path.join(data_dir, 't10k-labels-idx1-ubyte.gz')) as fd:
        buf = fd.read()
        loaded = np.frombuffer(buf, dtype=np.uint8)
        teY = loaded[8:].reshape((10000))

    trX /= 255.
    teX /= 255.

    trX = trX[:ntrain]
    trY = trY[:ntrain]

    teX = teX[:ntest]
    teY = teY[:ntest]

    if onehot:
        trY = one_hot(trY, 10)
        teY = one_hot(teY, 10)
    else:
        trY = np.asarray(trY)
        teY = np.asarray(teY)

    return trX, teX, trY, teY


責任編輯:華軒 來源: 周末程序猿
相關推薦

2023-11-02 14:26:30

PyTorch機器學習

2013-12-03 13:05:30

Lua腳本語言

2014-06-20 10:51:35

Linux LVM邏輯卷

2011-06-03 08:49:54

Java

2023-10-20 14:08:35

digDNS

2010-05-26 10:42:20

SVN1.5配置

2021-01-05 09:55:46

TmateLinux命令

2009-08-06 17:45:08

C# Webservi

2010-12-15 12:48:26

VirtualBox

2009-09-02 17:38:19

C#開發GIS

2011-08-17 09:55:45

Objective-CCategory

2021-05-08 09:02:48

KubeBuilderOperatork8s

2011-08-17 10:00:12

Objective-CProperty

2021-05-11 09:31:31

kustomizeoperator kubernetes

2010-05-25 16:11:25

Git-SVN

2010-01-26 08:25:06

F#語法F#教程

2025-06-05 01:40:00

2009-07-03 13:45:48

JSP簡明教程組件為中心

2021-03-03 12:55:30

Python列表推導式代碼

2014-03-21 12:48:08

Java8Java8教程
點贊
收藏

51CTO技術棧公眾號

国产在线观看网站| 亚洲精品卡一卡二| 日韩高清在线| 亚洲人被黑人高潮完整版| 国产精品久久久久久久久久直播| 国产又大又黄又粗| 91精品国产91久久久久久密臀| 亚洲高清色综合| 亚洲欧美在线精品| 操人在线观看| 中文字幕一区日韩精品欧美| 国产日韩二区| 国产精品九九九九| 久久看片网站| 欧美激情视频免费观看| 卡一卡二卡三在线观看| 高清日韩欧美| 717成人午夜免费福利电影| 欧美变态另类刺激| 在线中文字幕电影| 欧美韩国日本综合| 久久久久成人精品免费播放动漫| 国产又粗又大又黄| 老色鬼久久亚洲一区二区| 欧美激情伊人电影| 国产精品免费人成网站酒店| 精品一区二区三区中文字幕老牛| 亚洲精品在线观看网站| 视频区 图片区 小说区| 久久男人av资源站| 亚洲国产视频网站| 国产精品88久久久久久妇女 | 午夜精品久久久久久毛片| 亚洲一区二区精品视频| 色女孩综合网| 巨骚激情综合| 久久综合精品国产一区二区三区| 国产精品福利视频| www.我爱av| 国产一区二区导航在线播放| 国产精品爽爽爽爽爽爽在线观看| 免费看污视频的网站| 国产精品毛片在线| 国语自产在线不卡| 日本网站在线免费观看| 激情一区二区| 久久久久成人精品| 国产精品 欧美 日韩| 欧美激情综合色综合啪啪| 久久久久www| 日本精品人妻无码77777| 欧美电影免费| 久热在线中文字幕色999舞| 永久av免费网站| 亚洲成人tv| 欧美xxxx做受欧美.88| 日本中文在线视频| 欧美激情日韩| 国内精品久久久久影院优| 日本少妇裸体做爰| 亚洲欧美日韩专区| 国产成人av在线播放| 一区二区乱子伦在线播放| 久久精品国产亚洲一区二区三区| 国产一区二区在线免费| 99久久精品免费看国产交换| 国产精品18久久久久| 国产精品一区二区欧美| 亚洲色图欧美视频| 国产日韩欧美在线一区| 亚洲一区二三| 欧美人与牲禽动交com | 久久久www成人免费精品张筱雨| 国产精品成人69xxx免费视频| 天天综合网91| 欧美华人在线视频| 日本中文字幕在线| 久久国产尿小便嘘嘘| 91国产在线播放| 天堂影院在线| 中文字幕一区日韩精品欧美| 轻点好疼好大好爽视频| 91av亚洲| 91麻豆精品国产自产在线观看一区| 美女久久久久久久久| 免费精品国产| 欧美成人中文字幕在线| 久久国产黄色片| 精品一区二区免费在线观看| 国产69精品久久久久9999apgf| 韩国三级在线观看久| 亚洲免费三区一区二区| 国产亚洲天堂网| 国产精久久久| 亚洲人成网7777777国产| 粉嫩av性色av蜜臀av网站| 亚洲一区亚洲| 91蜜桃网站免费观看| 青青草在线免费观看| 亚洲精品免费在线观看| 美女福利视频在线| 日韩精品成人在线观看| 亚洲一区第一页| 精品在线免费观看视频| 免费在线观看精品| 国产日韩欧美亚洲一区| 国产精品久久麻豆| 91久久国产综合久久| 国产精品亚洲一区二区无码| 久久人人99| 欧美综合在线第二页| 性一交一乱一伧老太| 国产精品人成在线观看免费| 日本福利视频在线| 日韩精品一区二区三区中文在线 | 日韩精品欧美成人高清一区二区| 99超碰麻豆| av电影在线网| 色婷婷久久一区二区三区麻豆| 国产精品99久久久精品无码| 99久久99热这里只有精品| 日本精品一区二区三区在线播放视频 | 国产精品美女高潮无套| 99视频精品| 成人免费看片网站| 91麻豆一二三四在线| 欧美三级日本三级少妇99| 免费看污黄网站在线观看| 伊人狠狠色j香婷婷综合| 91精品久久久久久蜜桃| av色综合久久天堂av色综合在| 欧美日韩在线观看一区二区| 最新中文字幕av| 久久久夜夜夜| 日本一区二区三区www| 国产精品迅雷| 亚洲视频在线观看网站| 国产嫩bbwbbw高潮| 久久女同精品一区二区| 日韩av黄色网址| 亚洲欧美成人vr| 欧美在线www| 久久精品国产亚洲a∨麻豆| 欧美日韩精品在线| 蜜桃精品成人影片| 香蕉久久夜色精品国产| 欧美精品中文字幕一区二区| 欧美动物xxx| 亚洲天堂免费在线| 欧美一级黄视频| 国产精品久久久久久久久免费相片| 日韩av手机版| 99久久精品网站| 91免费观看网站| 性欧美高清come| 亚洲精品一区二区三区香蕉| 日韩毛片在线视频| 久久久精品国产免大香伊| 88av.com| 天天天综合网| 99久久国产免费免费| 888av在线视频| 精品欧美一区二区在线观看| 午夜毛片在线观看| 久久精品欧美日韩精品 | 波多野结衣在线一区| 国产极品尤物在线| 国产一区二区欧美| 成人女保姆的销魂服务| 欧美日韩在线视频免费观看| 精品亚洲一区二区三区在线播放 | 伊人手机在线视频| 国产精品入口麻豆原神| 少妇精品无码一区二区| 亚洲视频二区| 亚洲一区二区三区精品视频| 日本成人精品| 日韩av免费网站| 日本中文字幕在线2020| 精品剧情在线观看| 国产suv精品一区二区33| 国产精品不卡一区二区三区| 日本wwwwwww| 丝袜亚洲另类欧美| 香蕉视频免费版| 亚洲人成网亚洲欧洲无码| 国产精品一二三在线| 搞黄网站在线看| 一道本无吗dⅴd在线播放一区| 国产农村老头老太视频| 韩曰欧美视频免费观看| 人人艹在线视频| 99久久精品国产网站| 不卡的在线视频| 在线视频免费在线观看一区二区| 亚洲在线不卡| 色婷婷综合久久久久久| 成人精品一区二区三区电影免费 | 国产精品入口夜色视频大尺度| 手机在线免费观看av| 永久免费精品影视网站| 日本激情一区二区三区| 91精品国产91久久久久久一区二区 | 欧美电影一区| 久久免费一区| 天堂va在线高清一区| 国产精品高潮呻吟久久av野狼| 91cn在线观看| 自拍视频国产精品| 全色精品综合影院| 亚洲精品一区在线观看| 国产男女裸体做爰爽爽| 欧美性受极品xxxx喷水| 男女啊啊啊视频| 亚洲综合自拍偷拍| 九九精品视频免费| 国产目拍亚洲精品99久久精品| 国产精品一区二区在线免费观看| 精品一区二区三区视频| 999在线免费视频| 性高湖久久久久久久久| 欧美成人免费在线观看视频| 欧美午夜一区| 黄色a级在线观看| 成人影院在线| 欧美精品尤物在线| 亚洲免费福利一区| 欧美日韩三区四区| 亚州av日韩av| 久久久久久一区| 偷窥自拍亚洲色图精选| 精品伦理一区二区三区| 国产精品99久久免费观看| 波多野结衣久草一区| 国产欧美88| 91日本在线观看| 成人交换视频| 国产在线视频一区| 青青国产精品| 91亚洲精品久久久| 欧美黄视频在线观看| 亚洲综合大片69999| 国产日韩欧美中文在线| 亚洲r级在线观看| 色悠久久久久综合先锋影音下载| 91中文在线观看| 一区二区三区视频免费视频观看网站 | 无码人妻久久一区二区三区| 色婷婷久久久综合中文字幕 | 久久激情五月激情| 日本77777| 国产裸体歌舞团一区二区| 国产成人强伦免费视频网站| 国产精品影视天天线| 女同性αv亚洲女同志| 成人免费毛片aaaaa**| avtt香蕉久久| 欧美国产日韩一二三区| 中文字幕乱码av| 一区二区三区日本| 99热国产在线观看| 91国偷自产一区二区三区观看| 中文字幕第315页| 制服丝袜激情欧洲亚洲| 午夜精品一二三区| 亚洲男女性事视频| 95在线视频| 欧美老女人性生活| 日本黄色免费在线| 国产精品久久久久久久久| 自拍偷拍亚洲| 韩国成人动漫在线观看| 国产亚洲精品美女久久久久久久久久| 一区二区在线高清视频| 黄色亚洲免费| 亚洲成人av免费看| 国产99一区视频免费| 不卡一区二区在线观看| 国产精品进线69影院| 日本三级黄色大片| 欧美日韩成人激情| 婷婷av一区二区三区| 在线播放国产一区中文字幕剧情欧美| 1区2区3区在线视频| 欧美专区在线视频| 精品一区二区三区中文字幕视频 | 亚欧美无遮挡hd高清在线视频| 国产成人一区二区三区别| 日韩精品乱码免费| www.四虎精品| 中文字幕不卡在线播放| 五月天综合在线| 欧美福利视频一区| 麻豆影视在线| 久久久久亚洲精品成人网小说| 91精品影视| 精品国产免费久久久久久尖叫| 久久久久国产精品| 日本在线观看a| 国产91丝袜在线18| 又嫩又硬又黄又爽的视频| 天天色天天爱天天射综合| 91好色先生tv| 亚洲人高潮女人毛茸茸| 岛国片av在线| 18成人免费观看网站下载| 国产精品一区二区av交换| 国产va亚洲va在线va| 久久成人久久爱| 法国空姐电影在线观看| 亚洲成人中文在线| 国产免费高清视频| 一区二区三区精品99久久| 在线看片福利| 国产欧美一区二区三区不卡高清| 中文字幕亚洲精品乱码| 中文字幕第100页| 久久久精品人体av艺术| 手机看片久久久| 亚洲国产精彩中文乱码av在线播放| 毛片在线看片| 国产欧美精品一区二区三区介绍 | 97久久超碰国产精品| 久久av高潮av无码av喷吹| 在线不卡a资源高清| 午夜小视频在线| 国产精品日韩一区| 日韩欧美一区二区三区免费看| av免费在线播放网站| 99re这里只有精品6| 日韩精品视频免费看| 亚洲第一精品久久忘忧草社区| 三级网站视频在在线播放| 亚洲最大的免费| 自拍欧美日韩| 国产无套精品一区二区三区| 一区二区成人在线观看| 亚洲风情第一页| 欧美激情奇米色| 久久综合五月婷婷| 免费看国产曰批40分钟| aaa国产一区| 成人午夜淫片100集| 国产一区二区三区在线视频| 精品视频一区二区三区四区五区| 日韩国产欧美一区| 青青草伊人久久| 色偷偷www8888| 91精品国产日韩91久久久久久| 在线中文字幕第一页| 国产精品久久久久久久久久直播| 亚洲精品少妇| wwwwww日本| 欧美性猛交xxxxxx富婆| 日本综合在线| 成人9ⅰ免费影视网站| 日韩一区二区免费看| 公侵犯人妻一区二区三区| 欧美影院一区二区| 日本高清中文字幕在线| 91久久精品www人人做人人爽| 欧美福利视频| 久久久久亚洲AV成人无码国产| 欧美性猛交xxxx乱大交| yourporn在线观看视频| 成人黄色在线免费| 精品白丝av| 久久久精品成人| 91精品国产品国语在线不卡| 波多野结衣中文字幕久久| 鲁片一区二区三区| 麻豆精品视频在线| 毛片a片免费观看| 亚洲男人av在线| 精品成人18| 欧美一级在线看| 亚洲欧洲成人av每日更新| 亚洲精品无amm毛片| 日韩免费在线免费观看| 国产精品久久久久久久久久10秀| 91成人在线观看喷潮蘑菇| 日本精品免费观看高清观看| 成人影欧美片| 免费看污久久久| 国产成人在线电影| 日本三级一区二区三区| 欧美大片免费看| 欧美一级精品| 亚洲精品乱码久久| 欧美日韩精品欧美日韩精品| 国产免费拔擦拔擦8x高清在线人| 亚洲国产精品一区在线观看不卡 | 视频一区二区国产| 麻豆亚洲av熟女国产一区二| 亚洲视频电影图片偷拍一区| 大香伊人久久精品一区二区| 第四色婷婷基地| 欧美小视频在线观看| 在线视频国产区| 亚洲欧美日韩另类精品一区二区三区 |