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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Pytorch Merge操作

發布時間:2025/4/16 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch Merge操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

Pytorch中沒有內置Merge操作,需要手動實現。

下面會以多個四維的Tensor直接的Merge操作來展示。(len, *image_shape(占三維))

比如上面,這樣的圖片。

每一行都是一個數據X_i(包含三張黑白圖)。
所以,如果是直接用torch.cat([x0, x1, x2])的話,就是直接把這九張圖按照順序排列了下。

[x1[0],..., x1[n], x2[0],..., x2[n], x3[0],..., x3[n]]

圖片對應的編號順序:

123456789

但是如果有時候,需要把這個大圖進行一個 轉置 , 就需要用到了Merge的操作。

將(x1, x2, x3),三個變量merge操作。之后,就是

[x1[0], x2[0], x3[0], ..., x1[n], x2[n], x3[n]]

這樣再輸出的話,就是在大圖上做了轉置的效果。

因此需要做Merge。

Merge實現

先給范式:x1,x2,...xn的相互merge

torch.stack([x1,x2,..,xn]).transpose(1, 0).contiguous().view(len(x1+x2+..+xn), *x.shape[1:])

簡單來說,就是

  • 先用stack按照第一維度來進行疊加(是會擴充維度的)
  • 之后,將擴充出來的維度和一開始的index維度(也就是x1[0], x1[2], ..., x1[index]),進行轉置(注意的是,需要使用contiguous() 因為需要在物理層面上也要完成轉置,之后才能view。這是pytorch的內部機制)
  • 最后,再用view的方式將擴充好的維度壓縮回去。
  • 給個范例的輸出:

    再給個實例上的代碼區別的部分:

    圖一

    plt.imshow(np.transpose(vutils.make_grid(torch.cat([G_x.cpu().detach(), x.cpu().detach(), y.cpu().detach()]), nrow=3, padding=0,normalize=True, scale_each=True), (1, 2, 0)), cmap='gray')

    圖二(轉置后)

    plt.imshow(np.transpose(vutils.make_grid(torch.stack([G_x.cpu().detach(), x.cpu().detach(), y.cpu().detach()]).transpose(1, 0).contiguous().view(BATCH_SIZE * 3, 1, 96, 96), nrow=3, padding=0,normalize=True, scale_each=True), (1, 2, 0)), cmap='gray')

    總結

    以上是生活随笔為你收集整理的Pytorch Merge操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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