簡體   English   中英

如何在 pytorch conv2d 中制作過濾器

[英]How can I make a filter in pytorch conv2d

我對 pytorch 真的很陌生,而且我自己一直在做代碼卷積。

為了對輸入數據應用卷積,我使用 conv2d。

在文檔中,

torch.nn.Conv2d(in_channels, out_channels, kernel_size ...)

但是過濾器在哪里? 為了進行卷積,我們應該使用 kernel 對輸入數據進行處理。 但是只有 kernel 尺寸,沒有 kernel 的元素。

例如,有一個輸入數據 5x5 和 2x2 kernel,所有 4 個內核元素都是 1,那么我可以制作 4x4 output。 那么kernel的元素可以放在哪里呢?

您不需要定義 kernel 的元素。 kernel的元件將通過圖靈訓練學習。

可以使用Conv2d object 的weight參數訪問過濾器權重。 例如,

>>> c = torch.nn.Conv2d(in_channels=2, out_channels=2, kernel_size=3)
>>> c.weight
Parameter containing:
tensor([[[[ 0.2156,  0.0930, -0.2319],
      [ 0.1333, -0.0846,  0.1848],
      [ 0.0765, -0.1799, -0.1273]],

     [[ 0.1173,  0.1650, -0.0876],
      [-0.1353,  0.0616, -0.1136],
      [-0.2326, -0.1509,  0.0651]]],


    [[[-0.2026,  0.2210,  0.0409],
      [-0.0818,  0.0793,  0.1074],
      [-0.1430, -0.0118, -0.2100]],

     [[-0.2025, -0.0508, -0.1731],
      [ 0.0217, -0.1616,  0.0702],
      [ 0.1903, -0.1864,  0.1523]]]], requires_grad=True)

默認情況下,通過 從均勻分布中采樣來初始化權重。 您還可以使用各種權重初始化方案來初始化權重。

如果要手動更改權重,可以通過直接修改weight參數來實現。 例如,要將所有權重設置為 1,請使用,

>>> c.weight.data = torch.ones_like(c.weight)
>>> c.weight
Parameter containing:
tensor([[[[1., 1., 1.],
      [1., 1., 1.],
      [1., 1., 1.]],

     [[1., 1., 1.],
      [1., 1., 1.],
      [1., 1., 1.]]],


    [[[1., 1., 1.],
      [1., 1., 1.],
      [1., 1., 1.]],

     [[1., 1., 1.],
      [1., 1., 1.],
      [1., 1., 1.]]]], requires_grad=True)

請注意,在訓練期間,卷積層通常是計算圖的一部分,並且它們的權重在進行backward()調用時會自動更新。

您可以使用功能 conv2d function,它需要一個額外的過濾器張量(作為參數weights )。 nn.Conv2d層依賴此操作,但自動處理過濾器/權重的學習,這通常更方便

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM