欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網運營的一線實戰(zhàn)洞察。

PyTorch圖像分類實戰(zhàn):從數據預處理到模型部署的完整指南

PyTorch圖像分類實戰(zhàn):從數據預處理到模型部署的完整指南 1. 搭建開發(fā)環(huán)境與準備數據集1.1 先想清楚框架選型為什么我這次用 PyTorch圖像分類是深度學習里最典型、也最適合上手的任務類型。你在網上隨便一搜這類項目遍地都是但絕大多數教程要么停留在理論層面要么代碼貼了滿屏卻跑不通。這次我拿模擬項目X的實戰(zhàn)過程來做演示從環(huán)境搭建一直帶到模型推理把每個環(huán)節(jié)里的為什么講清楚。框架選型上PyTorch 和 TensorFlow 各自都有龐大的用戶群我這次選 PyTorch 不是因為它比 TensorFlow 高級而是因為在圖像分類這個場景里PyTorch 的動態(tài)計算圖太適合初學者做調試。你在訓練過程中想打印某一層的輸出、想臨時改一下網絡結構都不用重構整個計算圖。加上 torchvision 里直接集成了 CIFAR-10、ImageNet 這類經典數據集的下載接口也有預訓練模型權重做遷移學習非常順手。TensorFlow 當然也能做但 Keras 高層 API 封裝太嚴很多內部機制被隱藏掉了對想深入理解訓練過程的人來說不如 PyTorch 直觀。我這里強調一下版本問題。PyTorch 的 API 在不同版本之間偶有變動比如舊版本的torchvision.transforms里某些函數在新版本已經改了位置。我這次用的是 2.x 版本理論上 1.12 以上都兼容但如果你裝的是很老的版本遇到 API 不存在或者參數對不上的報錯不要懷疑是自己的代碼寫錯了先查一下版本。習慣上我會用pip show torch確認當前版本。1.2 安裝依賴最小可運行環(huán)境裝環(huán)境不需要裝一堆亂七八糟的包最小集合就四個torch、torchvision、numpy、matplotlib。分類任務里 matplotlib 不是必須的但后期看損失曲線、可視化預測結果時沒有它就很痛苦。pip install torch torchvision numpy matplotlib如果你有 NVIDIA 顯卡建議裝 CUDA 版本的 PyTorch。安裝前先用命令nvidia-smi看一下支持的 CUDA 版本然后去 PyTorch 官網選對應的安裝命令。沒有顯卡也不用擔心CPU 版本能跑只是訓練慢一些。我最初跑項目時就是純 CPU 機器CIFAR-10 一個 epoch 要接近兩分鐘雖然慢但對理解訓練流程完全夠用。真實項目里我見過不少人花大量時間折騰 GPU 環(huán)境其實一個簡單的分類任務CPU 也完全能撐到模型收斂頂多多等一會兒。裝完之后寫三行代碼驗證是否安裝成功import torch import torchvision print(torch.__version__) print(torch.cuda.is_available())如果打印出版本號環(huán)境就算就緒。cuda.is_available()返回 False 不代表失敗只是說明當前機器沒有可用的 GPU。1.3 數據集準備自己整理一個貓狗分類數據目錄很多人一上來就直接調用torchvision.datasets.CIFAR10這當然是最省事的方式。但我建議真正的實戰(zhàn)項目還是自己整理一份圖片數據集因為工作里遇到的絕大多數情況都是你自己的圖片需要手動把數據組織成模型能吃的格式。我這次用的是某公開數據集里的貓狗圖片大概 25000 張。目錄結構如下data/ train/ cat/ cat_0001.jpg cat_0002.jpg dog/ dog_0001.jpg val/ cat/ cat_0001.jpg dog/ dog_0001.jpg這個結構看似簡單但它是 torchvision 的ImageFolder直接支持的格式。ImageFolder會自動把每個子目錄當作一個類別目錄名會變成標簽的索引。所以你的目錄命名一定要起對標簽名就是最終的分類類別。數據劃分的比例上我習慣按 8:2 拆訓練集和驗證集。這里有個經驗驗證集的圖片不要從訓練集里復制應該從原始數據里獨立抽樣保證驗證集和訓練集的圖片沒有任何重疊。如果訓練集和驗證集有相同圖片驗證集的準確率就會虛高看起來 99% 的模型上線后可能連 80% 都不到。dataset torchvision.datasets.ImageFolder( root./data, transformtransform ) train_size int(0.8 * len(dataset)) val_size len(dataset) - train_size train_dataset, val_dataset torch.utils.data.random_split( dataset, [train_size, val_size] )這段代碼中random_split是隨機劃分的但它打亂的是索引而不是圖片本身所以圖片不會重復出現(xiàn)在兩個集合中。如果你需要更精細的控制比如確保每類圖片在訓練集和驗證集中的比例都接近 8:2就需要用分層采樣的方式。不過對于大多數分類任務整體 8:2 的比例已經足夠了。2. 數據預處理與數據增強2.1 歸一化為什么要用固定的均值和方差圖像分類的第一步是數據預處理這個環(huán)節(jié)看起來不起眼但對最終準確率的影響非常大。預處理里最關鍵的一步是歸一化。一個常見的誤區(qū)是以為歸一化就是把像素值從 [0, 255] 縮放到 [0, 1]。沒錯這個過程是縮放但真正專業(yè)的做法是用每個通道的均值和標準差做標準化。標準化公式是x_norm (x - mean) / std為什么不能只做簡單的 [0,1] 縮放因為自然圖像的 RGB 三個通道的像素分布并不是均勻的。比如在貓狗照片里綠色通道的均值通常低于紅色通道直接用 [0,1] 縮放會讓網絡在初始階段對不同通道的響應不夠均衡。使用固定均值和標準差后每個通道的像素分布都被拉成標準正態(tài)分布輸入數據的尺度趨于一致網絡收斂速度會明顯加快。torchvision 里對在 ImageNet 上預訓練的模型標準做法是transform_normalize torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] )這三個均值和標準差是從 ImageNet 數據集統(tǒng)計出來的。如果你用的是 torchvision 提供的預訓練權重那就必須用這一組數值否則遷移學習的效果會大打折扣。如果你是自己從零訓練模型理論上可以自己統(tǒng)計數據集的均值和方差但絕大多數人直接用 ImageNet 的那組數值也能取得不錯的效果。2.2 transforms.Compose 中的順序陷阱transforms.Compose是 torchvision 提供的串聯(lián)預處理操作的工具。我把訓練集和驗證集分別定義成兩套不同的預處理流程。訓練集完整配置train_transform torchvision.transforms.Compose([ torchvision.transforms.RandomResizedCrop(224), torchvision.transforms.RandomHorizontalFlip(), torchvision.transforms.ColorJitter( brightness0.2, contrast0.2, saturation0.2 ), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] ) ])驗證集配置val_transform torchvision.transforms.Compose([ torchvision.transforms.Resize(256), torchvision.transforms.CenterCrop(224), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] ) ])這里有個很關鍵但容易被忽略的點驗證集不能做隨機增強操作。有人圖省事直接給驗證集也套了RandomHorizontalFlip導致每次驗證的結果都不一樣評估指標不穩(wěn)定最終模型的好壞完全沒法判斷。RandomResizedCrop也一樣它是隨機裁剪你每次跑驗證時輸入模型的圖片內容都不同驗證集就失去了穩(wěn)定衡量模型能力的意義。另一個需要注意的點是ToTensor()必須放在Normalize()之前。ToTensor會把 PIL Image 或 numpy 數組轉成 0-1 之間的浮點數張量Normalize才能在這個基礎上做標準化。順序反了會直接報錯。2.3 Dataset 與 DataLoader 的參數細節(jié)DataLoader是 PyTorch 里負責批量喂數據的工具。它的參數里batch_size的選擇會直接影響訓練效果和顯存占用shuffle只在訓練集上設為 Truenum_workers控制子進程數量。以我這次的貓狗分類為例我用的是 64 的 batch size。這個數值不是拍腦袋定的取決于顯存大小和單張圖片的尺寸。輸入圖片是 224×224ResNet18 在 12GB 顯存下可以跑到 128但 64 更穩(wěn)妥。batch size 太小比如 8 或 16梯度更新頻率高訓練過程會很震蕩模型不容易收斂batch size 太大比如 256 或 512每個 epoch 的步數少模型的泛化能力可能變弱。64 是個在多數任務上都不太會翻車的中間值。num_workers的值我最常用的是 4。如果你的機器性能一般也可以設 2甚至 0表示用主進程直接加載。設成 8 不一定更快因為進程調度本身也有開銷而且 Windows 環(huán)境下如果把num_workers設成非 0 值在 Jupyter 里跑經常會遇到重復導入的問題。train_loader torch.utils.data.DataLoader( train_dataset, batch_size64, shuffleTrue, num_workers4, pin_memoryTrue ) val_loader torch.utils.data.DataLoader( val_dataset, batch_size64, shuffleFalse, num_workers4, pin_memoryTrue )pin_memoryTrue是給 GPU 訓練提速用的它讓數據存儲在鎖頁內存里從 CPU 復制到 GPU 的傳速更快。如果使用 CPU 訓練這個參數沒什么意義。這里還有一個隱藏細節(jié)驗證集的shuffleFalse很重要。除了保證驗證結果穩(wěn)定之外后續(xù)分析錯誤樣本時你還需要知道模型預測錯的是哪些圖、原標簽是什么。如果驗證集被打亂了你很難把預測結果和原始圖片對應起來做可視化分析。3. 搭建模型并跑通訓練流程3.1 從零訓練還是用預訓練模型搭建模型的思路分兩條路從零訓練一個 CNN或者用 ImageNet 上預訓練好的模型做遷移學習。對新人來說我建議兩條路都走一遍先搭一個小 CNN 走通全流程再用 ResNet18 做遷移學習對比兩者的差距。一個最簡單的 CNN 結構是這樣import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes2): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), nn.Conv2d(64, 128, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(128 * 28 * 28, 256), nn.ReLU(inplaceTrue), nn.Dropout(0.5), nn.Linear(256, num_classes) ) def forward(self, x): return self.classifier(self.features(x))這個結構里卷積層負責提取圖像特征全連接層負責把特征映射到類別。第一次跑的時候你會把大量時間花在調參上最終準確率可能只有 70%-80%。這很正常從零訓練需要大量數據和算力你的數據量和算力都不足以撐起一個非常有表達能力的網絡。用預訓練模型做遷移學習才是效率最高的方案。torchvision 里有很多現(xiàn)成的模型如 ResNet18、ResNet50、MobileNetV3、EfficientNet 等。ResNet18 算是輕量與效果平衡的最佳選擇。核心操作是替換最后一層全連接層讓輸出維度等于你的類別數import torchvision.models as models model models.resnet18(pretrainedTrue) num_features model.fc.in_features model.fc nn.Linear(num_features, 2)這里的關鍵是pretrainedTrue它會把在 ImageNet1000 類上訓練好的權重加載進來。ImageNet 覆蓋了貓、狗等多個類別的通用特征所以預訓練模型已經有很強的特征提取能力你只需要讓它適應貓狗二分類。通常準確率能輕松到 95% 以上。3.2 訓練的核心配置損失函數、優(yōu)化器與學習率圖像分類常用的損失函數是交叉熵損失CrossEntropyLoss。你不需要在前向傳播里單獨加 Softmax 激活函數nn.CrossEntropyLoss內部已經融合了 Softmax 和損失計算。使用的時候就一行criterion nn.CrossEntropyLoss()這里有個細節(jié)模型輸出的是類別數維度的 logits不是概率損失函數內部會對它做 Softmax 變換所以不要在最后一層再接額外的 Softmax。如果你在模型末尾加了 Softmax訓練時就會發(fā)現(xiàn)損失值很奇怪、收斂極慢因為梯度在 Softmax 那里被壓縮了。優(yōu)化器我用過最多的組合是 Adam 和帶動量的 SGD。對新手我推薦先試 Adam因為它對學習率不那么敏感。踩過坑的經驗是Adam 的默認學習率 0.001 在大多數分類任務上都能跑出不錯的效果而 SGD 需要配合學習率調度才能發(fā)揮威力。optimizer torch.optim.Adam( model.parameters(), lr1e-3, weight_decay1e-4 )weight_decay是 L2 正則化項它防止模型過擬合。如果訓練集不大幾千張圖我建議加上。常用值是 1e-4 或 5e-4。如果要用 SGD歷史代碼里最常見的組合是optimizer torch.optim.SGD( model.parameters(), lr1e-2, momentum0.9, weight_decay1e-4 )SGD 的收斂精度通常比 Adam 高一些但對學習率的要求更苛刻。我的建議是先把 Adam 跑通、拿到一個不錯的基線再換 SGD 試試能不能進一步提升。不要一開始就兩邊調參否則工作量直接翻倍。另外學習率調度器建議從一開始就加上。最常見的兩個是StepLR和ReduceLROnPlateau。前者是每隔固定 epoch 數對學習率做衰減后者是當驗證損失不再下降時自動調低學習率。我更常用ReduceLROnPlateau因為它的自適應程度更高。scheduler torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, modemin, factor0.1, patience3 )含義是連續(xù) 3 個 epoch 驗證損失不下降就把學習率乘以 0.1。這樣你不用手動盯學習率模型基本能自己找到合適的區(qū)間。3.3 訓練循環(huán)train/eval 模式切換是硬性要求訓練循環(huán)的框架可以固定成下面這個模式。這里有一個特別容易踩的坑訓練時模型要切換成訓練模式驗證時一定要切換成評估模式。for epoch in range(20): model.train() train_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() train_loss loss.item() # 驗證階段 model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() val_acc 100 * correct / total print(fEpoch {epoch1}, Loss: {train_loss/len(train_loader):.4f}, Val Acc: {val_acc:.2f}%) scheduler.step(val_loss)先解釋model.train()和model.eval()這兩個模式切換。它們的關鍵影響在于模型的 Dropout 和 BatchNorm 層行為完全不同。train()模式下 Dropout 會隨機丟棄一部分神經元BatchNorm 會使用當前 batch 的統(tǒng)計量eval()模式下 Dropout 被關閉BatchNorm 使用訓練階段累計的全局統(tǒng)計量。如果你驗證時忘記切換成eval()驗證集的準確率會忽高忽低甚至出現(xiàn)嚴重偏差。這個問題我在初學階段至少踩過三次每次都會浪費大量時間去排查為什么驗證集效果差。optimizer.zero_grad()必須放在每輪迭代前面。PyTorch 默認會累加梯度如果不清零上一 batch 的梯度會疊加到當前 batch 上導致參數更新方向完全錯誤。有人問既然默認累加是不是也有好處確實在個別特殊場景里有人故意不清零梯度的寫法但圖像分類任務不要這么干。驗證階段用torch.no_grad()包住迭代循環(huán)意思是這一階段不需要計算梯度。這樣做能顯著減少內存占用和計算量。如果你不小心漏了這一步你的顯存會在跑驗證時暴漲甚至直接 OOMOut Of Memory。有些人遇到 OOM 以為是 batch size 太大實際原因是沒有關閉梯度計算。訓練循環(huán)里我習慣每輪都打印訓練損失和驗證準確率。損失值的走勢能直接反映訓練狀態(tài)如果訓練損失持續(xù)下降但驗證準確率不再上升甚至下降說明模型開始過擬合可以考慮更早?;蛘呒訌姅祿鰪姟?.4 訓練過程中怎么判斷模型狀態(tài)盯著終端的輸出不要只是看一眼準確率數字就完了。幾個常見的狀態(tài)信號訓練損失穩(wěn)步下降驗證準確率也在同步上升這是最健康的狀態(tài)。你什么都不用動讓它繼續(xù)跑。訓練損失下降很快驗證準確率卻停滯不前甚至下降。這是典型的過擬合信號。解決辦法有三條增強數據增強的強度比如加RandomRotation或RandomAffine加大weight_decay提前停掉訓練。訓練損失在某個數值附近震蕩不下降。這可能是學習率太大或者輸入數據的預處理有問題比如圖片噪聲過大、歸一化的順序錯了??梢栽囍褜W習率調低一個數量級再看看。訓練損失一開始就非常低比如降到 0.001 以下且驗證準確率很高這看起來很好但也要警惕。如果訓練集和驗證集分布不一致這種情況可能是模型學到了某些捷徑比如依賴圖片的背景、水印等非語義特征。做一次錯誤可視化分析就能發(fā)現(xiàn)這個問題。在這個階段我通常還會順手看一下模型預測的置信度分布。用torch.softmax(outputs, dim1)得到概率值再看看最高概率的平均值。如果模型對所有樣本都給出接近 1.0 的置信度很可能模型過擬合了如果置信度普遍在 0.5-0.7 之間徘徊說明模型的區(qū)分能力還不強。4. 評估模型與預測新圖片4.1 準確率不夠補充更多指標很多人訓練完模型只看準確率。單看一個指標很容易被誤導特別是當你面對一個類別不平衡的數據集時。比如 95% 的圖片都是狗模型只需要全部預測成狗就能拿到 95% 的準確率但這顯然不是一個好模型。所以除了準確率我還建議算一下精確率Precision、召回率Recall和 F1-score。這幾個指標在sklearn里有現(xiàn)成實現(xiàn)from sklearn.metrics import classification_report y_true [] y_pred [] model.eval() with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) y_true.extend(labels.cpu().numpy()) y_pred.extend(predicted.cpu().numpy()) print(classification_report(y_true, y_pred, target_names[cat, dog]))拿到的報告會顯示每一類的精確率和召回率。簡單解釋一下精確率表示模型預測為貓的樣本中有多少確實是貓召回率表示所有真正的貓中有多大比例被模型正確找了出來。F1-score 是這兩者的調和平均。我這次跑出來的初始模型貓的召回率明顯低于狗的召回率原因是訓練集里狗的圖片比貓多。解決方式有兩個方向一是給少數類樣本過采樣或者降低多數類樣本權重二是換一個帶類別權重的損失函數。nn.CrossEntropyLoss自帶weight參數可以傳入一個權重向量讓損失值偏向少數類。class_weights torch.tensor([1.0, 0.8]).to(device) criterion nn.CrossEntropyLoss(weightclass_weights)這樣一來模型對貓的誤判成本更高訓練時它會更主動地去學習貓的特征。4.2 混淆矩陣一眼看出模型在哪些類別上容易混淆混淆矩陣是評估分類模型最直觀的表格。在二分類任務上就是一個 2×2 的矩陣橫軸是預測標簽縱軸是真實標簽。貓狗分類的混淆矩陣可能長這樣預測為貓預測為狗真實是貓923127真實是狗45905對著這個矩陣看你能快速發(fā)現(xiàn)模型把 127 只貓誤判成了狗卻只把 45 只狗誤判成了貓。這說明模型對貓的特征捕捉能力不足。接下來要做的不是盲目調參而是去查這些被誤判的貓圖看它們是不是本身長得就不典型比如毛發(fā)顏色與狗相近、面部被遮擋、或者拍攝角度傾斜。如果要看更多類別的混淆情況可以用 seaborn 的 heatmap 畫出來但白底黑字打印矩陣就夠了。建議在調整模型過程中每一次實驗都保存一份混淆矩陣這樣你能看到調整前后的改善方向而不是只盯著一個準確率數字。4.3 保存模型與加載模型的最佳實踐訓練結束后保存模型權重是必須做的事。PyTorch 提供了兩種常見方式# 方式一推薦只保存模型參數 torch.save(model.state_dict(), cat_dog_model.pth) # 方式二保存整個模型 torch.save(model, cat_dog_model.pth)我強烈建議用方式一。只保存參數的好處是模型結構變動時權重文件依然可控而且文件的體積更小、安全性更高。裝載時你需要先實例化一個和訓練時完全一樣的模型結構再把權重灌進去model models.resnet18() num_features model.fc.in_features model.fc nn.Linear(num_features, 2) model.load_state_dict(torch.load(cat_dog_model.pth)) model.eval()如果你訓練時用了 GPU 保存在只有 CPU 的機器上加載需要在torch.load里加一個參數map_locationcpu。不加的話會遇到警告或直接報錯。加載后還有一個重要操作model.eval()。如果加載的模型后續(xù)只用于推理這一步一定要加。不切換成 eval 模式推理結果會因為 Dropout 的隨機性而產生微小波動你可能會看到同一個樣本在不同時刻的預測結果不一致。4.4 單張圖片推理的完整流程訓練完模型之后最終目的是讓模型對新圖片做預測。單獨對一張圖片進行推理看起來簡單但還是要走完預處理流程。一個最典型的錯誤是拿原始尺寸的圖片直接丟進模型導致維度不匹配的報錯。完整的推理腳本應該長這樣from PIL import Image def predict_one_image(image_path, model, class_names, device): model.eval() # 必須使用訓練時驗證集的分處理流程尤其是尺寸 transform torchvision.transforms.Compose([ torchvision.transforms.Resize(256), torchvision.transforms.CenterCrop(224), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) img Image.open(image_path).convert(RGB) img_tensor transform(img).unsqueeze(0).to(device) with torch.inference_mode(): outputs model(img_tensor) probabilities torch.softmax(outputs, dim1) conf, pred_idx torch.max(probabilities, dim1) return class_names[pred_idx.item()], conf.item()unsqueeze(0)的作用是增加一個 batch 維度。模型輸入的 shape 是(batch_size, channels, height, width)單張圖沒有 batch 維度所以必須手動加。這里用torch.inference_mode()而不是torch.no_grad()是 2.x 版本更推薦的寫法功能上比 no_grad 多了一些推理優(yōu)化例如不對模型參數做版本跟蹤。二者在結果上沒有差異但新代碼我統(tǒng)一用inference_mode()。另外一個需要注意的點是convert(RGB)。如果你的圖片是 RGBA 四通道或者灰度單通道不轉換為 RGB 會在ToTensor()時產生 4 通道或 1 通道數據導致和訓練時的 3 通道輸入不匹配。這個報錯信息只會在運行到模型輸入階段才會出現(xiàn)處理起來雖然簡單但沒經驗的人容易卡在這。5. 常見報錯與排查技巧5.1 維度不匹配最常見的入門勸退官不管你用什么模型做圖像分類維度不匹配的報錯幾乎一定會遇到。最常見的幾種輸入通道數不對。報錯文本大概是Expected input batch_size X to match target size Y或者 Given groups1, weight of size [32, 3, 3, 3], expected input[1, 4, 224, 224] to have 3 channels。意思就是模型期望 3 通道輸入但你給了 4 通道。查一下你的Dataset返回的張量很可能是沒有做convert(RGB)導致圖片是 RGBA 格式。全連接層的輸入維度不對。這個報錯在自定義 CNN 里非常普遍。全連接層nn.Linear需要預先指定輸入長度但這個長度取決于前面卷積層輸出特征圖的大小。224×224 的輸入經過三次 MaxPool2d(2,2) 之后邊長會變成 224 ÷ 8 28通道數是 128所以特征會展平成128 * 28 * 28。如果你把輸入圖片尺寸改成 64×64 但忘了改全連接層的輸入維度就會報錯。最簡單的解決辦法在前面加一行打印看features(x).shape的結果是多少。標簽維度是 1D 但輸出是 2D。CrossEntropyLoss接受的標簽形狀是一維的索引張量不是 one-hot 編碼。如果你手工做了 one-hot就是自己給自己找麻煩。5.2 損失值變成 NaN 的排查思路訓練過程中 loss 突然變成 NaN這種情況我第一次遇到時真的懵了好一陣。排查順序我是固定的第一步檢查輸入數據是否有 NaN。圖片像素經過歸一化后都是有限數值一般不會有 NaN但如果做了某些特殊的數據增強操作比如把像素值除以了一個錯誤的值可能出現(xiàn)問題。在訓練循環(huán)里打印一下images.min()和images.max()快速確認范圍。第二步檢查標簽是否有問題。標簽的值必須小于類別數。如果你有 3 類但標簽里有數字 4CrossEntropyLoss就會算出一個異常數值反向傳播后梯度爆炸loss 直接變成 NaN。排查方式就是對labels做一次unique統(tǒng)計。第三步檢查學習率是否過大。學習率太大參數更新步長過大可能在損失函數的陡峭區(qū)域直接跨過最小值點造成梯度爆炸。把學習率調小一個數量級從 1e-3 降到 1e-4再跑一遍。如果不再出現(xiàn) NaN問題就在學習率上。第四步也是更隱蔽的一種情況模型某層的數值范圍在訓練后期變得過大??梢栽趽p失函數前后分別打印輸出的均值。輸出值超過 1e3 往往會導致 Softmax 在求指數時溢出。如果實在找不到原因還有一個暴力排查手段把loss.backward()替換成torch.autograd.detect_anomaly()包住整個訓練循環(huán)PyTorch 會在梯度出現(xiàn)異常的第一時間給出具體是哪一層參數出了問題的提示。注意這個方法非常消耗性能只在排查模式下使用。5.3 訓練集精度高但驗證集精度低的應對清單這是最常見的一種訓練現(xiàn)象也是一個需要區(qū)分情況的場景。如果你的訓練準確率已經到 98%但驗證準確率只有 80%說明模型過擬合了也就是模型把訓練集里的一些特殊細節(jié)記住了而沒有學到通用的分類特征。我的排查順序是先檢查驗證集的數據預處理流程。確認是否誤用了隨機強化操作。這是最容易導致驗證集偏低的原因。然后檢查模型的 Dropout 層。如果模型結構里 Dropout 率設得過高比如 0.9訓練階段模型被迫用極少的信息做分類驗證時會處于完全不同的行為模式。通常 Dropout 0.5 已經足夠。接下來檢查數據增強是否過于激進。如果訓練集圖片被旋轉到一個離譜的角度或者裁剪得只剩一小部分模型學到的特征可能無法遷移到正常的驗證圖片上。把數據增強強度降低一些比如RandomResizedCrop的scale參數從(0.08, 1.0)改成(0.5, 1.0)。最后也是最容易被忽略的一個訓練集和驗證集之間是否存在數據泄漏。比如你從整個數據集劃分時沒有打亂或者驗證集里的圖片和訓練集中有重復。這種情況表面上是過擬合實際上是評估方式不科學。5.4 訓練非常慢調優(yōu)方向在 GPU 不夠的情況下訓練慢是一件很折磨人的事。有幾個方向可以嘗試按重要程度排序。第一是檢查當前是否真的在用 GPU 訓練。如果代碼里寫了images.to(device)但 device 沒有正確設置成 cuda那模型還是跑在 CPU 上。先打印一下next(model.parameters()).device確認。第二是調小num_workers和pin_memory的組合。num_workers設得過高不會讓訓練更快反而在數據加載上浪費大量資源。num_workers2加pin_memoryTrue在大多數配置下已經足夠。第三是開啟混合精度訓練。PyTorch 里用torch.cuda.amp可以把浮點運算改成半精度速度提升明顯而且顯存占用更少。以下是最小實現(xiàn)方式scaler torch.cuda.amp.GradScaler() for images, labels in train_loader: with torch.cuda.amp.autocast(): outputs model(images) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()不過混合精度和ReduceLROnPlateau有一點不兼容要注意scaler 可能會導致梯度的數值出現(xiàn)輕微誤差但大多數分類任務影響不大。第四是考慮用更輕量的模型。如果數據量只有幾千張ResNet50 并不會比 ResNet18 好多少但訓練時間可能多一倍。換 MobileNetV3 或 EfficientNet-B0 這類輕量模型往往能在更短的時間里達到接近的精確率。6. 進階優(yōu)化從好的結果到穩(wěn)定可用的模型6.1 微調讓預訓練模型更貼合你的數據用預訓練模型做遷移學習一般有兩種做法。第一種是上面講過的凍結所有卷積層權重只訓練最后新增的全連接層。第二種是微調Fine-tuning把預訓練模型作為初始化然后對整個網絡的所有層或者靠近分類層的若干層重新訓練。微調的關鍵在于學習率的控制。預訓練模型前面的卷積層已經學到了通用的圖像特征如果學習率太大會把這些特征直接抹掉模型退化成從頭訓練。我常用的策略是把模型參數分成兩組新加的分類頭用較高的學習率如 1e-3預訓練的卷積層用較低的學習率如 1e-4。optimizer torch.optim.Adam([ {params: model.features.parameters(), lr: 1e-4}, {params: model.classifier.parameters(), lr: 1e-3} ], weight_decay1e-4)微調還有一個注意點不要從第一個 epoch 就對所有層做全面更新。我通常的做法是先凍結所有層只訓練分類頭 3 到 5 個 epoch然后解凍最后一個卷積塊如 ResNet 的 layer4以較低學習率繼續(xù)訓練全網絡。這種漸進式的解凍方式能避免早期訓練不穩(wěn)定。6.2 平滑準確率波動交叉驗證與模型集成當數據量不很大的時候一次隨機劃分的訓練集和驗證集可能會讓結果產生較大波動。有時候你只是換了一個隨機種子準確率就從 94% 變成 96%。為了確認模型的真實水平可以做 K 折交叉驗證。我常用的是 5 折也就是把數據分成 5 份每次取其中 4 份訓練、1 份驗證重復 5 次最終準確率取 5 次結果的平均值和標準差。這樣能更客觀地評估模型穩(wěn)定性。如果你追求極致的準確率可以試一下模型集成。訓練多個不同結構的模型比如 ResNet18 MobileNetV3或者同一個模型用不同的隨機種子訓練多次推理時對所有模型的預測結果做平均投票。這個策略不一定能讓你的模型在開源榜單上提升多少但在數據集量不大、噪聲較多的情況下確實能平滑掉明顯的波動。缺點就是推理耗時增加部署時需要權衡。6.3 導出模型并部署到生產環(huán)境訓練完成之后模型還在 PyTorch 的 Python 環(huán)境里要真正在生產環(huán)境用起來還需要做一步轉化。最常見的做法是導出為 ONNX 格式。ONNX 是個開放的模型交換格式可以跑在 ONNX Runtime 上也能轉換到 TensorRT 等推理引擎。導出很簡單model.eval() dummy_input torch.randn(1, 3, 224, 224).to(device) torch.onnx.export( model, dummy_input, cat_dog_model.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size}, output: {0: batch_size}} )dynamic_axes這個參數很重要。加上它之后模型的輸入 batch 維度可以變化部署時就不限制每次只能預測一張圖。導出后可以用onnxruntime進行驗證確保導出的模型和 PyTorch 原始模型輸出一致。實際部署中ONNX Runtime 的推理速度通常比 PyTorch 原生態(tài)更快尤其是在 CPU 環(huán)境里。而且它不依賴 Python 的神經網絡框架可以用 C 調用對生產環(huán)境的依賴更干凈。6.4 算力不夠時的替代方案輕量模型與量化如果你的模型最后要在嵌入式設備或者低算力環(huán)境里跑ResNet50 這種規(guī)模的網絡是不現(xiàn)實的。這時 MobileNetV3、EfficientNet-Lite 這類專為移動端設計的模型會更合適。它們在保持不錯精確率的同時把計算量壓到了很低。除了換小模型量化也是常見的優(yōu)化手段。Quantization 可以把模型的浮點權重從 FP32 壓縮到 INT8模型體積縮小為原來的四分之一推理速度卻可能提高 2 到 4 倍。PyTorch 本身就提供了量化工具接口最常用的是訓練后動態(tài)量化import torch quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 ) torch.save(quantized_model.state_dict(), cat_dog_model_quantized.pth)這個操作在 CPU 上對全連接層的壓縮效果最明顯。但如果模型以卷積層為主動態(tài)量化收益有限可以考慮試一下感知訓練量化Quantization Aware Training。這條路做完模型體積和推理耗時都能顯著下降代價是需要在訓練階段就引入量化相關的計算。我在實際項目里的經驗是如果從頭到尾都要自己維護一套深度學習訓練流程最容易出問題的地方其實不在模型結構而在數據加載和預處理這些邊緣環(huán)節(jié)。這些坑雖然都不大也沒有太高深的理論但每一個都足以讓你的實驗白白跑上好幾個小時最后得到一個錯誤的結論。把這一整套流程理順之后圖像分類對你的門檻就已經被踏平了后續(xù)再往目標檢測、圖像分割這類任務上走也會順手很多。最后再分享一個小技巧實驗過程中每一次訓練結果都順手存一份帶時間戳的權重文件和對應的驗證指標。很多人訓練完就隨手把權重覆蓋了等到要對比不同方案時才發(fā)現(xiàn)找不到之前的權重只能重新訓練。做好版本管理你能省下的時間不是一個小時兩個小時而是一整天的量。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
henhencao国产在线| 婷婷久热| 亚洲av| 激情综合网激情五月俺也去| 五月丁香影院| 99操逼视频| 六月丁AV| 日韩操女| www.日日夜夜.com| 日韩天堂久久| 激情综合色五月丁香六月亚洲| 国产精产国品一二三在观看| 色婷婷国色天香综合| 这里只有精品视频免费在线观看| 日亚二欧美| 久久久精品人妻录| 亚洲视频在线网| 激情五婷精品网在线观看网址| 深爱1激情网| 超碰成人黄色网| 丁香婷婷偷拍| 超碰在线观看三级片| 色五月婷色彩免播放器| 人妻熟女一区二区AV| 天堂爱爱| 日本nghangse中文字幕| 久久婷婷丁香六月天| www久久久久久久久久久久久久久久久| 婷婷欧美色| www.五月天| 丁香九月婷| 婷婷五月成人| ri电影在线| 五月激情小说网| 中文字幕av亚洲| 综合伊人久久| 九九视频免费| 婷婷操无码| 啪啪小说五月天| 一操久久| 人妻久久久| 亚洲综合网激情小说| 色婷婷五月综合| 天天撸夜夜爽| AV在线免费播放| 五月天婷婷色色网| www久视频com| 欧美综合五月丁香六月婷| 伍月婷丁香婷| 欧美乱码国产一级A片| 婷婷永久在线| 丁香五月婷婷天激情| 99五丁香月| 亚洲AV人人操| 五月天成人伊人| 五月色亭丁香| 少妇被躁爽到高潮无码文| 欧美成人A片AAA片在线播放| 色五月激情综合| 婷婷五月天亚洲综合| 五月丁香六月婷精品视频| 5月婷婷6月丁香aV| 日韩有码一区| 新五月天婷婷激情电影| 99久热在线精品99re6热| 天天天天干| 五月间天堂综合| 天堂久久性| 9久国产| 91日本在线观看| 久久这里只有精彩| 婷婷色色综合| 九九热视频在线观看| 成人永久免费视频在线观看| 性爱网五月天| 婷婷基地五月色| 国产亚洲成AV人片在线观黄桃| 成人婷婷深爱综合网| 色五月播五月| 色日本网| 激情六| 天海翼中文字幕高| AVDV久久| 五月天激情黄色小说在线观看| 亚洲无AV在线中文字幕| 激情五月天小说网| 婷婷六月开心网| 变态 另类 在线| 久久婷婷网站| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 日本三级中国三级99| 色婷婷激情| 五月天婷婷青青草| 五月天色色色| 亚洲婷婷激情综合激情999精品| 操操碰| 久狠日av| 好好日激情五月天| 人人操人人操919999| 狠狠搞狠狠操| 婷婷成人AV| 99久久er| 久久永久网址| 丁香六月婷婷社区| 婷婷九月丁香天堂丁香天堂| 亚洲日韩一页精品发布| 激情综合网,五月| 五月丁香婷婷综合网色欲| 综合激情五月丁香| 成人在线网址| 久99| 五月天开心激情综合网| 婷婷丁香六月| 久久视频这里99| 人妻久久久久久久久妻久久久久| 五月天婷婷色在线视频免费观看| www.久久9| 九九色播五月丁香| 日日夜夜噜噜爽爽| caopeng超碰| 九九精品在线视频观看| 婷色五月天| 在线日韩av| 爆乳熟妇一区二区三区四区| 天天干天天拍| 噜噜网免费视频| 亚洲在线资源| 大香伊人婷婷影院| 91操女| 色综合天天| 国产欧美第五十五页| 久久婷婷五月综合| 精品乱码久久久久| 九九热精品视频| 丁香五月天啪啪a日本| 色宗合久久五月婷婷| 天天人人天天爽| 九九热99视频在线| 久久999久久999久久999久久| 五月 婷 久| AA片在线观看视频在线播放| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | AV在线大香蕉| 日日撸夜夜操| 久久色情| 香蕉AV777XXX色综合一区| 五月婷婷影院| 色婷婷在线电影| 噜噜国产| 极品少妇XXXX精品少妇偷拍| 超碰操日| 午夜九九九九九九九九九九九九九| 久久婷婷丁香五月宗合| 99热这里只有精品4| 噜噜干日本| 97se视频在线| 亚洲久久激情| 99久久99综合| 大香蕉人在线65| a毛片二逼wwwwwwwwww| 超碰五月婷婷五月天| 欧美乱码国产一级A片| 日韩精品一品二区三区的使用体验| 五月婷丁香久久综合| 色护士综合| 91日本在线| 成人必爱视| WWW,色五月| 四虎婷婷五月天| 天天狠狠六月婷丁香影院| 色婷婷五月天在线观看| 婷婷综合久久| 日本97在线| 在线成人网站| 久久精品66| 亚洲色爱综合| 色色射| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 99色热视频| AA丁香综合激情| www91色网站| 99婷婷五月天激情| 久热这里只精品| 日日噜人人人做人| 婷婷综合网| 亚洲天天| 久xxxx| 热99精品视频在线观看| 无码动漫av| 久久精彩视频| 久热丁香| 色五月婷婷内射| 久久免费精彩视频| 9999热在线免费观看| 天天做天天爰天天爽天天无遮挡| 在线观看av网站| 伊人六月无码视频| 26UUU欧美| 99热自拍| 99久久婷婷国产综合精品草原| 99视频在线精品免费观看2| www.夜夜| 五月久熟女| www久热com| 色噜噜狠狠色综无码久久合欧美| 色色丁香色五月| 色色丁香| www.狠狠| 99久久婷婷国产综合精品电影| 色琪琪一综合久久激情五月视频| 五月情涩综合婷婷| 综合色五月| 99人人爽| site:jszngf.com| 亚洲综合色网| 久久婷婷五月综合网| 久久久全国免费视频| 亚洲婷婷丁香| 久久婷婷视频| 啪啪黄页网| 91色五月| 色五月色五天色情网| 六月婷婷久久| 国产午夜精品一区二区| 67194中文字幕| 婷综合六月| 激情丁香六月| 欧美成人一区二区三区在线视频 | 天天成人综合| 香蕉久久国产AV一区二区 | 991国产精选视频在线播放下载| 9l久久久视频| 婷婷婷婷婷婷婷婷| 丁香五月综合| www,天天干| 天天干一干| 色色五月天激情| 狠狠色丁香婷婷久久综合| 无码色综合| 大香蕉伊人爱在线| 草草视频91| 第九色区av天堂| 五月婷婷综合色啪| 国产免费性爱| 99热精品一区| 亚洲AV在线免费看| 中文字幕久久一区二区三区| 热久久这里只有精品| 欧美va国产va| 久热在线观看视频9| 天天综合网在线| 色狠狠综合网| 五月婷婷丁香六月| 亚洲色模骚货| 91久久电影| 五月天大香蕉| 伊人综合网站| 欧美色爱五月天| 五月婷在线观看| 成人免费120分钟啪啪| 丁香五月婷婷88在线| 亚洲三A| 狠狠插狠狠插| 亚洲视频丁香网va| 国产黄色一级片| www狠狠| 噜综合| 99热有精品在线观看| 五月天婷婷青青草| 无码区婷婷五月花开| 色婷婷电影网| 精品亚洲VA网站| 亚洲九区| 九九伦子片| 97碰人人操| 天天成人五月天| 天天综合五月天| 狠狠干,狠狠操| 婷婷情爱五月天6| 婷婷五月天Av| 五月丁香六月色婷| 色色五月婷婷狠狠| 丁香五月成人婷婷| 婷婷五月永远18免费久久久| www.色九月| 影音先锋91网站在线观看| 热99久久这里只有精品| 丁香五月激情宗合网| 激情五月天.色网| 99久在线精品99re8| 婷婷射婷婷舔| 天天肏屄夜夜爽| 99啪啪网| 无码免费人妻A片AAA毛片西瓜| 天天爽天天摸人妻综合网| 丁香五月综合婷婷| 午夜丁香六月婷| 性欧美大战久久久久久久83| 亚洲成人免费电影| 五月天色五月| 色色丁香五月婷婷| 五月熟妇婷婷久久| 最新日韩久热免费视频看看| 五月丁香本色在线观看| 人人草人人舔| 丁香久久久| 五月丁香无码| 就爱操www com| 婷婷五月天堂| 99丁香五月婷| 9|无码久久久久久| 久久丁香九| 超碰人人在线观看| 色频玖玖五月天| 中文字幕乱码亚洲精品一区| 粉嫩AV久久一区二区三区| 六月婷婷中文字幕| 婷婷五月天成人网| 国产精品天天狠天天看| 婷婷丁香18| 乱乱av| 噜噜噜狠狠色综合| 久久激情五月| 色五月激情五月| 免费视频WWW在线观看网站| 120分钟婬片免费看| 大香蕉九九| 婷婷色五月天在线| 六月激情网| 日本99热| 久久九九思思| 青996青| 大香蕉伊人爱在线| 91啪啪视频| 97视频久久| 婷婷激情四射| 五月婷婷激情69| www开心激情网| 丁香六月婷婷综合在线| 激情深爱五月天| 99ri视频在线播放| 成人短视频在线观看| 男女啪啪做爰高潮无遮挡| 99天天操夜夜操| 六月婷婷九月丁香| 亚洲色婷婷99一9|| 五月色综合| 日本精品99网站| 婷婷六月综合激情| www.91五月| 色月丁| 九九热10| 丁香5月啪啪| 天天cha成人综合网| 婷婷五月天欧美图片在线播放电驴| 天天激情| 天天色宗合| 少妇人妻人伦A片| www久久久久久久| 99精品手机在线视频| 最新日韩久热免费视频看看| 婷婷五月天视| 99免费在线| 天天噜| 天天舔天天爽| 97色干在线观看| 色呦呦在线| 亚洲综合在线播放| 丁香五月天激情综合网| 在线视频99| 久久婷婷五月天| 欧美69色| 天天天天天操| 日韩成人电影AV| 日韩二区搞逼插逼毛片| 99性视频| 国产美女视频久| 国产精品涩涩涩视频网站| 婷婷婷婷午夜| 91艹人| 五月婷婷丁香五月天| 99色在线视频| 大香av| 很很干五月天| 在线观看国产高清视频免费网站 | 色婷婷天堂| 五月丁香婷婷色啪| 五婷婷六月合| 26uuu欧美| 日本九九视频| 开心深爱激情网| 国产AV一区二区三区日韩| 91九色国产| 日日干日日| Caoub青青超碰| 五月天婷婷在看| 天天天干夜夜夜操| 久热9| AV色婷婷| 久久总和99| 色婷婷的五月天| a毛片二逼wwwwwwwwww| 人人色AV| 日本人人超碰| 六月天六月婷| 五月婷婷久久大片| 亚洲色综合性| 婷婷五月天人妻| 全高清无码视頻| 激情丁香五月天图片| 九色综合网| 色。 婷婷婷| 99色综合| 97涩涩丁香五月天| 少妇水多A片太爽了| 五月丁香婷婷激情在线视频| 少妇2做爰HD韩国电影| 深爱五月激情综合| 99精品视频在线观看| 丁香五月亚洲激情婷婷射| 4399在线日本A片| 97人妻碰碰碰久久香蕉| 婷婷亚洲天堂| 精品国产va久| 久久se 综合网| 99热精品一| 色情激情五月婷婷| www,色婷婷| 色色丁香婷婷综合| 精品人妻伦一二三区久久| 色欲人妻综合aaaaaaaa网| 色婷婷视频| 国产欧美日韩性爱| 中文中文在线| 亚洲欧美另类在线23p| 九九激情| 激情另类综合| 色小说婷婷五月天天天| 婷婷五月丁香四射| 丁香五月欧美色综合| 久久综合丁香| 五月丁香综合| 久久久久思思热| 丁香花操逼| 色五月天丁香婷婷| 99视频久久免费视频| 久久人妻少妇嫩草AV| 五月丁香婷在线| 成人视频免费观看高清完整版在线观看| 深爱激情网综合| 亚洲一级AV在线免费播放| 九热...av| 99热这只有| 久久九九网| 日韩五月婷婷| 人人97操| 婷婷五月色| 亚洲色欲AAAAAA| 久操人| 久久综合性| 99综合婷婷五月| 色综合中文综合网| 开心激情五月天网| 婷婷五月花丁香| 婷婷伊人久久| 久婷婷久草| 超碰超碰在线| 狠狠狠五月婷婷六月丁香| 免费AV在线网址| 色九月| 国产精品视频久久99| AV色婷婷| 亚洲无码影片| 激情图片五月天| 亚洲va在线| 丁香花五月天激情| 羞羞嫩草视频| 亚洲激情在线| 色五月婷婷综合在线| 激情合网婷婷| 六月激情婷婷| 亚洲AV免费国产电影| 色99视频| 色欲婷婷五月天| 五月天婷婷中文字幕在线播放| 婷婷丁香激情综合色情| 丁香五月桃花在线激情综合| 99性视频| 色婷婷久久综合| 丁香五月中文字幕久色| 色爱综合视频| 99精品在线播放| 日韩美一级毛卡片| 亚洲成人无码专区| 一起草av| 精品久久99码| 在线看片av| 久久婷婷激情视频| 激情五月婷婷在线区| 日本美女上人| 97操碰在线视频| 视频一区二区在线| 久久久国产精品黄毛片| 色色色99| 天天草比天天爽| tingting五月天亚洲| 色婷天天| 黑人熟妇一区二区三区| 丁香五月天婷婷大香蕉| 丁香深五月婷婷| 少妇被躁爽到高潮无码文| 草一草avb| 久久机热/这里只有精品| 成人五月天在线视频在线观看| 久久人人九九| www.9797国产| 亚洲无码成人网| 色婷婷色综合| 黄色成人AV在线| 天天干人人奸97| 中文人妻AV久久人妻18| 五月综合久久| 91狠狠综合久久| 日狠狠| 97色婷婷| 青草五月天| 九九黄色网| 人人操插| 丁香五月久久| 激情五月丁香五月| 成功精品影院| 欧美一级色| 大香蕉五月天婷婷| 国产精产国品一二三在观看 | 五月婷婷五月天天| 九九热在线视频,| 激情婷婷人妻| 色五月色综合| 日日日日操| 婷婷综合精品视频97| 国产乱妇乱子伦| 激情五月婷婷色播网| 婷婷五月天综合色| 色 色 色综合com| 九九色热| 激情久久久久久| 亚洲无码播放| 夜夜爱网站| 激情五月丁香五月| 男人操女人高潮91视频| 九月色婷婷婷| 丁香婷婷六月天| 五月丁香综合啪啪| 26UUU在线观看| 精品无码99| 狠狠色狠狠操| 色综合激情| 狠狠干综合| 好好日激情五月天| 青草激情综合| 337p午夜影院| 五月丁香亭亭成人电影| 久久九九大香蕉电院| 99热这里只有精品3| 五月天激情婷婷| 亚洲欧美婷婷五月色综合| 99综合久久| 五月婷婷性爱| 亚洲免费电影2| 久婷婷婷| 99综合99| 色五月婷婷影院| 青青草五月天| 丁香五月婷婷香| 中文字幕AV网址| 亚洲VA欧美VA| 99国产在线| 激情久久久| 亚洲网综合在线| 婷婷色情五月| a色色色色色| 六月天六月婷| 六月婷婷激情图片| 五婷婷综合网| 99久久99九九九99九他书对| 五月丁香婷婷伊人| 婷婷五月AV| 大地9中文在线观看免费高清| 色情婷婷久久五月天| 九九色欲网| 丁香伊人综合| 久久久久久综合88| 丝雨一区二区| 久热只有这里有精品| 五月丁香六月激情啪| 在线播放中文字幕| 天天综合网色欲香| 天天上天天爽| 99毛片| 婷婷影院A成人| 超碰在线免费| 天天激情站| 天天干天天拍| 热久久91| 免费视频99| 午夜天堂一区人妻| 丁香五月婷婷啪啪啪| 久久久久久久久久人妻| 五月天激情小说| a九九热www| 天天干天天操| 一本道在线电影| 久久婷婷五月综合色奶水99啪| 五月天婷爱综合| 涩涩涩五月天| 97色热| 亚洲AV色婷婷人禽五月天| 91欧美| 日夜操B| 中文字幕 中文字幕明步| 中文字幕一色哟哟哟哟| 五月伊人综合| 婷婷激情五月综合| 99碰网站| 九九这里有精品| 六月激情婷婷| 色综合色综合网| 精品丁香五月天在线播放| 五月丁香花成人社区| 天天骑日日爽| www.99在线| 九月久久婷婷| 丁香婷婷月| 丁香五月婷婷影视先锋| 五月天婷婷色播在线网| 专区无日本视频高清8| 丁香婷婷黄网站| 亚洲成人网站在线播放| 性爱激情小说AV五月丁香花| 国产三级秋霞| Av中文在线| 97色色色视频| 99视频综合| 日日射天天射| 天天色中文字幕女优AV| 婷婷五月天激情综合网| 久久婷综| 五月婷婷久草在线视频综合| 婷久久久| 婷婷色五月色| 丁香五月婷婷亚洲激情四射| 色婷婷五月在线| 99在线爽| 五月综合视频| 97影院一级片| 99热婷婷| 国产xxxxx在线观看| 人妻22p| 激情综合五月色在线| 99热免费| 夜夜操夜夜姧| 久久丁香婷婷色情综合| 日本在线va| 另类 在线| 黄网在线免费观看| 五月天天天操天天爽夜夜操| 少妇真实被内射视频三四区| 亚州精品久久久久AV无码| 99爱在线| 久草大| 久热超碰91| 亚洲黄色影视| 亚洲色婷婷激情| 超碰熟女农村在线69| 天天操天天爱天天玩| 午夜激情四射影院| 99久久精品国产色欲| 中文字幕视频在线播放| av中文在线| 欧美丁香五月天| 午夜av网| 五月天狠狠| 无码中文一区二区三区| 九月婷婷人人操人人舔人人爱| 色色色色av色色色色| 五月丁香激| 久久亚洲婷婷| 丁香五月婷在线观看| 97视频91| 色色免费网站| 青草视频在线蜜臀| 天花AV无码| 日本三级大片| 狠狠狠狠狠草| 97久久精品| 公的粗大挺进了我的密道| 色婷五月| 久久色天堂| 国产精品a无线| 六月合五月婷| 亚洲中文丁香| 天堂久久大香蕉| 丁香五月六月综合激情| 亚洲最大五月六月丁香婷婷| 日夜操B| 曰韩五月丁香色婷婷无码| 天天搞天天色综合| Va另类视频| 久久激情五月天| 99热在线观看| 五月天开心色情网| 激情五月天www| 激情五月丁香五月| 成人 AV播放| 色婷婷网| 天天干天天插| 五月婷深深爱激情网| 91人人操.COM| 超级碰碰一区| 黑人糟蹋人妻HD中文字幕| 国产毛片精品一区二区色欲黄A片| 九九热在视频| 色色色综合色| www.久操| 中文字幕在线免费看线人| 久久小视频| 青青草日本亚洲| 激情五月天婷婷| 久久九九re热| 激情涩播| 亚洲久热| 99ri在线观看视频| 99免费| 欧洲激情五月天| 婷婷激情综合| 亚洲一区二区无遮挡A片| 国产肥白大熟妇BBBB视频| AV在线观看网站| 综合激情五月天六月婷免费视频| 婷婷五月丁香狠狠| 狠狠色色| 亚洲旡码| 婷婷天堂视频| 热九九九九| av免费在线看不卡无毒| 婷婷久久综合久| 久久色情| 内射综合网| 天天做天天爱天天爽综合网| 97韩国久久电影院| 26uuu国产精品| 人人干人人干骚美女| 大香蕉婷婷久久| 色婷婷四色| 婷婷激情久久| 婷婷五月激情五月丁香五月| 五月激情六月综合| 99热播放| 五月丁香啪啪综合| 国产精品爽爽久久久久久| 五月深爱网| 另类图片婷婷五月天| 精品国产va久久久久久久| 精品国产va久久久久| 婷婷伊人网| 大香蕉婷婷色| 激情五月天色网站| 99久久综合网| 色狠狠五月天| 五月天国产成人| 五月天激情国产综合婷婷婷就去爱| 精品99在线| 影视av久久久噜噜噜噜噜三级| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 丝袜激情网| 超碰在线超碰| 一本久道综合99| www.色色五月天.com| 99re在线视频| 97狠狠色| 99爱视频精品| 五月天婷婷久久日| 婷婷五月俺要去| 第四色婷婷最爱| 日日干干天天干| 天天夜天天色天天| 丁香五月亚综合图片| 婷婷五月丁香手机在线视频| 99热这里只有精品在线观看| 在线中文亚洲| 深爱激情五月婷婷| 99视频自拍| 四LLL少妇BBBB槡BBBB| 中文字幕乱码亚洲精品一区| 国产偷人爽久久久久久老妇APP| 国产精品久久久久9999小说| 99视频在线9| 在线播放成人| 五月婷婷亚洲| 天天搽天天射| 我要看激情五月天| 97色色色| 久久六月综合| 在线观看免费观看在线9久| 91碰人人| 婷婷爱五月| 99热91| 99aese| 青青草成人网| 婷婷在线精品| 国产真实乱对白精彩| 日韩av高清| 淫视馆AV在线| 就99这里只有精品| 激情五月色在线播放| 五月色网| 色色色婷婷五月| 啪啪啪综合网| 五月天大香蕉视频| 超碰亚洲天堂| 99精品爱| 99碰碰视频| 色婷婷成人做爰A片免费看网站| 九色视频九色九色91jiuseshipin| 99日本视频| 色噜噜狠狠色综合伊人| 狠狠插日日干撸| 噜噜噜狠狠色综| 天天色天天操天天射| 超碰爱爱爱| 婷婷丁香五月天综合网| 婷婷色五月天在线| 99人人干| 国产成人亚洲综合亚洲| 五月综合亚洲色| 激情深爱五月| 色五月成人| 成人短视频免费| 日日日日做夜夜夜夜无码| 婷婷五月天在线观看免费| 五月婷婷AV| 在线色婷婷| 亭亭玉立国色天香| 五月婷婷在线视频观看| 蜜桃人妻无码AV天堂三区| 色色九区| 99精品在| 人妻AV在线| 色婷婷色综合| 99热在线免费观看精品| 狠狠干综合网| 超碰免费观看| 99亚洲综合| www久久艹| 激情五月四色| 婷婷免费精品视频| 色色色综合| 色五月婷婷成人| 九九国产精视频| 天天操夜夜操| 亚洲AV成人在线观看| 99精品国产在热久久| 久久久久人妻网址| 人妻第九页| 五月丁香六月色婷婷综合五月天| 这里只有精品视频在线| 操日本99| 五月丁香六月婷婷亚洲激情综合| 婷婷五月丁香综合| 狠爱婷色| 热99精品视频| 欧美内射AAAAAAXXXXX| 婷婷综合五月| 91丨九色丨丰满人妖| 婷婷日本在线| 深爱五月亚洲| 中文毛片无遮挡高潮免费| 婷婷五月色情天| 99热这里只有精品8| 91九九九色在| 五月欧美色色五月| 久久er99热精品一区二区| 国产一级片| 五月丁香琪琪| 99碰碰碰| 婷婷丁香亚洲五月天| 色婷婷狠狠18禁| 色综合色| 丁香五月性爱| 亚洲操精品| 日本99色| 婷婷99丁香| 精品久久艹| 日本97在线观看| 欧美综合五月丁香六月婷| 亚洲V国产V欧美V久久久久久| 18av天堂| 91狠狠综合久久| 99热只有精品在线播放| 激情五月婷婷综合| 色色五月天激情| 97色在线视频| 欧洲综合视频| 亚洲成人综合在线| 亚洲综合成人网| 五月天婷婷久久| 91精品久久久久久| 夜夜操天天干| 热九九在线| 婷婷激情四射| 婷婷五月丁香在线观看| 欧美日韩欧美| 99热在线中文字幕| www五月婷婷88导航| 狠狠干 狠狠操| 丁香五月停停av| 五月天婷婷视频| 国产在线自| 丁香久久综合| 色欲天天综合网| www.狠狠| 五月丁香av在线| 99色在线观看视频者| 凹凸操Av| 激情丁香五月AV| 色婷婷天堂| 久99| 亚洲乱码日产精品BD| 这里只有免费的精品| 日日夜夜亚洲一区| 六月综合婷婷开心伊人| 亚洲黄色精品| 婷婷中文字幕| 色婷婷丁香AV综合| 色婷婷色和| 大香蕉中文| 婷婷激情小说网| 国产午夜精品一区二区三区四区| 停停五月天激情网| 丁香五月天天| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 电影91久久久| 天天五月天综合网址| 人伦30P| 99热在线播放| 婷婷五月天堂一本在线| 波多野结衣AV无码Porn| 久久这里只有精品热在99| 国产又黄又爽又激情不遮挡视频在线观看| 一级黄色片看看| 99亚洲视频| 伦乱美欧| 国产精品成人网站| 色综合色色| 亚洲综合在线丁香五月| 熟女91九色| 夫妇交换刺激做爰| 色婷婷成人影片| 一级性感毛片| 深爱激情五月网| 日本AAAAAAAAAAAAAA片| 久久婷婷丁香| 久久99国产综合精品免费 | 影音先锋xfplay资源男人网| 伊人狼人干| 色婷婷久久综合| 五月丁花色综合网| 人妻视频在线| 碰97 久| 综合视频久久| 伊人婷婷五月| 久久五月激情综合| 日本女色人人| 九九碰九九爱97超| 伊人婷婷色激情丁香| 久久综合丁香| av在线婷婷| 99色在线视频| 人人妻久久妻| 婷婷五月成人有| 亭亭玉月丁香| 99国产在线精品视频| 超碰免费大香蕉| 婷婷射图五月天| 婷婷五月综合激情| 五月婷婷黄色毛片| 国产日韩精品SUV| 99热国内精品| 婷婷丁香色情| 久久久久久草黄色片AV在线观看| 九九99在线| 九九日伊人| 天干夜夜操| 激情小说婷婷| 婷婷激情五月综合基地| 国产免费AV在线| 肏日网在线看| 亚洲V国产V欧美V久久久久久| 丁香九月婷婷综合| 婷婷五月天第三页| 开心五月丁香婷婷| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 欧美性爱专区| JAPANRCEP老熟妇乱子伦视频| 免费黄色AV| 夜夜综合色| 激情五月天之六月婷婷| 九色视频91| 玖色色综合| 爱iii做iiii日| 久久久GOGO无码啪啪艺术| 久久 婷婷 五月天| 九九热视| 婷婷桃色网| 青草视频在线观看视频 | 亚洲网站观看视频| 婷婷久草| 五月天婷婷激情小说电影| 亚洲欧洲午夜成人精品av| 99久久大片| 色99综合视频| 五月丁香WWW| 激情五月深爱五月| 色色色色五月天| 五月天丁香久久| 欧美人人超级碰| 婷婷六月成人| 亚洲成人无码专区| av亚洲国产小电影| 五月天婷婷色色| 高清无码网址| 一区二区乱码视频| 99热这里都是精品| 综合图片色色| 青草五月天| 日日操夜夜骑| 天天干天天色综合| 五月丁香六月成人| 真实亲子乱子伦高清在线观看| 996热re视频精品视频这里| 艹| 激情五月,深深爱五月| 天插天啪天啪天啪| 激情五月婷婷伊人| 小视频一区| 五月花亭亭| 五月天社区狠狠| 婷婷丁香人妻天天| 欧美日本va| 5月丁香婷婷激情网| 五月天亭亭俺也| 国产精品久久久海的味道| 久久五月天综合| 日本天堂免费99| 久综合| 亚洲精品国产成人AV在线| 色人久久| 日狠狠| 这里只有精品视频| 国产精品激情AV久久久青桔| 九九九九精品精| 色五月综合网站| 九九激情视频| 色欲五月婷婷| 综合激情五月丁香| 欧美激情 日韩无码 婷婷 五月天 久久婷婷丁香五月一二三 | 99热精品免费在线观看| 激情婷婷啪啪| 98永久精品| 五月丁香色色网| 色噜噜综合网| 男人操女人高潮91视频| 久久丁香综合精品综合| 欧美性交一区二区三区| 日本三久久| 女人露出p毛视频www网站| 婷婷久久视频| 天天操天天日天天操| 激情五月丁香婷婷| 日日噜狠狠| 成人综合网站| 久久33视频| AA久久| 九九热这里都是精品6| 丁香欧美| 久久综合婷婷五月| 色婷婷电影网| 丁香五月亚洲综合丝袜| 91嫩草久久| 5月激情天| 天天日天天操天天干| 久久久精品人妻| 狠狠色狠狠操| 五月天丁香婷婷久久九| 亚洲黄3级片网站欧美| 久久三级视频| 狠狠操狠狠狠| 亚洲网站999| 亚洲中文字幕av| 就去色色五月丁香婷婷久久久| 五月丁香网站| 日本在线免费中文com.| 欧美成人色婷婷| 夜夜操天天干| 性爱激情久久| 色婷婷操逼| 九九久久五月天综合伊人| 婷婷成人五月天| 丁香五月影院| 97久久五月丁香婷婷| 干亚洲天堂| 月婷婷婷婷五月| 天天干,天天日| 久久九九re热| 天天爽天天日人人爱| 91成人性爱视频| 性爱久久| 五月伊人婷婷999| 天天色天天干天天插| 这里只有精品视频99| 亚洲区,视频区,视频区免费| 伊人五月网| 超碰亚洲天堂| 婷婷五月激情综合网| 天天狠狠婷婷在线| 狠狠搞五月天| 91丨九色丨43老版熟女| 久久精品66| 婷婷午夜| 久久六月综合| 欧美内射AAAAAAXXXXX| 玖玖午夜视频| 26uuu91| 久久九九热视频| 丁香六月婷婷久久亚洲天堂| 五月天婷综合网站| 开心婷婷五月| 色婷婷综合久久| 18av天堂| 久久综合影院 | 精品久久99| 色婷婷天堂| 婷婷丁香五月天中文字幕| 狠狠色婷婷| 五月婷婷日本| 骚货艹网站视频| 丁香五月天激情综合| 五月婷婷偷拍| 情久久综合五月天| XX色综合| 狠狠做六月爱婷婷综合aⅴ| 天天综合 99久久婷婷| aaaa久久| 婷婷丁香成人在线视频| 婷婷亚洲天堂| 狠狠色丁香久久| 丁香五月婷中字幕| 色综合综合综合| 激情欧美婷五月| 色综合伊人网| 亚洲天堂爱爱| 久久婷婷内射| 碰碰碰91| 99热成人在线观看| 日韩综合成人| 欧美综合婷婷欧美综| 人妻精品一区二区三区| 超碰免费大香蕉| 六月丁丁香| 综合一啪| 婷婷开心久久| 亚洲九九99精品视频在线播放| 婷婷免费成人视频| 五月天色五月| www.色综合.com| 五月丁香婷婷钟和色图| 婷婷五月四狠狠| 丁香五月婷婷啪啪啪| 欧美色图天堂网色| 激情综合五月婷婷| 91人人妻人人操| 五月天婷婷综合免费| 大香伊人婷婷影院| 婷婷色av| 极品五月天| 99久久久| 中文字幕高清av| 狠狠操婷婷| 六月色 亚洲| 婷婷色5月激情网| 九九中文色色| 五月天涩涩| 婷婷丁香色性爱| 婷婷国产成人| 色播五月天婷婷老师| 色色热| 五月天停停日日| 丁香久久五月婷综合| 激情AV在线| www.99在线| 玖玖视频福利| 色色五月婷婷| 97深爱伊人综合| 色九九综合色| 九九免费精品| 丁香五月天婷婷91| 综合久久高清| 激情色色| 思思热在线视频精品| 天天干天天日日| 婷婷五月激情黄色| 丁香美女主播视频在线观看| 五月丁香日逼| 色欲五月婷婷| 婷婷丁五月| 亚洲国产精品二二三三区| 婷婷五月开心中文字幕在线| 九九色婷婷Av| 婷婷久久综合| 婷婷六月色| 亚洲乱码日产精品BD| 久久AV电影| 97成人在线视频精品| 激情校园 亚洲| 最近中文字幕2019视频1| 97好吊操| 色狠狠综合入口| 丁香五月成人| 亚洲丁香五月美女| 超碰在线资源| 庭庭久久内射| 综合五月草 | 区区久久妻| 欧美性生交XXXXX无码小说| 牛牛碰免费| 五月天色色婷婷| 国产成人网址| 激情网婷婷婷| 九九狠狠干| 色综合五月天| 婷婷色爱| 色五月天激情| 亚洲妇女熟BBW| 另类激情综合| 99这里有精品视频3| 久久五月婷天天干| 91啪啪网| 狠狠夜夜五月丁香| 婷婷丁香五月基地| 亚洲综合色色| 五月丁香色婷婷综合| 天堂中文国产| 亚洲视频一区| 丁香五月综合激情性爱| 狠狠干天天内射| 绿色小导航AV| 亚洲高清在线| 婷婷五月草| 热久久77777| 五月婷免费视频| 国产精品18久久久| 婷婷五月天狠狠色| 色婷婷最爱五月| 91啪啪网| 草了bav视频在线观看| 91丁香五月|