Deep

Deepラーニングのメモです

577 views

入力が3チャンネル、出力が3チャンネルの場合

まずはテストに使用したコードを以下に記す。

 # coding:UTF-8
import numpy as np
import torch
import torch.nn as nn


def conv_test_net():

    number_net = nn.Sequential(
        nn.Conv2d(3, 3, 3, padding=1),
    )

    return number_net


if __name__ == '__main__':
    # 3チャネル 3×3の画像データを1枚作成
    virtual_img = [
            [
                [
                    [0,0,0],
                    [0,1,0],
                    [0,0,0]
                ],
                [
                    [0,0,0],
                    [1,0,0],
                    [0,0,0]
                ],
                [
                    [0,1,0],
                    [0,0,0],
                    [0,0,0]
                ],
            ]

        ]

    t = torch.tensor(virtual_img, dtype=torch.float)
    net = conv_test_net()
    conv = net[0]
    print("[weight]")
    print(conv.weight)
    print("[bias]")
    print(conv.bias)

    y = net(t)

    print(y.size())
    print(y)

前ページのコードから、10行目のコンボリューション層の入力も出力も3チャンネルに、18行目の画像のチャンネルを3チャンネルに変更した。
後は同じである。
実行結果を以下に記す。

[weight]
Parameter containing:
tensor([[[[ 0.0564, -0.1700, -0.0299],
          [-0.0380,  0.1441,  0.1701],
          [-0.1202,  0.0945, -0.1779]],

         [[-0.1027,  0.0413, -0.1754],
          [-0.0346,  0.0970, -0.0097],
          [ 0.1605,  0.1860, -0.1664]],

         [[ 0.1897,  0.1018, -0.0093],
          [ 0.1059,  0.0945,  0.1892],
          [-0.0633, -0.1559,  0.1348]]],


        [[[-0.0908,  0.0070, -0.0063],
          [ 0.0854,  0.0748, -0.0407],
          [-0.1433,  0.0555, -0.1300]],

         [[-0.1421, -0.0309,  0.1618],
          [ 0.0688,  0.0296,  0.1324],
          [-0.0190,  0.0046, -0.1572]],

         [[ 0.0920,  0.1669, -0.1884],
          [ 0.1685, -0.1078,  0.0784],
          [ 0.0278,  0.0433,  0.0387]]],


        [[[-0.1236,  0.0811, -0.0670],
          [-0.1856, -0.0041,  0.0049],
          [ 0.1199, -0.0394,  0.1008]],

         [[-0.1344,  0.1040, -0.0544],
          [-0.1300,  0.1650, -0.0189],
          [ 0.1847, -0.0663, -0.0671]],

         [[-0.1588,  0.1365, -0.0950],
          [ 0.0457,  0.0731, -0.0296],
          [ 0.0449, -0.1716,  0.0680]]]], requires_grad=True)
[bias]
Parameter containing:
tensor([-0.0784, -0.1122,  0.0809], requires_grad=True)
torch.Size([1, 3, 3, 3])
tensor([[[[ 0.1190,  0.2712, -0.0926],
          [ 0.1794,  0.1329,  0.0733],
          [-0.0669, -0.3510, -0.0220]],

         [[-0.1591, -0.1834, -0.0870],
          [-0.3116,  0.1983,  0.0651],
          [-0.1494, -0.2473, -0.2030]],

         [[ 0.0859,  0.2993,  0.2465],
          [ 0.1559,  0.0833, -0.2635],
          [ 0.1179,  0.0277, -0.0427]]]], grad_fn=<MkldnnConvolutionBackward>)

1チャンネルの入力に対して、3つのコンボリューション層が対応する。
計算については画像を拡大して参照してください。

つまり、

入力数×出力数

の数だけフィルターが生成される。

Page 10 of 29.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626