Jak mohu udělat filtr v pytorch conv2d

0

Otázka

Jsem opravdu nový pytorch, a já jsem byl dělat kódu konvoluční sám.

Aplikovat konvoluční na vstupní data, používám conv2d.

V dokumentaci,

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

Ale kde je filtr? Chcete-li zavinutý, měli bychom to udělat na vstupní data s jádrem. Ale je tam jen kernel velikost, prvky jádra.

Například, Tam jsou vstupní data, 5x5 a s 2x2 jádra s všechny 4 jádra prvků jsou 1 pak můžu udělat 4x4 výstup. Takže, kde mohu dát prvky jádra?

2

Nejlepší odpověď

1

Filtr závaží lze přistupovat pomocí weight parametr Conv2d objekt. Například,

>>> 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)

Váhy jsou inicializována ve výchozím nastavení tím, že odběr vzorků z rovnoměrného rozdělení. Můžete také inicializovat váhy pomocí různých váha inicializace režimů.

Pokud chcete ručně změnit závaží, můžete to udělat úpravou weight parametr přímo. Například pro nastavení všech vah 1, použití,

>>> 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)

Všimněte si, že během tréninku, konvoluční vrstvy jsou typicky součástí výpočetní graf, a jejich váhy se automaticky aktualizuje při backward() volání.

2021-11-22 03:04:10

Mám otázku. Proč tam jsou 4 filtry v c.hmotnost? Jen jeden není dost?
JAEMTO

@JAEMTO Protože v příkladu jsem použil, jsem nastavit in_channels=2 a out_channels=2. Každý vstupní kanál je convolved pro každý výstupní kanál ve výchozím nastavení. Řídit toto chování, můžete změnit groups argument Conv2d. (Některé odkazy: stackoverflow.com/q/46536971/5987698, pytorch.org/docs/stable/generated/torch.nn.Conv2d.html).
GoodDeeds

Já to mám a v conv2d, pokud váhy jsou inicializována ve výchozím nastavení pomocí odběru vzorků z rovnoměrného rozdělení, pak to, co je rozdíl od xavier rovnoměrné rozložení?
JAEMTO
1

Můžete použít funkční conv2d funkce, která trvá další tenzor filtrů (jako argument weights). Na nn.Conv2d vrstva spoléhá na tuto operaci, ale zpracovává učení filtry/závaží automaticky, což je obecně výhodnější

2021-11-21 14:32:10

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................