免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

PyTorch張量復(fù)制函數(shù)torch.repeat()深度解析:從核心機(jī)制到性能優(yōu)化

PyTorch張量復(fù)制函數(shù)torch.repeat()深度解析:從核心機(jī)制到性能優(yōu)化 1. 項(xiàng)目概述為什么我們需要深入理解repeat()在PyTorch的日常開(kāi)發(fā)里處理張量形狀是繞不開(kāi)的基本功。無(wú)論是為了適配模型輸入還是進(jìn)行批量的數(shù)據(jù)擴(kuò)增你總會(huì)遇到一個(gè)需求把一個(gè)張量沿著某些維度“復(fù)制”若干份。這時(shí)候torch.repeat()函數(shù)就會(huì)頻繁地出現(xiàn)在你的代碼中。乍一看它很簡(jiǎn)單不就是復(fù)制嗎但實(shí)際用起來(lái)新手甚至一些有經(jīng)驗(yàn)的開(kāi)發(fā)者都容易在這里栽跟頭——輸出的張量形狀和自己預(yù)想的不一樣或者內(nèi)存占用突然飆升導(dǎo)致程序崩潰。我自己就踩過(guò)這樣的坑。早期寫(xiě)一個(gè)數(shù)據(jù)預(yù)處理管道需要把單個(gè)樣本的特征向量復(fù)制成一個(gè)小批量。我隨手寫(xiě)了個(gè)x.repeat(32, 1)心想這不就是變成[32, feature_dim]嗎結(jié)果程序報(bào)錯(cuò)了或者得到了一個(gè)完全錯(cuò)誤的形狀調(diào)試了半天才發(fā)現(xiàn)是對(duì)repeat()參數(shù)的理解有偏差。這個(gè)函數(shù)的行為和直覺(jué)上的“復(fù)制”有些微妙的區(qū)別它嚴(yán)格遵循著張量廣播Broadcasting背后的擴(kuò)展邏輯而不是簡(jiǎn)單的拼接。所以今天我們就來(lái)徹底拆解torch.Tensor.repeat()這個(gè)函數(shù)。我會(huì)結(jié)合大量的代碼示例和內(nèi)存布局示意圖不僅告訴你它怎么用更重要的是講清楚它為什么這樣設(shè)計(jì)底層發(fā)生了什么以及在實(shí)際項(xiàng)目中如何高效、正確地使用它避免那些常見(jiàn)的性能陷阱和邏輯錯(cuò)誤。無(wú)論你是剛接觸PyTorch還是想鞏固基礎(chǔ)相信這篇深入的分析都能給你帶來(lái)收獲。2.repeat()函數(shù)的核心機(jī)制與參數(shù)解析2.1 函數(shù)簽名與基本行為首先我們看一下官方定義。repeat()是torch.Tensor的一個(gè)方法其簽名如下Tensor.repeat(*sizes) - Tensor這里的*sizes表示一個(gè)可變參數(shù)它接受一系列整數(shù)指明了沿著原始張量的每一個(gè)維度需要重復(fù)的次數(shù)。最關(guān)鍵的一點(diǎn)是sizes參數(shù)的長(zhǎng)度必須大于或等于原始張量的維度數(shù)ndim。這個(gè)函數(shù)的行為可以概括為在新的維度上分配空間并將原始張量的數(shù)據(jù)復(fù)制填充進(jìn)去。它返回的是一個(gè)全新的張量與原始張量不共享內(nèi)存除非重復(fù)次數(shù)為1。我們來(lái)一個(gè)最簡(jiǎn)單的例子建立直觀感受import torch # 定義一個(gè)1維張量 x torch.tensor([1, 2, 3]) print(fOriginal tensor: {x}, shape: {x.shape}) # shape: torch.Size([3]) # 沿著第0維行方向重復(fù)2次 y x.repeat(2) print(fAfter repeat(2): {y}, shape: {y.shape}) # shape: torch.Size([6]) # 輸出: tensor([1, 2, 3, 1, 2, 3]) # 定義一個(gè)2維張量 x_2d torch.tensor([[1, 2], [3, 4]]) print(f\nOriginal 2D tensor shape: {x_2d.shape}) # torch.Size([2, 2]) # 參數(shù) (3, 2) 意味著沿第0維重復(fù)3次沿第1維重復(fù)2次 y_2d x_2d.repeat(3, 2) print(fAfter repeat(3, 2) shape: {y_2d.shape}) # torch.Size([6, 4]) print(y_2d) # 輸出 # tensor([[1, 2, 1, 2], # [3, 4, 3, 4], # [1, 2, 1, 2], # [3, 4, 3, 4], # [1, 2, 1, 2], # [3, 4, 3, 4]])從輸出可以看到repeat(3, 2)生成了一個(gè)6x4的張量。它是先將原始2x2的矩陣在行第0維上復(fù)制3份堆疊起來(lái)形成一個(gè)6x2的中間形態(tài)然后再將這個(gè)中間形態(tài)的每一行在列第1維上復(fù)制2次最終得到結(jié)果。2.2 參數(shù)sizes的長(zhǎng)度規(guī)則與“維度補(bǔ)齊”這是最容易出錯(cuò)的地方。repeat()要求提供的sizes元組長(zhǎng)度不能小于原始張量的維度。如果長(zhǎng)度大于原始維度會(huì)發(fā)生什么PyTorch 的處理方式是在原始張量的前面即更高維或說(shuō)左邊插入新的維度。這些新插入的維度其大小默認(rèn)為1。然后repeat()再根據(jù)你提供的sizes參數(shù)對(duì)所有維度包括新插入的進(jìn)行重復(fù)操作。x torch.tensor([[1, 2, 3], [4, 5, 6]]) print(fOriginal shape: {x.shape}) # torch.Size([2, 3]) # 情況一參數(shù)長(zhǎng)度等于原始維度 (最常見(jiàn)) y1 x.repeat(2, 3) # 沿dim0重復(fù)2次沿dim1重復(fù)3次 print(frepeat(2, 3) shape: {y1.shape}) # torch.Size([4, 9]) # 情況二參數(shù)長(zhǎng)度大于原始維度 # 提供的參數(shù)是 (2, 2, 3)。原始x是2維參數(shù)是3維。 # PyTorch會(huì)在x前面加1個(gè)維度使其變成3維: shape [1, 2, 3] # 然后對(duì)這個(gè)新的3維張量執(zhí)行 repeat(2, 2, 3) # 即新dim0重復(fù)2次原dim0現(xiàn)在是dim1重復(fù)2次原dim1現(xiàn)在是dim2重復(fù)3次 y2 x.repeat(2, 2, 3) print(frepeat(2, 2, 3) shape: {y2.shape}) # torch.Size([2, 4, 9]) print(fy2[0, ...] y2[1, ...] ? {torch.all(y2[0] y2[1])}) # True 因?yàn)樾录拥木S度被復(fù)制了 # 情況三參數(shù)長(zhǎng)度小于原始維度 會(huì)報(bào)錯(cuò) try: y3 x.repeat(2) # x是2維只給了1個(gè)參數(shù) except Exception as e: print(fError: {type(e).__name__}: {e}) # 報(bào)錯(cuò)RuntimeError: Number of dimensions of repeat dims can not be smaller than number of dimensions of tensor注意這個(gè)“維度補(bǔ)齊”的規(guī)則是理解repeat()與類(lèi)似函數(shù)如expand()區(qū)別的核心。它意味著repeat()總是從最高維最左邊的維度開(kāi)始匹配參數(shù)。當(dāng)你寫(xiě)下x.repeat(a, b, c)時(shí)你是在對(duì)一個(gè)新的、可能經(jīng)過(guò)維度擴(kuò)展的張量進(jìn)行操作而不是直接對(duì)應(yīng)原始張量的維度。2.3repeat()與expand()的深度對(duì)比很多人會(huì)混淆repeat()和expand()因?yàn)樗鼈兌寄芨淖儚埩啃螤?。但它們的底層邏輯和?nèi)存影響天差地別。特性torch.repeat()torch.expand()核心操作數(shù)據(jù)復(fù)制。在新的內(nèi)存位置創(chuàng)建數(shù)據(jù)的副本。視圖創(chuàng)建。不復(fù)制數(shù)據(jù)只創(chuàng)建一個(gè)新的“視圖”通過(guò)廣播規(guī)則實(shí)現(xiàn)維度的邏輯擴(kuò)展。內(nèi)存影響顯式占用新內(nèi)存。輸出張量與輸入張量不共享存儲(chǔ)。內(nèi)存增長(zhǎng)倍數(shù)為各維度重復(fù)次數(shù)的乘積。幾乎不占額外內(nèi)存。輸出與輸入共享底層數(shù)據(jù)存儲(chǔ)前提是擴(kuò)展的維度大小為1或-1。參數(shù)要求參數(shù)指定的是重復(fù)次數(shù)必須 1。參數(shù)指定的是目標(biāo)形狀只能將大小為1的維度擴(kuò)展到更大-1表示保持原樣。靈活性可以在任何維度上進(jìn)行任意次數(shù)的復(fù)制。只能對(duì)原始大小為1的維度進(jìn)行擴(kuò)展其他維度大小必須匹配或?yàn)?1。典型用途需要物理上復(fù)制數(shù)據(jù)時(shí)如數(shù)據(jù)增廣、構(gòu)造特定模式的數(shù)據(jù)。需要高效廣播時(shí)如將偏置向量加到批量數(shù)據(jù)上。來(lái)看一個(gè)對(duì)比示例# 定義一個(gè)可以廣播的張量 (第0維大小為1) x torch.randn(1, 3, 224, 224) # 形狀: [1, 3, 224, 224] # 使用 expand: 高效不復(fù)制數(shù)據(jù) batch_size 32 x_expanded x.expand(batch_size, -1, -1, -1) # 目標(biāo)形狀: [32, 3, 224, 224] print(fx_expanded shape: {x_expanded.shape}) print(fDo x and x_expanded share memory? {x.storage().data_ptr() x_expanded.storage().data_ptr()}) # 大概率是True # 使用 repeat: 低效復(fù)制數(shù)據(jù) x_repeated x.repeat(batch_size, 1, 1, 1) # 參數(shù): [32, 1, 1, 1] print(fx_repeated shape: {x_repeated.shape}) print(fDo x and x_repeated share memory? {x.storage().data_ptr() x_repeated.storage().data_ptr()}) # False # 嘗試對(duì)非1維度使用expand會(huì)報(bào)錯(cuò) x2 torch.randn(2, 3, 224, 224) try: x2_expanded x2.expand(32, -1, -1, -1) # 第0維是2不是1無(wú)法直接expand到32 except Exception as e: print(fExpand error: {e}) # 此時(shí)必須先用 unsqueeze 增加一個(gè)維度或者使用 repeat實(shí)操心得在決定用repeat還是expand之前先問(wèn)自己一個(gè)問(wèn)題“我后續(xù)需要修改這個(gè)擴(kuò)展后的張量并希望原始張量保持不變嗎” 如果答案是肯定的或者原始維度大小不為1那么repeat()是更安全的選擇因?yàn)樗鼊?chuàng)建了副本。如果只是為了廣播運(yùn)算且原始維度大小為1那么expand()在內(nèi)存和速度上具有巨大優(yōu)勢(shì)。3. 多維張量repeat()的逐維拆解與內(nèi)存分析理解了基本規(guī)則后我們深入到多維場(chǎng)景并分析其內(nèi)存影響。3.1 高維張量的重復(fù)模式對(duì)于三維及以上的張量這在深度學(xué)習(xí)中非常常見(jiàn)如[Batch, Channel, Height, Width]repeat()的行為遵循同樣的“從左到右”的維度匹配規(guī)則。我們可以把它想象成一個(gè)嵌套循環(huán)最外層的循環(huán)對(duì)應(yīng)sizes的第一個(gè)參數(shù)最內(nèi)層的循環(huán)對(duì)應(yīng)最后一個(gè)參數(shù)。# 模擬一個(gè)批量圖像特征圖 [batch, channel, height, width] feat_map torch.tensor([ # batch1, channel2, height2, width3 [ [[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]] ] ]) print(fOriginal feat_map shape: {feat_map.shape}) # torch.Size([1, 2, 2, 3]) # 目標(biāo)批量擴(kuò)展到4通道數(shù)復(fù)制到3高寬各復(fù)制2次 # 參數(shù)順序?qū)?yīng)batch_dim, channel_dim, height_dim, width_dim repeated feat_map.repeat(4, 3, 2, 2) print(fAfter repeat(4,3,2,2) shape: {repeated.shape}) # torch.Size([4, 6, 4, 6]) # 我們來(lái)驗(yàn)證一下其中一個(gè)數(shù)據(jù)塊 # 原始張量中feat_map[0, 0, 0, 0] 1 # 在新的張量中由于batch重復(fù)4次channel重復(fù)3次height重復(fù)2次width重復(fù)2次 # 那么 repeated[0, 0, 0, 0], repeated[0, 0, 0, 1], repeated[0, 0, 1, 0]... 等位置都應(yīng)該是1 # 檢查 repeated[0, 0, 0:2, 0:2] 這個(gè)2x2的塊 print(\nChecking block at [0,0,:,:]:) print(repeated[0, 0, 0:2, 0:2]) # 應(yīng)該輸出 # tensor([[1, 1], # [1, 1]]) # 因?yàn)閣idth方向重復(fù)了2次所以[1,2,3]變成了[1,1,2,2,3,3]這里取前兩個(gè)是1和1。3.2 內(nèi)存占用計(jì)算與性能陷阱這是使用repeat()時(shí)必須警惕的一點(diǎn)。repeat()是物理復(fù)制數(shù)據(jù)其輸出的張量所占用的內(nèi)存是原始張量的 $\prod_{i} sizes[i]$ 倍。這里的 $sizes[i]$ 是每個(gè)維度的重復(fù)次數(shù)。計(jì)算公式輸出張量?jī)?nèi)存 ≈ 原始張量?jī)?nèi)存 * (sizes[0] * sizes[1] * ... * sizes[k-1])假設(shè)你有一個(gè)浮點(diǎn)型張量x形狀為[100, 256, 256]數(shù)據(jù)類(lèi)型是float324字節(jié)。原始內(nèi)存$100 \times 256 \times 256 \times 4 \text{ bytes} \approx 26.2 \text{ MB}$。如果你不小心寫(xiě)了x.repeat(10, 1, 1)想在第0維復(fù)制10份。輸出形狀[1000, 256, 256]。輸出內(nèi)存$1000 \times 256 \times 256 \times 4 \text{ bytes} \approx 262 \text{ MB}$。這看起來(lái)似乎沒(méi)問(wèn)題但如果你本意是想把批次從100擴(kuò)展到1000而原始張量的100是批次大小那么repeat(10,1,1)的邏輯是錯(cuò)誤的它把100當(dāng)成一個(gè)整體復(fù)制了10次得到了1000個(gè)樣本但每個(gè)樣本的“內(nèi)容”是重復(fù)的。更可怕的是下面這種錯(cuò)誤# 假設(shè)我們有一個(gè) batch_size32 的輸入 batch_input torch.randn(32, 3, 224, 224) # 約 32*3*224*224*4/1024/1024 ≈ 18.4 MB # 錯(cuò)誤意圖想把每個(gè)樣本在批次內(nèi)再?gòu)?fù)制一份變成64個(gè)樣本 # 錯(cuò)誤寫(xiě)法 try: wrong_output batch_input.repeat(2, 1, 1, 1) # 形狀: [64, 3, 224, 224] print(fMemory of wrong_output: {wrong_output.element_size() * wrong_output.nelement() / 1024**2:.2f} MB) except Exception as e: print(fError (maybe OOM): {e}) # 內(nèi)存會(huì)翻倍到約36.8MB。但邏輯是錯(cuò)的它把32個(gè)樣本作為一個(gè)整體復(fù)制了。 # 正確做法如果你想要每個(gè)樣本在批次內(nèi)連續(xù)重復(fù)需要先 unsqueeze 增加一個(gè)維度 # 步驟 [32, ...] - [32, 1, ...] - repeat(1, 2, 1, 1) - [32, 2, ...] - view(-1, ...) correct_input batch_input.unsqueeze(1) # [32, 1, 3, 224, 224] temp_output correct_input.repeat(1, 2, 1, 1, 1) # [32, 2, 3, 224, 224] correct_output temp_output.view(-1, 3, 224, 224) # [64, 3, 224, 224] print(fShape of correct_output: {correct_output.shape})注意事項(xiàng)在深度學(xué)習(xí)訓(xùn)練中尤其是在數(shù)據(jù)加載或數(shù)據(jù)增強(qiáng)環(huán)節(jié)使用repeat()時(shí)一定要預(yù)估輸出張量的大小。一個(gè)不小心的repeat操作可能導(dǎo)致顯存溢出OOM尤其是在處理高分辨率圖像或大語(yǔ)言模型時(shí)。在不確定的情況下先用print(x.repeat(...).shape)和print(x.repeat(...).element_size() * x.repeat(...).nelement() / 1024**2)計(jì)算一下輸出形狀和內(nèi)存占用MB是一個(gè)很好的習(xí)慣。4. 典型應(yīng)用場(chǎng)景與實(shí)戰(zhàn)代碼示例repeat()函數(shù)在PyTorch項(xiàng)目中有多種實(shí)用的場(chǎng)景下面我們結(jié)合具體代碼來(lái)看。4.1 場(chǎng)景一構(gòu)造常量張量或模式化張量當(dāng)你需要快速生成一個(gè)具有重復(fù)模式的張量時(shí)repeat()比循環(huán)或列表生成式高效得多。# 示例1構(gòu)造一個(gè)棋盤(pán)格狀的掩碼 (Checkerboard Mask) # 基礎(chǔ)單元是一個(gè) 2x2 的矩陣 [[0, 1], [1, 0]] base torch.tensor([[0, 1], [1, 0]], dtypetorch.float32) height, width 8, 8 # 計(jì)算需要在行和列上重復(fù)多少次 repeat_h height // base.size(0) # 8 / 2 4 repeat_w width // base.size(1) # 8 / 2 4 checkerboard base.repeat(repeat_h, repeat_w) print(8x8 Checkerboard Mask:) print(checkerboard) # 示例2為每個(gè)樣本添加一個(gè)固定的位置編碼向量 batch_size 5 seq_len 10 hidden_dim 8 # 假設(shè)我們有一個(gè)固定的位置編碼向量這里隨機(jī)生成代替 pos_encoding torch.randn(1, seq_len, hidden_dim) # [1, 10, 8] # 將其擴(kuò)展到整個(gè)批次 pos_encoding_batch pos_encoding.repeat(batch_size, 1, 1) # [5, 10, 8] print(f\nPosition encoding for batch: shape {pos_encoding_batch.shape}) print(fIs the encoding same for all samples in batch? {torch.all(pos_encoding_batch[0] pos_encoding_batch[1])})4.2 場(chǎng)景二數(shù)據(jù)擴(kuò)增Data Augmentation的離線生成在某些情況下我們可能需要在訓(xùn)練前就生成一些增強(qiáng)數(shù)據(jù)而不是在數(shù)據(jù)加載器中在線增強(qiáng)。repeat()可以方便地將原始數(shù)據(jù)與變換后的數(shù)據(jù)拼接起來(lái)。# 假設(shè)我們有一小批原始數(shù)據(jù) original_data torch.randn(4, 3, 64, 64) # 4張RGB小圖 print(fOriginal data shape: {original_data.shape}) # 模擬一個(gè)水平翻轉(zhuǎn)操作這里用索引反轉(zhuǎn)簡(jiǎn)化表示 flipped_data original_data.flip(dims[-1]) # 沿最后一維寬度翻轉(zhuǎn) # 將原始數(shù)據(jù)和翻轉(zhuǎn)數(shù)據(jù)合并成一個(gè)大的批次 augmented_data torch.cat([original_data, flipped_data], dim0) print(fAugmented data shape (using cat): {augmented_data.shape}) # [8, 3, 64, 64] # 使用 repeat 的替代方案如果擴(kuò)增策略是簡(jiǎn)單的復(fù)制 # 例如將每張圖片復(fù)制3次模擬多種裁剪這里用復(fù)制代替 replicated_data original_data.repeat(3, 1, 1, 1) # 注意這是完全復(fù)制不是不同的裁剪 print(fReplicated data shape (using repeat): {replicated_data.shape}) # [12, 3, 64, 64] # 然后可以對(duì) replicated_data 的每一份應(yīng)用不同的隨機(jī)裁剪4.3 場(chǎng)景三為廣播運(yùn)算準(zhǔn)備張量雖然expand()更適合廣播但有時(shí)原始張量沒(méi)有大小為1的維度我們又不想改變?cè)紨?shù)據(jù)就可以先用view/unsqueeze增加維度再用repeat。# 一個(gè)常見(jiàn)的例子將一維偏置向量加到二維特征矩陣上 batch_size 3 feature_dim 5 features torch.randn(batch_size, feature_dim) # [3, 5] bias torch.randn(feature_dim) # [5] # 直接相加會(huì)報(bào)錯(cuò)因?yàn)樾螤畈黄ヅ?# result features bias # RuntimeError # 方法1使用 unsqueeze 和 expand (更高效推薦) bias_expanded bias.unsqueeze(0).expand(batch_size, -1) # [1,5] - [3,5] result1 features bias_expanded # 方法2使用 unsqueeze 和 repeat (也能工作但復(fù)制了數(shù)據(jù)) bias_repeated bias.unsqueeze(0).repeat(batch_size, 1) # [1,5] - [3,5] result2 features bias_repeated print(fAre results equal? {torch.allclose(result1, result2)}) # True print(fDo bias_expanded and bias share memory? {bias_expanded.storage().data_ptr() bias.storage().data_ptr()}) # True print(fDo bias_repeated and bias share memory? {bias_repeated.storage().data_ptr() bias.storage().data_ptr()}) # False在這個(gè)例子中expand是更好的選擇因?yàn)樗鼪](méi)有發(fā)生實(shí)際的數(shù)據(jù)復(fù)制。repeat雖然結(jié)果正確但產(chǎn)生了不必要的內(nèi)存開(kāi)銷(xiāo)。5. 常見(jiàn)錯(cuò)誤排查與高級(jí)技巧5.1 錯(cuò)誤排查清單在使用repeat()時(shí)遇到的錯(cuò)誤大多源于對(duì)形狀和參數(shù)的不理解。下面是一個(gè)快速排查表錯(cuò)誤現(xiàn)象可能原因解決方案RuntimeError: Number of dimensions of repeat dims can not be smaller than number of dimensions of tensor提供的sizes參數(shù)個(gè)數(shù)少于張量的維度數(shù)。檢查x.ndim和len(sizes)。確保len(sizes) x.ndim。不足時(shí)可以補(bǔ)1。輸出形狀與預(yù)期不符1. 混淆了repeat參數(shù)是“次數(shù)”而不是“目標(biāo)大小”。2. 忽略了“維度補(bǔ)齊”規(guī)則參數(shù)匹配錯(cuò)了維度。1. 記住output_size[i] input_size[i] * sizes[i]。2. 使用print(x.shape)和print(x.ndim)確認(rèn)維度手動(dòng)推算或畫(huà)圖理解補(bǔ)齊規(guī)則。程序顯存溢出 (OOM)repeat倍數(shù)過(guò)大導(dǎo)致輸出張量?jī)?nèi)存激增。計(jì)算輸出元素總數(shù)prod(output_shape)。檢查是否合理??紤]使用expand如果條件允許或分塊處理。數(shù)據(jù)重復(fù)模式錯(cuò)誤錯(cuò)誤理解了重復(fù)的軸向。例如想按樣本重復(fù)卻按特征重復(fù)了。使用小張量如torch.tensor([[1,2],[3,4]])和簡(jiǎn)單的repeat參數(shù)如(2,3)先做實(shí)驗(yàn)打印結(jié)果驗(yàn)證模式。梯度計(jì)算錯(cuò)誤或丟失repeat()操作本身支持梯度傳播。問(wèn)題可能出在后續(xù)操作。確保計(jì)算圖連貫。如果需要對(duì)repeat的結(jié)果進(jìn)行原位操作注意使用.clone()或避免使用inplaceTrue的操作。5.2 結(jié)合view、reshape和permute進(jìn)行復(fù)雜變換repeat()經(jīng)常需要和形狀操作函數(shù)搭配使用以實(shí)現(xiàn)復(fù)雜的張量變換。# 目標(biāo)將一個(gè)形狀為 [a, b] 的張量轉(zhuǎn)換成 [a*n, b]其中每一行是原始行的重復(fù)。 # 例如將 [[1,2], [3,4]] 用 repeat(2,1) 得到 [[1,2],[1,2],[3,4],[3,4]]但這不是我們想要的。 # 我們想要的是[[1,2],[1,2],[3,4],[3,4]]但順序是交錯(cuò)的不上面已經(jīng)是了。 # 更復(fù)雜的例子想要得到 [[1,2],[3,4],[1,2],[3,4]]即先整體重復(fù)而不是按行重復(fù)。 x torch.tensor([[1, 2], [3, 4]]) print(fOriginal:\n{x}) # 方法A先增加一個(gè)維度再重復(fù)最后展平 # Step1: [2,2] - [2,1,2] x_a x.unsqueeze(1) # 在dim1處插入維度 print(fAfter unsqueeze(1): shape{x_a.shape}) # Step2: 沿新插入的維度重復(fù)2次 [2,1,2] - [2,2,2] x_a_repeat x_a.repeat(1, 2, 1) print(fAfter repeat(1,2,1): shape{x_a_repeat.shape}) # Step3: 合并前兩個(gè)維度 [2,2,2] - [4,2] x_a_final x_a_repeat.view(-1, x.size(-1)) print(fFinal result (view):\n{x_a_final}) # 方法B直接 repeat 然后 permute (轉(zhuǎn)置) # Step1: 直接重復(fù)整個(gè)張量 [2,2] - [4,4]? 不對(duì)。 # 我們需要的是行重復(fù)所以應(yīng)該是 repeat(2,1) - [4,2] x_b_repeat x.repeat(2, 1) print(f\nDirect repeat(2,1):\n{x_b_repeat}) # 輸出 [[1,2],[3,4],[1,2],[3,4]]正是我們想要的。 # 所以對(duì)于這個(gè)簡(jiǎn)單目標(biāo)直接 repeat(2,1) 即可。 # 但如果我們想要列重復(fù)呢即得到 [[1,2,1,2],[3,4,3,4]] x_col_repeat x.repeat(1, 2) print(fDirect repeat(1,2):\n{x_col_repeat})高級(jí)技巧當(dāng)你的重復(fù)邏輯比較復(fù)雜涉及維度的重新排列時(shí)一個(gè)有效的策略是先用unsqueeze在目標(biāo)位置插入大小為1的維度。這為你提供了重復(fù)的“錨點(diǎn)”。然后使用repeat在這個(gè)新維度上進(jìn)行復(fù)制。最后用view或reshape將張量重塑成最終形狀。如果維度順序不對(duì)可能還需要配合permute進(jìn)行維度換位。5.3repeat與repeat_interleave的辨析PyTorch 中還有一個(gè)函數(shù)叫torch.repeat_interleave()它的行為與repeat()不同也經(jīng)常被混淆。tensor.repeat(*sizes): 按維度整體重復(fù)。參數(shù)指定每個(gè)維度重復(fù)的次數(shù)。torch.repeat_interleave(tensor, repeats, dim): 按維度內(nèi)的元素重復(fù)。repeats可以是一個(gè)整數(shù)所有元素重復(fù)相同次數(shù)也可以是一個(gè)指定每個(gè)元素重復(fù)次數(shù)的張量。x torch.tensor([[1, 2], [3, 4]]) # repeat: 整體重復(fù) print(x.repeat(2, 3):) print(x.repeat(2, 3)) # 整體形狀 [4,6] # 輸出 # [[1, 2, 1, 2, 1, 2], # [3, 4, 3, 4, 3, 4], # [1, 2, 1, 2, 1, 2], # [3, 4, 3, 4, 3, 4]] # repeat_interleave: 元素重復(fù) print(\ntorch.repeat_interleave(x, repeats2, dim0):) print(torch.repeat_interleave(x, repeats2, dim0)) # 沿dim0每一行重復(fù)2次 # 輸出 # [[1, 2], # [1, 2], # [3, 4], # [3, 4]] print(\ntorch.repeat_interleave(x, repeatstorch.tensor([1, 2]), dim1):) print(torch.repeat_interleave(x, repeatstorch.tensor([1, 2]), dim1)) # 沿dim1第0列重復(fù)1次第1列重復(fù)2次 # 輸出 # [[1, 2, 2], # [3, 4, 4]]選擇指南如果你需要像“鋪瓷磚”一樣復(fù)制整個(gè)張量塊用repeat()。如果你需要復(fù)制張量?jī)?nèi)部的特定元素或切片例如將每個(gè)樣本重復(fù)不同的次數(shù)用repeat_interleave()。6. 性能優(yōu)化與替代方案探討雖然repeat()很方便但在性能敏感或內(nèi)存受限的場(chǎng)景下我們需要考慮更優(yōu)的方案。6.1 使用expand替代repeat以節(jié)省內(nèi)存這是最重要的優(yōu)化策略。只要源張量在需要擴(kuò)展的維度上大小為1就優(yōu)先使用expand()。import time # 創(chuàng)建一個(gè)大的張量其中一個(gè)維度為1 large_tensor torch.randn(1, 256, 1024, 1024) # 約 1GB (假設(shè)float32) target_repeats 8 # 測(cè)試 repeat 的內(nèi)存和時(shí)間 start time.time() repeated large_tensor.repeat(target_repeats, 1, 1, 1) time_repeat time.time() - start mem_repeat repeated.element_size() * repeated.nelement() / 1024**3 # GB print(frepeat 耗時(shí): {time_repeat:.3f}s, 內(nèi)存占用: {mem_repeat:.2f} GB) # 測(cè)試 expand 的內(nèi)存和時(shí)間 start time.time() expanded large_tensor.expand(target_repeats, -1, -1, -1) time_expand time.time() - start # expand 不分配新的大內(nèi)存底層存儲(chǔ)指針相同 mem_expand large_tensor.element_size() * large_tensor.nelement() / 1024**3 # 仍然是原始大小 print(fexpand 耗時(shí): {time_expand:.3f}s, ‘視圖’內(nèi)存占用: {mem_expand:.2f} GB (實(shí)際不新增)) print(fexpand 結(jié)果與 repeat 結(jié)果數(shù)值相等嗎 {torch.allclose(expanded, repeated)})6.2 使用torch.cat或torch.stack進(jìn)行可控拼接當(dāng)重復(fù)的份數(shù)不多或者重復(fù)邏輯不是簡(jiǎn)單的整體復(fù)制時(shí)顯式使用cat或stack可能更清晰有時(shí)在反向傳播時(shí)計(jì)算圖也更簡(jiǎn)單。# 假設(shè)我們要將同一個(gè)張量重復(fù)3次形成一個(gè)新的維度 x torch.randn(100, 200) repeat_times 3 # 方法1: repeat result_repeat x.repeat(repeat_times, 1, 1) # 錯(cuò)誤這會(huì)把100也重復(fù)。 # 正確做法是先 unsqueeze result_repeat_correct x.unsqueeze(0).repeat(repeat_times, 1, 1) # [3, 100, 200] # 方法2: stack result_stack torch.stack([x for _ in range(repeat_times)], dim0) # [3, 100, 200] # 方法3: cat (如果新維度不是第一維stack更方便) # 例如想在最后一維后面拼接 result_cat torch.cat([x.unsqueeze(-1) for _ in range(repeat_times)], dim-1) # [100, 200, 3] result_cat_alt x.unsqueeze(-1).repeat(1, 1, repeat_times) # 效果相同 print(fRepeat correct shape: {result_repeat_correct.shape}) print(fStack shape: {result_stack.shape}) print(fCat shape: {result_cat.shape}) print(fAre stack and repeat equal? {torch.allclose(result_stack, result_repeat_correct)})stack會(huì)創(chuàng)建一個(gè)新的維度而cat是在已有的維度上拼接。選擇哪一個(gè)取決于你想要的輸出形狀。6.3 避免在循環(huán)中調(diào)用repeat如果你需要在循環(huán)中多次對(duì)一個(gè)張量進(jìn)行重復(fù)操作最好在循環(huán)外先計(jì)算好最終形狀一次性分配內(nèi)存并填充而不是在每次迭代中重復(fù)調(diào)用repeat()后者會(huì)帶來(lái)大量的內(nèi)存分配和拷貝開(kāi)銷(xiāo)。# 不推薦的做法 results [] base_tensor torch.randn(10, 20) for i in range(1000): # 每次循環(huán)都創(chuàng)建一個(gè)新的張量 repeated base_tensor.repeat(2, 1) # 形狀 [20, 20] # ... 一些處理 ... results.append(repeated) final_result torch.stack(results, dim0) # 最終形狀 [1000, 20, 20] # 推薦的做法預(yù)分配內(nèi)存 batch_size 1000 target_shape (batch_size, 20, 20) preallocated torch.empty(target_shape, dtypebase_tensor.dtype, devicebase_tensor.device) # 使用 broadcasting 或 view expand 進(jìn)行填充 # 例如如果每個(gè)批次都是 base_tensor 的重復(fù) base_expanded base_tensor.unsqueeze(0).expand(batch_size, -1, -1) # [1000, 10, 20]? 不對(duì)我們需要[1000,20,20] # 更合適的做法是如果邏輯允許直接生成最終數(shù)據(jù)避免中間的 repeat 操作。對(duì)于這種模式如果可能應(yīng)重新思考數(shù)據(jù)流看是否能使用向量化操作避免循環(huán)。如果必須循環(huán)至少確保repeat操作不在最內(nèi)層循環(huán)。理解torch.repeat()的關(guān)鍵在于把握其“維度優(yōu)先”的擴(kuò)展邏輯和物理復(fù)制的本質(zhì)。在大多數(shù)需要數(shù)據(jù)副本的場(chǎng)景下它是得力的工具。但在追求極致性能和大數(shù)據(jù)處理的場(chǎng)合務(wù)必審視是否有更節(jié)省內(nèi)存的替代方案例如expand()或重構(gòu)數(shù)據(jù)處理流程。通過(guò)本文的詳細(xì)拆解和對(duì)比希望你能在下次使用repeat()時(shí)更加得心應(yīng)手精準(zhǔn)地控制張量的形狀與內(nèi)存。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色九月| 狠狠草狠狠草| 亚洲色无码| 影音先锋自拍网| 777久久综合视频| 久久人妻精品| 丁香婷婷六月在线资源观看| 大香蕉大香蕉在线影院| 丁香五月激情综合| 久久色婷婷| 激情四射五月天| 天天色综网| 99热20| 92久操视频| 色婷婷激情| 激情五月深爱五月| 丁香五月 激情文学| 操日视频| 夜夜www| 97男人天堂| 婷婷五月免费视频| 夜夜夜夜操| 伊人激情综合| 五月天色影院| 久久久性爱视频| 天天搞天天色综合| 男人的天堂在线婷婷| 五月天大香蕉| 五月婷婷六月丁香色| 超碰日日操| 久久久久久欧美精品se一二三四| 91九色视频在线观看| 五月丁香六月婷婷婷婷| 五月综合亚洲色| 精品久久久中文字幕大豆网推荐理由| 色色色欧美| 日日杆天天| 欧美成人Va| 亚洲综合无码| 另类精品视频在线观看| 久操大香蕉| 伊人久久大香线蕉精品| 日本色婷婷| 色五月人妻| 激情都市五月天| www.五月婷婷.com| 色一情一乱一乱一区91| 激情啪啪五月天| 91色久| 色婷视频| 亚洲无码播放| 五月婷婷片| 琪琪色五月天| 九九热最新| 人人干Av| 日本va欧美va欧美va| 五月天影院婷婷在线观看| 日韩 欧美 国产 一区 二区| 99热成人精品| 中文国产五月天| 久久激情视频99| 亚洲天堂青草| 日韩av免费版| 五月婷综合激情| 极品五月天| 97涩婷婷婷婷基地| AV网在线观看| 丁香五月区| 婷婷五月丁香99| ..真实国产乱子伦毛片| 麻豆忘忧草午夜| 大香蕉 婷婷| 激情综合网五月天| 99热国产这里只有精品| 情欲禁地| 国产欧美熟妇另类久久久 | 福利视频在线播放| 国产又粗又大又爽又黄| 国产特级毛片AAAAAAA高清| 三人荫蒂添的好舒服A片 | 丁香五月情| 亚洲色综合性| 久久久27操| 久久人妻久久| 婷婷在线播放| 91操在线视频| 97 天堂| ..真实国产乱子伦对白在线_欧| 色色色综合网| 国产精品A成V人在线播放| 国产人妻人伦精品一区二区| 伊人久久大香线蕉亚洲五月天,| 久久久九九九 99| 久久久jd| 久久五月天精品视频| 成人一级片| 99re热视频这里只有综合亚洲| 超碰免费99| 激情五婷网| 久久久久婷婷| 热思思| 天天操夜夜爽歪歪| 亚洲六月色| 中文字幕免费高清电视剧| 色五月天电影| 久久9热好| 六月丁香啪| 色噜噜狠狠色综合网| 色情性爱视频网址| 五月草影视| 五月丁香在线看| 色狠狠婷婷| 亚洲色碰| 91操人| 99免费| 婷婷丁香社区| 色99视频| 九九精品网| 亚洲婷婷激情综合激情999精品| 狠狠做深爱婷婷久久综合一区| 亚洲亚洲人成综合网络| 久久婷色| 五月丁香婷婷AV| 五月丁香啪啪啪| 99在线精品免费视频| 日韩操女| 五月香蕉综合| 操骚货在线| 粉嫩av懂色av蜜臀av熟妇| 五月丁香777| 亚韩精品视频1区| 97香蕉人人在线观看| 色玖玖玖| 丁香花五月天| 国产高潮A片羞羞视频涩涩| 九色 在线| 天天性视频| 色五月天在线观看| 91大操| 99热精品在线观看| 亚洲欧洲午夜成人精品av| 欧美性猛交99久久久久99按摩| 婷婷大乡焦噜噜| 婷婷开心综合人妻小说网址| 丁香婷婷色| 伊人热在线大香蕉| 深爱婷婷色| 思思re99视频在线观看| www.玖玖九| 中文字幕,综合,91| 五月天婷婷高清无码| 9999久久久久| 99精品视频免费在线播放| 九月停停| 噜综合| 无码髙清| 97色久| 狠狠插狠狠操| www一起操| 26uuu精品国产| 老美AA片| 婷婷五月丁香六月天亚洲综合| 99精品无码| 97欧美在线| 天堂草在线看www| 色狠狠色噜噜AV天堂五区| 亚洲国产精品成人免费一区久久久在线观看AAAA | 青青草六月丁香| 99这里有精品| 99热精品9| 无码色| 婷婷五月综合在线| www久久99| 不卡成人免费| 九九热免费| 99久久婷婷国产综合亚洲| WWW.桔色成人.COM| 在线视频九色97| 免费试看小视频 99| 亚洲在线操| 爱穴久久| 99热综合| 五月丁香综合影院| 亚洲第一黄网| 国产精品久久久99视频| 无遮挡国产高潮视频免费观看| 婷香五月网在线| 九九热99热| 久久久激情视频| 九九色综合网| 玖玖99福利| 99亚洲视频| 亚洲电影中文字幕| 欧美性色五月天| 国产成人网址| 激情五月婷婷综合色播小说| 大香蕉 伊人夜| 五月天婷婷成人网| 26uuu视频欧美| 久久五月天婷婷| 青青福利网| 丁香五月激情综合久久| 91久久九久久九久久九久久九久久| 亚洲视频国产一区| 亚洲AV免费在线| 开心四月婷婷在线色播播| 日韩黄黄| 婷婷丁香六月影视| 久久色吧| 深爱婷婷网| 九热在线这里有精品6| 九九日伊人| 五月婷婷六月丁香色| 秋霞日本免费毛片A片| 在线播放成人网站| 婷婷激情五月天视频在线| 欧洲区自拍| 亚洲另类视频| 九九热色视频| 国产精品视频网| 情久久综合五月天| 噜综合| 天天综合天综合久久网| 天天日天天干天天插天天射| 日熟女| 五月开心久久| 99re这里| www.狠狠操.com| 五月丁香另类网| 久久综合中文字幕| 天天做 天天爱| 日韩综合久| 色亚洲视频| 欧美交换配乱吟粗大25P| 激情五月婷婷丁香综合网| 五月丁香网站| 五月丁香久久综合91| 天堂久久性| 综合久久婷婷| www.久久久久久久| 99爱在线精品视频免费观看| 少妇婷婷五月天| 无码AV免费精品一区二区三区| 色婷婷久久综合中文久久一本| 五月婷婷啪啪啪| 欧美三9久九观看| 久久综合婷婷五月| 五月六月婷婷| 森林影视大全,最好看的2019年视频 | 亚洲天堂色| 成人 在线 日韩| 26UUU精品一区二区c〇m| 超碰在线超碰| 男人的天堂av俄罗斯热| 国产精品扒开腿做爽爽爽A片唱戏| 日韩aaa| www.日日日.com| 激情丁香五月AV| 精品无码久久久久久久久 | 天天噜日日噜综合无码| 国产人人操| www.色婷婷.com| WWW.桔色成人.COM| 人人爽欧美婷婷久久久五月丁香| 好好日激情五月天| 狠狠操之狠狠操| 日韩黄色网络| 射区导航| www.射伊蕉婷婷| 99热10在线高清播放| 欧美这里只有精品| 五月天婷婷丁香| 色婷婷综合网| 99热一区| 久久天天| 激情网五月| 丁香六月亚洲综合| 激情小说之五月| 99久超碰| 成人AV网站在线| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色婷婷丁香| 五月婷婷丁香大陆免费| AV 3P| 中文久久久人妻| 激情五月婷婷丁香六月| 丁香婷婷综合精品六月初| 九色91国产| www.夜夜操| 婷婷色欧美激情| 亚洲旡码| 1024人妻| 99在线视频精品| 日韩无码系列| 久青操| 超碰av在| 欧美色必爱| 婷婷五月天 丁香五月天 裸体| 色综合天天| 人妻AV在线| 色婷婷久久| 996er热| 99re思思热久久| 99久久99九九九99九他书对| 丁香五月婷久久| www色色色com| 午夜少妇在线观看视频| 五月激情四射网站| 丁香激情五月少妇| 99自拍网| 亚洲综合激| 深情六月婷婷综合久久| 婷婷日日天天| 婷婷六月综合激情| 色999五月色| 激情丁香五月婷婷| av大香蕉| xxx综合在线| 99热精品网| 久久性爱视频免费| 婷婷激情五月天在线| 另类综合婷婷五月天欧美视频| 欧美五月丁香| 99热这| 欧美色五月| 欧美搡BBBBB摔BBBBB| 韩日另类| 九九婷婷综合| 99色啊| 婷婷天天综合| 伊人玖玖婷婷| 免费观看18视频网站| 色.五月综合网| 婷婷综合天堂| 丁香五月色| 午夜丁香六月婷| 九月丁香五月婷婷| 120分钟婬片免费看| 国产精品久久久久久久久久| 免费操超碰| 丁香婷婷六月天| 午夜丁香六月婷| 婷婷激情五月综合| 丁香五月电影| 四季AV综合网| 开心五月婷婷在线视频免费观看| 五月丁香婷婷视频| 亚洲深喉AV| www久久久久| 另类专区在线观看| 婷婷之玖玖| 久草A片| 插插干干干色| 欧日韩成人| 中字幕视频在线永久在线观看免费| 久草婷婷视频| 天天在线天天综合网色| 亚洲六月色婷婷| 五月婷在线| 秋霞av不能| 婷婷五月天最新综合你懂的 | 麻豆观看夏晴子| 99丁香五月婷婷在线| 天天狠狠婷婷在线| 色久综合| 99国产99| 99热国产这里只有| 超碰在线人妻| 日韩情色在线观看| 99精品在线下载| 婷婷色五月激情| 真实熟女-91九色| 色九月| 99热在这里只有精品| 日本三级韩三级99久久| 日本操碰碰| 99热精品6| 色综合九九| 九九热内射| 中文字幕日产A片在线看| 婷婷久久色| 亚洲第一色色色色| 99日本精品视频热| 激情五月综合第一页| 五月丁香少妇网| 九九免费视频| 婷婷黄色| 五月天丁香久久| 丁香婷婷五月综合欧美另类| 天天射影视综合网| 色婷婷成人做爰A片免费看网站| 国产三级片91| 五月婷婷色播| sewuyuetingtingiii| 思思w99| 另类小说五月天| 96精品久久久久久久久| 天天爽天天爽| 九九www| 99热6色| 亚洲春色奇米影视| 99精品在线下载| 99色| 五月激情丁香五月宗合| 免费视频WWW在线观看网站| 99re久久| 夜夜爱网站| 国产综合色婷婷精品久久| 色色AV色色色东莞| 欧美激情久| 婷婷五月在线| 人人爽欧美婷婷久久久五月丁香| av一区免费看| 五月开心久久| 小色小蛇伊人婷婷色香五月| 热五月婷婷| 99热欧美精品| 五月婷婷激情久久| 婷婷色综合| 五月开心激情| 久久婷婷五月草视频在线播放| 99精彩视频| 欧洲永久精品| http:色情日本com| 色婷婷色五月综合| www狠狠爱com| 97色色网| 激情久久久| 丁香五月电影| 色丁香在线视频| 超级碰碰97在线| 五月丁香婷婷人体| 9久热在线精品| 亚洲成人五月天| 婷婷色在线播放| 国产成人AV在线播放| 精品网站:999WWW| 大香蕉人妻| 激情婷婷五月亚洲| 色五月综合激情网| 激情五月久久| 丁香五月性| 国产毛片精品一区二区色欲黄A片| 琪琪理论片| 亚洲在线免费成人| 五月婷婷视频在线观看| 99精品热| 久久性综合| 天天插,天天射| 久久嘟嘟丁香| 亚洲AV成人在线| 婷婷久久六月天| 久9热插入| 五月丁香成人| 色久婷婷网| 欧美日韩国产一二区| 色婷婷六月天| 婷婷AV丁香| 丁香五月瑟瑟| 婷婷伊人中文字幕| 热99re| 色婷亚洲五月丁香| 色吧综合网| 天天做天天爱天天玩夜夜爽 | 色情五月天婷婷| 婷婷综合九月| 中文字幕丰满孑伦无码专区| 天天爽天天操| 人妻videos人妻高清| 五月丁香激情啪啪网| 五月丁香啪啪| 激情五月天电影| 久色网| www...com黄在线观看| 丁香五月激情网| 婷婷综合五月天| 色色日本| 五月天成人伊人| 午夜日韩久久久网站| 五月天开心激情综合网| 五月丁香六月婷婷国产视频| 色婷婷久久综合久色| 91呦呦呦| 五月激情综合网| 79精品视频| 天天综合久久| 婷婷五月综合久久中文字幕| 久久99大| 97在线精品| 天天摸天天舔| 五月成人网天天| 99热日韩| 婷婷综合九月| 五月丁香久久激情综合| 五月天丁香| 五月婷婷深深爱| 激情婷婷五月天在线观看| 综合啪啪| 青草视频在线观看视频| 色婷婷影院| 直接看的AV| 丁香五月综合在线| 操操操操操操婷婷五月天| 婷婷综合偷拍| 日韩AC在线免费观看| 丁香婷婷色五月| 人人九色| 婷婷性福五月天| 天天日夜夜操五月| 五月天三级| 超碰操网| 99热在线精品播放| 偷拍91九色| 久久丁香婷婷色情综合| 激情操逼婷婷| 少妇搡BBBB搡BBB搡毛茸茸| 99久久9| 女人被男人吃奶到高潮| 色五婷婷开心缴| 婷婷五月天激情影片| 欧美美女国产日韩一区二区久| 激情综合五月天| 五月激情射| 91丨九色丨国产打屁股网站| 91黄色五月天视频| 好吊兆人妻| 国产FREESEXVIDEOS性中国| 99国产在线| 中文字幕在线播放视频| 欧美99热| 99在线精品视频在线观看| 久久激情五月婷婷| 99自拍网| 色情综合| 99热在线看| 日日色综合| 91精品丝袜久久久久久| 欧美操人| 激情五月激情综合网| 久久一热| 99在线免费视频| 精品久久人妻| 色婷婷五月天| 青草视频在线播放| 天天爱天天天射AV| 亚洲无码免费看| 五六月婷婷久久| Www.久久| 五月婷婷九九热| 色婷婷激情四射视频| 久大香蕉| 丁香五月影院| 色国产五月| 人妻肉射免费观看| 国产午夜精品久久久观看| 丁香六月婷婷综合欧美| 色五月天丁香婷婷| 九九视频在线观看| 天堂成人A片永久免费网站| 五月婷婷啪啪啪啪| 成人在线高清| 激情小说五月天| 激情啪啪五月天| 婷婷五月丁香基| 中文字幕久久婷九女同| 久久性刺激| 日本欧美在线| 99色热视频| 五月婷婷六月丁香在线视频| 超碰免费大香蕉| 欧美人妻一区二区| 精品欧美性爱超级爽| 色网站9| 九艹在线| 99超在线| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 艹色18p| 熟女网站久久| 狠狠人人| 99这里有精品| 综合久久99| 综合五月激情| 9久久精品| 五月丁香人人婷婷在线观看| 激情啪啪五月| 牛色色碰| 综合色色婷婷| 丁香五月天天高清在线| 婷婷五月天成人网| 99色在线观看视频者| 六月久久婷婷| 天天综合天天玩夜夜玩天天玩夜夜玩| 99热这里只有精品免费| 丁香六月婷| 碰超在线九色| 五月丁香啪啪激情| 久久久久久9| 天天日天天久久青青| 色色九九五月天 | 亚洲综合五月| 91日精品| 99热日本| 99综合视频| 婷婷香蕉香| 亚洲色婷婷| 99热在线这里| 天堂成人A片永久免费网站| 97超级操操| 日日天天操| 91九色精品女同系列| 色五月色综合| 久久6这里只有精品| 噜噜狠狠色综合久| 五月综合激情网| 天天玩夜夜操天天爽| 婷婷五月天视频亚洲| 成人精品一区日本无码网 | 久色婷婷200| 五月激情小说| 99热99干| 天天干天天拍| 99久久久精品| 激情 婷婷 丁香五月天| 婷婷综合在线| 秋霞免费三级片| 日本婷婷五月天| 超碰人人摸人人操| 色五月涩涩婷婷蜜桃| 五月天丁香网站| 超碰人人操人人9| yazhouzonghesese| 亚洲精品久久久久AV无码| 九九热99视频| 4399亚洲视频| 亚洲色夜| 天天影院色| 五月刺激丁香月综合| 激情婷婷五月天伊人在线观看| 欧美99视频| 91伦| 欧美成人网99网| 办公室少妇激情呻吟A片在线观看| 亚洲激情视频在线观看| 国内外色色色色色成人视频| avv在线| 五月婷婷亞洲中文| 99在线视频。| 婷婷激情六月中文| 中字幕视频在线永久在线观看免费 | 免费视频WWW在线观看网站| 久久婷婷色| 性综合网| 免费啪啪亚州视频| 日日操夜夜爽| 日本不卡一区二区三区| 婷婷五月开心中文字幕色| 深爱激情综合网| 日本九九九九| 婷婷五月丁香香蕉| 天堂AV三级| 99热免费在线| 久久这里只有精品07| 色五月在线播放| 97色片| 色五月激情五月天| 激情欧美婷婷| 五月丁香六月激情| 都市激情五月婷婷综合| 国产看真人毛片爱做A片| jiujiu无码五区| 开心五月激情网| 激情合网婷婷| 九月丁香八月婷婷加勒比| 色婷婷综合网站| 999热视频精品99免费在线| 亚洲色婷婷五月| 色婷婷yy久| 丁香五月婷婷日本| 91色操| 啊V视频在线观看| 开心六月婷| a在线观看| 国产丁香五月天婷婷| 性做爰A片免费视频A片直播| 婷婷五月天亚洲综合| 热久久这里只有三级视频| 丁香六月久久| 丁香五月色色| 欧美色婷婷| 久热a| YW无码| 91干视频| 狠狠操之狠狠操| 牛牛澡牛牛爽| 这里只有精品在线视频在线观看| 亚洲最大在线| AV大香蕉| 狠狠草综合网| 六月婷婷网| 婷婷五月天堂| 亚洲五月天伊人| 婷久久高清| 99爱精品| 永久无码色| 午夜天堂一区人妻| 无人精品在线视频| 久久婷婷精品| 抽插特写| 婷婷激情综合| 青草久久五月婷伊人| 99资源人人| 亚洲av免费在线| 成人网丁香五月| 九月av在线| 婷婷久久五月天| 婷婷干五月综合在线播放| 久碰久操| 5月丁香综合图区| 欧美日本国产欧美日本韩国99| 99久久精彩视频。| 99热精品网| 色五月婷婷在线| 开心五月色婷婷综合开心网| 97碰免费视频在线| 九九无码AV| 六月丁香久久| 思思久热| 五月天伊人av| 丁香五月天婷婷91| 欧美性生交XXXXX无码小说| 婷婷久久综合| 亚洲婷婷乱乱丁香| 激情五月丁香五月| 91丨人妻丨国产丨丝袜| 婷婷丁香六月| 国产操碰| 人。妻久久| 色色综合色视频| 超碰97人人操| 丁香六月婷婷缴情欧美| 色综合综合色| 丁香六月五月天| 另类五月婷婷| 六月丁香啪啪啪| 婷婷六久久| 超碰成人免费| 色一情一乱一乱一区91Av| 久久aaaa片一区二区| 成人五月天综合网| 欧美日韩国产一区二区| 9九九久久精品无码专区| 99视频久久| 综合色影| 婷婷瑟瑟五月天| 成人婷婷桔色| 日本女天天爽| √天堂资源在线人妻熟女| 伊人影院久久网| 天天色情站| 天天干天天操天天爽| 五月天成人在线播放| 丁香五月激情在线| 久久五月天黄色五月天色网址| 涩五月婷婷| 婷婷五月网图片区| 九九视屏| 狠狠色狠狠色综合日日91| 色色色色欧美| 亚洲精品又粗又大又爽A片| 综合网天天| AV在线大香蕉| 99色综合网| 九色七七| 92久久| 久久久人妻| 久久久天天啊| 色情五月婷婷| 人人草人人看| 性综合网| 伊人久久大香线蕉av一区| 五月丁香777| 婷婷六月综合激情| 色99网| 日日色综合| 深爱婷婷丁香五月激情| 玖玖资源站中文| 99性爱精品| 99热免| 丁香五月综合AV在线| 激情五月天在线视频| 午夜激情五月天| 第四色婷婷丁香五月| 丁香婷婷在线| 五月丁香在线综合| 婷婷五月另类网站| 99爱爱网| 丁香激情四射| 激情网五月天| 97热这里精品在线视频| 人妻综合网| 99综合网| 99ER热精品视频| 国产精品日本一区二区在线播放| 婷婷在线中文字幕| 欧美色综合天天久久综合精品| 99在线精品免费视频| 成人午夜天| 五月天久久小说| 中文字幕 中文字幕明步| 丁香五月综合网| 亚洲精品字幕| 91精品综合久久久久久五月天| wuyuedingxiang| 99综合成人视频在线观看| 99热久草| 丁香五月天在线观看视频| 插插干干干色| 久99热| 操日视频| 色久综合| 91精品刘玥| 亚洲热久| 狠狠搞五月天| 婷婷激情鹿城五月天| 婷婷播5月| 五月丁香六月激情综合| 丁香五月综合| 日韩三十六页| 日本色天堂| 精品婷婷五| 丁香五月五婷| 日本精品99网站| 欧美顶级少妇做爰HD| 五月天激情小说婷婷基地| 欧美25p| 色五月首页| 狠狠操狠狠色| 色五月婷婷影院| 九九精品这里只有| 思思热99在线视频| 99久视频| 亚洲中字AV电影在线网站| 五月婷婷六月丁香玖玖玫瑰91| 99日本精品视频热| 色综合久久久久久久久五月| 天天爽天天爽视频| 99爱视频免费| 激情五月天天| 97色永久免费视频| 激情狠狠丁香月| 欧洲亚洲午夜| 5月丁香美女影院| 啪啪六月婷婷| 欧美va| 色七七九九| 91男同视频| 五月丁香婷婷综合视频| 欧美综合婷婷网| 日本高清久| 五月丁香婷婷狠狠操| 欧美日朝成人| 婷婷涩涩五月天| 激情六月婷婷| 六月婷婷啪啪| 丁香五月综合图片在线观看| 超碰二区| 天天色五月婷婷91久久久久久久| 五月天激情影院| 五月第四色| 久久99网| 成人中文字幕在线| 五月综合六月丁| 99久在线精品99re8热| 99干免费视频| 无码毛片992367| 色五月成人| 色五月婷婷影院| 婷婷激情综合| 思思99久久| 夜夜操狠狠操天天操| 色狠狠综合| 九9九9无码| 天天日,夜夜爽| 综合色99| 久久色五月| 这里只有精品免费视频| 熟妇人妻中文字幕无码老熟妇 | 激情五月六月丁香| 狠狠干婷婷| 97色操| 一级二级香港秋霞欧美欧美秋霞| 五月天色综合| 99久在线精品99re8| 色综合天天| 欧美天堂婷婷日韩| 亚洲小说欧美激情| 在线播放成人网站| 色五月丁香五月| 婷婷日日夜夜| 日韩三级高清无码| 日日日影院| 伊人激情AV一区二区三区| 五月丁香 六月婷婷a| 大香蕉伊人99| 九色无码| 综合激情视频| 91九色成人原创视频| 色婷婷在线视频综合| 人妻第九页| 天天射射夜| 日日干夜夜干| 亚洲精99| 婷婷五月花| 色五月xxx| 天天插天天日| 丁香五月婷婷婷婷欧美综合| 狠狠干综合| 色五月婷色彩免播放器| 99热免费| 丁香婷婷久久 | 狠狠狠狠狠| 国产成人网址| 色五月av| 丁香五月情色| 婷婷爱五月天| 伊人青草成人| 涩五月婷婷| 婷婷五月天深爱| 日本人妻伦在线中文字幕| 玖玖精品资源| 五月丁香亭亭电影久久| 亚洲激情精品| 色99网| www.五月婷| 97欧美在线| 婷婷五月色色| 九九九九这里只有精品| 色婷婷五月开心六月综合| 亚洲久热| 99热这里只有精品一区| 久草婷| 99色在线| 久久婷婷五月综合色奶水99啪| 色五月五月天色婷婷色五月| 超碰色综合| 国产激情综合五月久久| 日本本土色网第一区| 国产av天堂| 五月天婷婷丁香六月| 久久丁香婷婷五月| 久99视频在线观看| 五月天激情偷拍| 亚洲成av人影院| 久久丁香久久| 91精产品自偷自偷综合| 另类激情中文| 婷婷丁香成人网址| 男人的天堂99| 99操逼| 99热99思午夜精品| 日日操夜夜操中国无码| 狠狠摸狠狠摸| 久天综合| 无遮挡国产高潮视频免费观看| xfplayav在线| 五月丁香婷婷激情影院欧美| 色激情五月| 玖玖精品资源| 五月婷婷激情日本| 热久久99热欧美国产亚洲| 婷婷五月天性| 狠狠色婷婷7777久综合| 日韩啊啊啊| 狠狠干综合网| 乱码操操| 成人性生活免费观看。| 婷婷六月综合基地| 五月丁香拍拍激情综合| 在线观看免费视频| 996er热| 99'无码| 日本婷婷色| 色色五月婷| 日在线V视频在线播放| 色播五月天婷婷老师| 天天插天天插| 99色精品| 婷婷五月天,影院| 色五月婷婷青娱乐| 免费观看全黄做爰的视频| 久久九九国产精品怡红院| 成人五月天婷婷| 91久久九色| 欧美色五月| 超碰com| 五月婷婷狠狠干| 亚洲另类婷婷综合| 五月天激情日色在线| 欧美人妻一区二区| 日韩啊啊啊| 五月婷婷之激情五月| 五月天丁香成人| 丁香婷婷激情四射五月| 这里只有精品在线观看视频| 无码区婷婷五月花开| 五月丁香婷婷综合激情基地| 98永久精品| www久久久久久久久久久久久久久久久| 91超级碰在线视频| 五月激情婷婷六月| 久久婷出差欧美色两性综合网| 操日本色| 婷婷丁香综合网| 这里只有精品1| 9有码中文| 99热99色| 开心久久爱五月天| 热99国产精品| 欧美婷婷综合网| 色爽干| 婷婷99狠狠躁天天躁| 国产精品成人AV在线| 天天做天天爱天天要| 亚洲mm色| 丁香丁婷五月激情| www.色综合.com| 亚洲啪啪自拍| 99视频免费播放 | 大战熟女丰满人妻AV| 人妻操逼视频| 99亚洲精品| 美女天天爽| 色色 亚洲| 五月激情综合五月| 思思热99er在线视频| 欧美色色色色色色色| 婷婷激情四射网| 九9九9无码| 丁香五月激情啪啪啪啪| 淫视馆av三区| 5月丁香综合图区| 婷婷五月天在线观看| 五月婷婷基地| 丁香六月激情| 久久五月天色婷婷| 九月综合| 免费精品99| www.天天日| 欧美色五月| 婷婷五月天激情五月天深爱五月天| 五月婷丁香亚洲| 亭亭社区五月天| 手机看片日日做夜夜| 97色伦另类图片小说视频| 热99精品视频观看| 千人斩操逼| 欧爱综合视频| 69婷婷丁香午夜| 激情婷婷五月天在线观看| 视色综合| 婷婷五月天激情综合深爱| 欧美激情 日韩无码 婷婷 五月天 久久婷婷丁香五月一二三 | 任你爽精品免费视频6| 激情五月婷婷在线观看| 人妻久久久久久| 欧美综合五月丁香六月婷| 91久久五月天| 婷婷啪啪| 色色色热| 欧美交换配乱吟粗大25P| 久久综合99综合| 成人五月天综合网| 久久全色| 综合久久久| 欧美日韩123| 色情性爱视频网址| 丁香六月婷婷综合麻豆| wwccc久久久| 婷婷五月18永久免费视频| 欧美黄色韩日网| 99色色网| 激情五月丁香五月| 99热18| 丰满少妇猛烈A片免费看观看| 美女被操一区二区| 午夜69成人做爰视频| 天天插操| 久久婷中文字幕| 色哟哟www| 天天做天天爱天天摸| 五月丁香综合精品| 丁香六月天婷婷开心综合| 亚洲这里只有精品| 久久九九网| 色婷婷综合网站| 99久久超级| 狼人婷婷综合| 丁香五月情色| 丁香婷婷六月在线资源观看| 久9视频免费播放| 九九久久99| 欧美精品在线观看| 啪啪夜久久| 五月婷婷色色| 亚洲激情综合五月婷婷啪啪| 亚洲欧美婷婷五月色综合| 成人视屏在线观看| AⅤ网站在线看| 97色色综合| 五月天婷婷日日爱| 色婷婷婷婷五月天| 婷婷丁香六月天| 色99综合色88| 婷婷激情九月| 丁香五月天五码婷婷| 国产密乳av一区二区三区四区| 色婷婷五月天偷拍| 亚洲综合碰| 丁香婷婷五月激情| 婷婷五月天激情视频| 色色五月天网站| 欧美电影在线播放| 欧美精品A片一区在线观看| 五月丁香婷婷综合在线| 丁香五月天成人| 男女99免费视频| 丁香五月 性爱| 色婷婷久久久| 激情五月婷婷色播网| 色婷婷影视| 五月综合激情网| 婷婷丁香69精华| 久久丁香五月天| 青青草五月天| 欧美操综合| 26UUU在线观看| 99热碰碰| 99久久婷婷国产综合精品电影| 丁香九月婷| 五月激情丁香| 狠狠干天天日| 91人人操| 色播五月丁香婷婷| 99热自拍| 91日综合欧美| 激情婷婷五月亚洲| 狠狠爱婷婷爱| 91伦| 天天舔夜夜操www com| 五月丁香六月婷婷网| 五月色情| 五月丁香婷婷色| 五月丁香六月激情欧美综合| 欧美大片| 九九热这里只有精品首页| 深爱激清网| ..真实国产乱子伦对白在线_欧| 久久精典| 婷婷五月天激情免费在线观看| 99国产精品白浆在线观看免费 | 国产精品A片| 狠狠干狠狠色| 色五月综合网| 我去色色网五雨天| 五月婷婷啪啪啪啪| 国产色色网址网站| 狠狠干综合| 久久综合网桃花| 99视频在线精品免费观看2| 天久综合91综合首页| 噜噜噜噜噜久| 激情综合无码| 色欲五月婷婷| 夜夜爽天天干| 大香蕉福利导航| 久香草视频在线观看| 色婷婷视频| 欧美久久婷婷| 日韩成人AV在线播放| 色色色色区| 99热777| 婷婷丁香综合网| 五月天色婷婷图片| 日日夜夜天天| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 久久女人天堂| 91干在线| 停停五月色宗合| 五月婷婷视频在线观看| 97爱综合| 亚艹艹| 91人无码久久久久久| 久久视频这里99| 思思热99er| 五月天伊人手机在线播放AV| se色婷婷视频| 综合激情深爱| 91精品国产综合久久久不卡电影| 5月丁香综合网| 亚洲妇女熟BBW| 五月丁香天堂网婷婷| 日日日日日| 丁香五月日本| 天天碰夜夜操| 婷婷操逼网| 激情性爱五月天网页| 性99网站| 六月丁香成人| 99热这里是精品| 六月婷婷香蕉| 婷婷的99视频网站| 色99在线视频| www.色婷婷.com| 亚洲色婷婷婷婷人人爽| 欧美性生交XXXXX无码小说| 五月丁香综合啪啪| 99久久66综合| 桔色成人官方网站| 亚洲激情四射色| 亚美欧色影院| 9精品一区| 五月天婷婷AV| 伊人干综合| 这里只有精品视频| 天天拍夜夜爽日日| 久久婷婷网址| 精品人妻在线| 另类在线| 操91| 99热最新网址| WWW.久久久久久久久久久久久| 中文字幕成人影视| 久久婷婷成人| 东京热免费视频| 狠狠色综合五月| 五月天婷婷丁香人人操91| 久草性爱| 天天天天天天天干| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 九月婷婷激情| 婷婷开心深爱五月天| 激情内射人妻1区2区3区| 五月丁香激情婷婷综合| 九9九9无码| 色色色热| 涩婷婷五月天| 影音先锋91资源站| 六月婷婷激情| A网在线欧洲| 丁香六月婷婷久久高清| 色优久久| 丁香五月久久综合| 国产九九一区二区三区| 九九热最新视频| 色视五月天婷婷| 九九综舍久久| 少妇性按摩无码中文A片| 99性视频| 婷婷中文在线| 99操九九网| 婷婷综合色色| 久久久人人人妻丝丝丝| 91视频精品99| 少妇被躁爽到高潮无码文| 天天爽天天日| 婷婷色香六月综合激情|