在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow和PyTorch的實際應(yīng)用比較

jt_rfid5 ? 來源:新機器視覺 ? 2023-01-14 11:53 ? 次閱讀

TensorFlow和PyTorch是兩個最受歡迎的開源深度學(xué)習(xí)框架,這兩個框架都為構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型提供了廣泛的功能,并已被研發(fā)社區(qū)廣泛采用。但是作為用戶,我們一直想知道哪種框架最適合我們自己特定項目,所以在本文與其他文章的特性的對比不同,我們將以實際應(yīng)用出發(fā),從性能、可伸縮性和其他高級特性方面比較TensorFlow和PyTorch。

01性能

在選擇深度學(xué)習(xí)框架時,一個關(guān)鍵的考慮因素是你構(gòu)建和訓(xùn)練的模型的性能。

TensorFlow和PyTorch都進行了性能優(yōu)化,這兩個框架都提供了大量的工具和技術(shù)來提高模型的速度。

就原始性能而言,TensorFlow比PyTorch更好一些。這兩個框架之間的一個關(guān)鍵區(qū)別是使用靜態(tài)計算圖而不是動態(tài)計算圖。在TensorFlow中,在模型訓(xùn)練之前,計算圖是靜態(tài)構(gòu)造的。這使得TensorFlow可以通過分析圖并應(yīng)用各種優(yōu)化技術(shù)來更有效地優(yōu)化圖的性能。

而PyTorch使用動態(tài)計算圖,這意味著圖是在訓(xùn)練模型時動態(tài)構(gòu)建的。雖然這可能更靈活,更容易使用,但在某些情況下也可能效率較低。

但是記住這一點很重要

TensorFlow和PyTorch之間的性能差異相非常小,這是因為這兩個框架都對性能進行了優(yōu)化,并提供了許多工具和方法來提高模型的速度,在很多情況下根本發(fā)現(xiàn)不了他們的區(qū)別。

除了使用靜態(tài)與動態(tài)計算圖之外,還有許多其他因素會影響模型的性能。這些因素包括硬件和軟件環(huán)境的選擇、模型的復(fù)雜性以及數(shù)據(jù)集的大小。通過考慮這些因素并根據(jù)需要應(yīng)用優(yōu)化技術(shù),可以使用TensorFlow或PyTorch構(gòu)建和訓(xùn)練高性能模型。

除了原始性能,TensorFlow和PyTorch都提供了大量的工具和方法來提高模型的速度:

TensorFlow提供了多種優(yōu)化方法,可以極大地提高模型的性能,例如自動混合精度和XLA。

XLA(加速線性代數(shù)):TensorFlow包括一個稱為XLA的即時(JIT)編譯器,它可以通過應(yīng)用多種優(yōu)化技術(shù)來優(yōu)化模型的性能,包括常數(shù)折疊、代數(shù)簡化和循環(huán)融合。要啟用XLA,可以使用tf.config.optimizer.set_jit函數(shù)。

TFX (TensorFlow Extended): TFX是一套用于構(gòu)建和部署機器學(xué)習(xí)管道的庫和工具,包括用于數(shù)據(jù)處理、模型訓(xùn)練和模型服務(wù)的工具。TFX可以通過自動化所涉及的許多步驟,更有效地構(gòu)建和部署機器學(xué)習(xí)模型。

tf.function函數(shù)裝飾器可以將TensorFlow函數(shù)編譯成一個圖,這可能比強制執(zhí)行函數(shù)更快,可以利用TensorFlow的優(yōu)化技術(shù)來提高模型的性能。

PyTorch通過使用torch.autograd 和torch.jit等提供了優(yōu)化模型的方法,它提高模型的有效性

torch.autograd.profiler:通過跟蹤 PyTorch 模型的各種元素使用的時間和內(nèi)存量,可以幫助找到瓶頸和代碼中需要改進的地方。

torch.nn.DataParallel:torch.nn.DataParallel 類可跨多個設(shè)備(例如 GPU)并行訓(xùn)練 PyTorch 模型。通過使用 DataParallel,可以利用多個設(shè)備來增加模型的推理效率。

torch.jit:使用即時 (JIT) 編譯器優(yōu)化 PyTorch 模型。torch.jit 將模型編譯成靜態(tài)計算圖,與動態(tài)圖相比可以更有效地進行優(yōu)化。

靜態(tài)與動態(tài)計算圖定義的編碼示例:

如前所述,TensorFlow在原始性能方面比PyTorch略有優(yōu)勢,這是由于它的靜態(tài)計算圖。

下面是一個在TensorFlow中構(gòu)建前饋神經(jīng)網(wǎng)絡(luò)的簡單例子:


 import tensorflow as tf
 
 # Define the model
 model = tf.keras.Sequential([
     tf.keras.layers.Dense(64, activation='relu', input_shape=(64,)),
     tf.keras.layers.Dense(64, activation='relu'),
     tf.keras.layers.Dense(10, activation='softmax')
 ])
 
 # Compile the model
 model.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])
 
 # Fit the model
 model.fit(x_train, y_train, epochs=5)

下面是在PyTorch中實現(xiàn)和訓(xùn)練的相同模型:


 import torch
 import torch.nn as nn
 import torch.optim as optim
 
 # Define the model
 class Net(nn.Module):
     def __init__(self):
         super(Net, self).__init__()
         self.fc1 = nn.Linear(64, 64)
         self.fc2 = nn.Linear(64, 64)
         self.fc3 = nn.Linear(64, 10)
     def forward(self, x):
         x = self.fc1(x)
         x = self.fc2(x)
         x = self.fc3(x)
         return x
 
 # Create the model instance
 model = Net()
 
 # Define the loss function and optimizer
 criterion = nn.CrossEntropyLoss()
 optimizer = optim.Adam(model.parameters())
 
 # Training loop
 for epoch in range(5):
     # Forward pass
     output = model(x_train)
 
     loss = criterion(output, y_train)
 
     # Backward pass and optimization step
     optimizer.zero_grad()
     loss.backward()
     optimizer.step()

這兩個例子都展示了如何構(gòu)建和訓(xùn)練一個簡單的前饋神經(jīng)網(wǎng)絡(luò),雖然方法不同但是他們的性能基本卻相同。對于性能的對比,目前來說兩個框架基本相同,差異可以忽略不計。

02可伸縮性

在選擇深度學(xué)習(xí)框架時,另一個重要考慮因素是可伸縮性。隨著模型的復(fù)雜性和規(guī)模的增長,需要一個能夠處理不斷增長的計算需求的框架。

這兩個框架都提供了擴展模型的策略,但它們處理問題的方式略有不同。

TensorFlow在設(shè)計時考慮了可伸縮性,并提供了許多用于分布式訓(xùn)練和部署的工具。

例如,TensorFlow 的 tf. distribute API 可以輕松地跨多個設(shè)備和服務(wù)器分發(fā)訓(xùn)練,而 TensorFlow Serving 可以將經(jīng)過訓(xùn)練的模型部署到生產(chǎn)環(huán)境。

PyTorch也提供用于分布式培訓(xùn)和部署的工具,但重點更多地放在研究和開發(fā)上,而不是生產(chǎn)環(huán)境。

PyTorch 的 torch.nn.DataParallel 和 torch.nn.parallel.DistributedDataParallel 類可以跨多個設(shè)備并行訓(xùn)練,而 PyTorch Lightning 庫(非官方)為分布式訓(xùn)練和部署提供了一個高級接口

TensorFlow

tf.distribute.Strategy:tf.distribute.Strategy API 可跨多個設(shè)備和機器并行訓(xùn)練 TensorFlow 模型。有許多不同的策略可用,包括 tf.distribute.MirroredStrategy,它支持在單臺機器上的多個 GPU 上進行訓(xùn)練,以及 tf.distribute.experimental.MultiWorkerMirroredStrategy,它在具有多個 GPU 的多臺機器上提供訓(xùn)練。

tf.data.Dataset:可以為訓(xùn)練構(gòu)建了高效且高度并行化的數(shù)據(jù)管道。通過使用 tf.data.Dataset,可以輕松地并行加載和預(yù)處理大型數(shù)據(jù)集,這可以模型擴展到更大的數(shù)據(jù)集。

tf.keras.layers.Normalization:tf.keras.layers.Normalization 層實時規(guī)范化輸入數(shù)據(jù),這可能有助于提高模型的性能。應(yīng)用歸一化可以減少大輸入值的影響,這可以幫助模型更快地收斂并獲得更好的性能。

tf.data.Dataset.interleave:通過對數(shù)據(jù)并行應(yīng)用函數(shù),再次并行處理輸入數(shù)據(jù)。這對于數(shù)據(jù)預(yù)處理等任務(wù)非常有用,在這些任務(wù)中您需要對數(shù)據(jù)應(yīng)用大量轉(zhuǎn)換。

Pytorch

torch.nn.parallel.DistributedDataParallel:torch.nn.parallel.DistributedDataParallel 類在多個設(shè)備和機器上并行訓(xùn)練 PyTorch 模型。但是需要使用torch.nn.parallel.DistributedDataParallel.init_process_group 設(shè)置分布式訓(xùn)練環(huán)境。

torch.utils.data.DataLoader:創(chuàng)建一個數(shù)據(jù)迭代器,用于并行處理數(shù)據(jù)的加載和預(yù)處理。

torch.utils.data.distributed.DistributedSampler:類似于 torch.utils.data.DistributedSampler,但設(shè)計用于與 DistributedDataParallel 類一起使用。通過使用 DistributedSampler,可以確保在使用DistributedDataParallel 進行訓(xùn)練時,每個設(shè)備都會收到平衡的數(shù)據(jù)樣本。

通過利用這些函數(shù)和類,可以將 TensorFlow 和 PyTorch 模型擴展到更大的數(shù)據(jù)集和更強大的硬件,構(gòu)建更準(zhǔn)確、更強大的模型。

下面介紹了提高可伸縮性的兩種不同方法。

TensorFlow的第一個例子使用了tf.distribute. mirrredstrategy:


 import tensorflow as tf
 
 # Define the model
 model = tf.keras.Sequential([
     tf.keras.layers.Dense(64, activation='relu', input_shape=(64,)),
     tf.keras.layers.Dense(64, activation='relu'),
     tf.keras.layers.Dense(10, activation='softmax')
 ])
 
 # Compile the model
 model.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])
 
 # Define the distribution strategy
 strategy = tf.distribute.MirroredStrategy()
 
 # Load the dataset
 dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(64)
 
 # Define the training loop
 with strategy.scope():
     for epoch in range(5):
         for x_batch, y_batch in dataset:
           model.fit(x_batch, y_batch)

在PyTorch使用 torch.nn.DataParallel :


 import torch
 import torch.nn as nn
 import torch.optim as optim
 
 # Define the model
 class Net(nn.Module):
     def __init__(self):
         super(Net, self).__init__()
         self.fc1 = nn.Linear(64, 64)
         self.fc2 = nn.Linear(64, 64)
         self.fc3 = nn.Linear(64, 10)
    
     def forward(self, x):
         x = self.fc1(x)
         x = self.fc2(x)
         x = self.fc3(x)
         return x
 
 # Create the model instance and wrap it in DataParallel
 model = nn.DataParallel(Net())
 
 # Define the loss function and optimizer
 criterion = nn.CrossEntropyLoss()
 optimizer = optim.Adam(model.parameters())
 
 # Training loop
 for epoch in range(5):
     # Forward pass
     output = model(x_train)
     loss = criterion(output, y_train)
     
     # Backward pass and optimization step
     optimizer.zero_grad()
     loss.backward()
     optimizer.step()

這兩個例子都展示了如何在多個設(shè)備上并行訓(xùn)練,但TensorFlow對于分布式訓(xùn)練的支持要比Pytorch更好一些。

03高級的特性

除了性能和可伸縮性之外,這兩個框架還提供了許多項目相關(guān)的高級特性。

例如,TensorFlow擁有強大的工具和庫生態(tài)系統(tǒng),包括用于可視化的TensorBoard和用于模型部署和服務(wù)的TensorFlow Extended。

PyTorch也多個高級特性,一般都會命名為 torchXXX,比如torchvision,torchaudio等等

我們以TensorBoard為例介紹兩個庫的使用,雖然TensorBoard是TensorFlow的一部分,但是Pytorch也通過代碼部分兼容了數(shù)據(jù)部分的發(fā)送,也就是說使用Pytorch也可以往TensorBoard寫入數(shù)據(jù),然后通過TensorBoard進行查看。

TensorFlow 在訓(xùn)練時使用TensorBoard的callback可以自動寫入。


 import tensorflow as tf
 
 # Define the model
 model = tf.keras.Sequential([
     tf.keras.layers.Dense(64, activation='relu', input_shape=(64,)),
     tf.keras.layers.Dense(64, activation='relu'),
     tf.keras.layers.Dense(10, activation='softmax')
 ])
 
 # Compile the model
 model.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])
 
 # Define a TensorBoard callback
 tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='logs')
 
 # Fit the model
 model.fit(x_train, y_train, epochs=5, callbacks=[tensorboard_callback])

Pytorch需要自行代碼寫入:


 import numpy as np
 from torch.utils.tensorboard import SummaryWriter
 
 writer = SummaryWriter(comment='test_tensorboard')
 for x in range(100):
     writer.add_scalar('y=2x', x * 2, x)
     writer.add_scalar('y=pow(2, x)',  2 ** x, x)
     writer.add_scalars('data/scalar_group', {"xsinx": x * np.sin(x),
                                              "xcosx": x * np.cos(x),
                                              "arctanx": np.arctan(x)}, x)
 writer.close()

在高級特性中我覺得最主要的就是TensorFlow 中引入了Keras,這樣只需要幾行代碼就可以完成完整的模型訓(xùn)練


 # Compile the model
 model.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])
 model.fit(x_train, y_train, epochs=5)

而Pytorch還要手動進行損失計算,反向傳播


     output = model(x_train)
     loss = criterion(output, y_train)
     
     # Backward pass and optimization step
     optimizer.zero_grad()
     loss.backward()
     optimizer.step()

雖然這樣靈活性很高,但是應(yīng)該有一個像Keras這樣的通用方法(TensorFlow 也可以手動指定計算過程,并不是沒有),所以在這一部分中我覺得TensorFlow要比Pytorch好很多。

當(dāng)然也有一些第三方的庫來簡化Pytorch的訓(xùn)練過程比如PyTorch Lightning、TorchHandle等但是終究不是官方的庫。

04 最后總結(jié)

最適合你的深度學(xué)習(xí)框架將取決于你的具體需求和要求

TensorFlow 和 PyTorch 都提供了廣泛的功能和高級特性,并且這兩個框架都已被研發(fā)社區(qū)廣泛采用。作為高級用戶,我的個人建議是深入學(xué)習(xí)一個庫,另外一個庫代碼基本上是類似的,基礎(chǔ)到了基本上做到能看懂就可以了,比如


 class DNNModel(nn.Module):
     def __init__(self):
         super(DNNModel, self).__init__()
         self.fc1 = nn.Linear(2,4)
         self.fc2 = nn.Linear(4,8) 
         self.fc3 = nn.Linear(8,1)
         
     # 正向傳播
     def forward(self,x):
         x = F.relu(self.fc1(x))
         x = F.relu(self.fc2(x))
         y = nn.Sigmoid()(self.fc3(x))
         return y
 ################
 class DNNModel(models.Model):
     def __init__(self):
         super(DNNModel, self).__init__()
         
     def build(self,input_shape):
         self.dense1 = layers.Dense(4,activation = "relu",name = "dense1") 
         self.dense2 = layers.Dense(8,activation = "relu",name = "dense2")
         self.dense3 = layers.Dense(1,activation = "sigmoid",name = "dense3")
         super(DNNModel,self).build(input_shape)
  
     # 正向傳播
     @tf.function(input_signature=[tf.TensorSpec(shape = [None,2], dtype = tf.float32)])  
     def call(self,x):
         x = self.dense1(x)
         x = self.dense2(x)
         y = self.dense3(x)
         return y

看看上面代碼的兩個類它們的區(qū)別并不大,對吧。

下面是google trends的趨勢對比,我們可以看到明顯的區(qū)別

6b5d876e-9350-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4771

    瀏覽量

    100766
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3349

    瀏覽量

    42499
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5503

    瀏覽量

    121162
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60536
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    808

    瀏覽量

    13226

原文標(biāo)題:【光電智造】TensorFlow和PyTorch的實際應(yīng)用比較

文章出處:【微信號:今日光電,微信公眾號:今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    TensorFlowPyTorch,“后浪”O(jiān)neFlow 有沒有機會

    TensorFlowPyTorch,“后浪”O(jiān)neFlow 有沒有機會 | 一流科技工程師成誠編者按:7月31日,一流科技在創(chuàng)業(yè)1300天后,他們宣布開源自研的深度學(xué)習(xí)框架OneFlow,此前,CSDN對CEO袁進輝進行了專訪。本文中,一流科技工程師成...
    發(fā)表于 07-27 08:24

    如何安裝TensorFlow2 Pytorch

    如何安裝TensorFlow2 Pytorch
    發(fā)表于 03-07 07:32

    在Ubuntu 18.04 for Arm上運行的TensorFlowPyTorch的Docker映像

    TensorFlowPyTorch是兩個最流行的機器學(xué)習(xí)框架。兩者在 Arm 上的使用都在增加,從像 Raspberry Pi 這樣的小型系統(tǒng)到用于服務(wù)器和高性能計算 (HPC) 的大型系統(tǒng)。盡管
    發(fā)表于 10-14 14:25

    S32G-GoldVip上的PytorchTensorflow如何啟用?

    大家好,我想在 Goldbox 上運行我的 ML 模型,我看到 Goldvip 有一個可用的庫 eIQ Auto,它提供內(nèi)部使用 TensorflowPytorch/Keras 2.x,請幫助我了解這些庫在哪里可用以及如何啟用它們在我開發(fā) ML 模型部署時。
    發(fā)表于 03-30 07:05

    什么是張量,如何在PyTorch中操作張量?

    Kirill Dubovikov寫的PyTorch vs TensorFlow?—?spotting the difference比較PyTorch
    的頭像 發(fā)表于 10-12 08:58 ?1.6w次閱讀

    PyTorch可以和TensorFlow一樣快,有時甚至比TensorFlow更快了?

    我聽說 PyTorch 在 cuDNN 級別上進行了更好的優(yōu)化。有人能提供更多細節(jié)嗎?是什么阻止了 TensorFlow 做同樣的事情?我所知道的惟一優(yōu)化是 PyTorch 使用 NCHW 格式 (針對 cuDNN 進行了更好的
    的頭像 發(fā)表于 09-07 07:50 ?9309次閱讀

    tensorflow和python的關(guān)系_tensorflowpytorch的區(qū)別

    Tensorflow和Python有什么關(guān)系?Tensorflow是Python的機器學(xué)習(xí)庫,Python的庫有很多,如Tensorflow、NumPy、Httpie、Django、Flask、Ansible。我們知道章魚有很多
    的頭像 發(fā)表于 12-04 14:54 ?2w次閱讀

    PyTorch1.8和Tensorflow2.5該如何選擇?

    自深度學(xué)習(xí)重新獲得公認以來,許多機器學(xué)習(xí)框架層出不窮,爭相成為研究人員以及行業(yè)從業(yè)人員的新寵。從早期的學(xué)術(shù)成果 Caffe、Theano,到獲得龐大工業(yè)支持的 PyTorchTensorFlow
    的頭像 發(fā)表于 07-09 10:33 ?1515次閱讀

    TensorFlow的衰落與PyTorch的崛起

    在采訪開發(fā)者、硬件專家、云提供商以及熟悉谷歌機器學(xué)習(xí)工作的人士時,他們的觀點也是相同的。TensorFlow 在爭奪開發(fā)者人心的競爭中落敗。其中有些人甚至使用了令人難以理解的確切說法:“PyTorch 正在享用 TensorFlow
    的頭像 發(fā)表于 11-04 14:23 ?1719次閱讀

    深度學(xué)習(xí)框架PyTorchTensorFlow如何選擇

    在 AI 技術(shù)興起后,深度學(xué)習(xí)框架 PyTorchTensorFlow 兩大陣營似乎也爆發(fā)了類似的「戰(zhàn)爭」。這兩個陣營背后都有大量的支持者,并且他們都有充足的理由來說明為什么他們所喜歡的框架是最好的。
    發(fā)表于 02-02 10:28 ?1031次閱讀

    PyTorchTensorFlow的優(yōu)點和缺點

    轉(zhuǎn)載自:冷凍工廠 ? 深度學(xué)習(xí)框架是簡化人工神經(jīng)網(wǎng)絡(luò) (ANN) 開發(fā)的重要工具,并且其發(fā)展非常迅速。其中,TensorFlowPyTorch 脫穎而出,各自在不同的機器學(xué)習(xí)領(lǐng)域占有一席之地
    的頭像 發(fā)表于 10-30 09:56 ?1028次閱讀
    <b class='flag-5'>PyTorch</b>與<b class='flag-5'>TensorFlow</b>的優(yōu)點和缺點

    XLA和PyTorch的鏈接代碼示例

    XLA (Accelerated Linear Algebra)是一個開源的機器學(xué)習(xí)編譯器,對PyTorchTensorflow、JAX等多個深度學(xué)習(xí)框架都有支持。最初XLA實際上是跟
    的頭像 發(fā)表于 11-17 10:54 ?740次閱讀

    TensorFlowPyTorch深度學(xué)習(xí)框架的比較與選擇

    學(xué)習(xí)框架,它們各自擁有獨特的特點和優(yōu)勢。本文將從背景介紹、核心特性、操作步驟、性能對比以及選擇指南等方面對TensorFlowPyTorch進行詳細比較,以幫助讀者了解這兩個框架的優(yōu)缺點,并選擇最適合自己需求的框架。
    的頭像 發(fā)表于 07-02 14:04 ?973次閱讀

    tensorflowpytorch哪個好

    tensorflowpytorch都是非常不錯的強大的框架,TensorFlow還是PyTorch哪個更好取決于您的具體需求,以下是關(guān)于這兩個框架的一些關(guān)鍵點:
    的頭像 發(fā)表于 07-05 09:42 ?687次閱讀

    tensorflowpytorch哪個更簡單?

    PyTorch更簡單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個易于使用、靈活且具有強大社區(qū)支持的框架,PyTorch可能是一個更好的選擇。如果
    的頭像 發(fā)表于 07-05 09:45 ?870次閱讀
    主站蜘蛛池模板: 天天爽天天爽天天片a久久网| 国产成人福利夜色影视| 2019天天操| www.99在线观看| 黑色丝袜美美女被躁视频| 国产精品毛片天天看片| 护士一级aaaaaa毛片| 色www视频永久免费| 成人免费视频一区| www福利视频| 天堂网在线播放| 成人sese| 欧美黄色高清| 日韩高清一级| 小雪被老外黑人撑破了| 中文字幕一区二区三区永久| 色色色爱| 巨乳色网站| 热九九精品| 在线天堂中文有限公司| 久久全国免费久久青青小草| 久久久久久久国产免费看| 最近2018中文字幕免费看手机| 精品香港经典三级在线看| 国产小视频在线观看免费| 亚州1区2区3区4区产品乱码2021| 国产玖玖| 国产黄色在线看| 欧亚色视频| 九九热在线免费| 性无码专区无码| 亚洲精品影视| 精品国产自在现线看久久| 教官的好爽好深h片段| 成人影院免费观看| 三级网站免费| 欧美成人全部费免网站| 亚洲字幕久久| 亚洲天天做日日做天天欢毛片 | 69xx女xo69| 明日花绮罗在线观看|