Pytorchコード入門学習のための分類タスク(1):ネットワークフレームワークの構築

目次

1. ネットワークフレームワークの概要

2. ガイドパッケージ

3. 畳み込みニューラル ネットワークを定義する

3.1 コード表示

3.2 ネットワークの目的を定義する

3.3 Pytorch によるネットワークの構築

4. ネットワーク効果をテストする


1. ネットワークフレームワークの概要

        ネットワークの理解:

        32*32 サイズのグレースケール画像 (次のコードでは、32*32 サイズの RGB カラー画像を入力) をネットワークに入力します。最初の畳み込み C1 の後、6 チャネルおよび 28*28 サイズの特徴ベクトルになります。 S2 をダウンサンプリングすると、6 チャネル、14*14 サイズの特徴ベクトルになり、その幅と高さは 10% の損失に相当します。2 番目の畳み込み C3 の後、16 チャネル、14*14 の特徴ベクトルになります。サイズ 10*10 の特徴ベクトル。2 回目のダウンサンプリング S4 を通じて、16 チャネル、サイズ 5*5 の特徴ベクトルになり、最後の 3 つのレイヤーが完全に接続されて出力されます。

        ①Convolutious(畳み込み):入力、出力、多くのパラメータの設定があり、初期化が必要です。

        ②サブサンプリング (ダウンサンプリング): ネットワークは最大プーリング ダウンサンプリング方式を使用します。最大プーリング ダウンサンプリングの合計は、次元 2*2 サイズです。 。

       最大プーリング:最大プーリング。ウィンドウ内の最大値を出力として取得します。

        ③フル接続:初期化が必要です。

2. ガイドパッケージ

import torch  # torch基础库
import torch.nn as nn  # torch神经网络库
import torch.nn.functional as F

3. 畳み込みニューラル ネットワークを定義する

3.1 コード表示

class Net(nn.Module):
    # 初始化
    def __init__(self):
        super(Net,self).__init__()
        self.conv1 = nn.Conv2d(3,6,5)
        self.conv2 = nn.Conv2d(6,16,5)
        self.fc1 = nn.Linear(16*5*5,120)
        self.fc2 = nn.Linear(120,84)
        self.fc3 = nn.Linear(84,10)

    # 前向传播
    def forward(self,x):
        x = self.conv1(x)
        x = F.relu(x)
        x = F.max_pool2d(x,(2,2))
        x = F.max_pool2d(F.relu(self.conv2(x)),2)
        x = x.view(-1,x.size()[1:].numel())
        x = F.relu(self.fc1(x))  # 进入全连接层需要进行激活函数
        x = F.relu(self.fc2(x))
        x = self.fc3(x)  # 最后一层为输出层,要输出结果,不需要进行激活
        return x

3.2 ネットワークの目的を定義する

        ネットワークには科学的なパラメータが含まれることが望まれます。入力データのトレーニングを通じて、関連するパラメータが継続的に更新され、勾配が適切な値に低下します。その後、分類または予測のために新しい画像が入力されます。

3.3 Pytorch によるネットワークの構築

        Pytorch は通常、ネットワークを構築するときに管理用のクラスを使用します。このクラスには Net という名前を付けることができます (名前は変更可能)。通常は nn.Model クラスを継承する必要があります< /span> (Model によって定義されたメソッドを Net で直接使用することと同等)。ネットワークの構築には通常、次の 2 つの機能が含まれます。

        ①初期化関数(デフォルトパラメータを含む): このクラスのインスタンス化時に自動的に実行される部分で、ネットワークによって初期化が必要な内容が含まれます。

 def __init__(自分自身)

         A. super(Net,self).__init__(): この関数では、通常、複数の継承操作が必要です。これは、Model クラスのクラスを継承することと同等であり、 all クラスのメソッドは Net によって継承され、使用されます。

        B. nn.Conv2d(3,6,5):2 次元畳み込みカーネル関数。パラメーターは 3 つだけで、残りのパラメーターはデフォルト値を使用します。最初のパラメーターは数値です。入力チャネル数、2 番目のパラメータは出力特徴ベクトルのチャネル数、3 番目のパラメータはコンボリューション カーネル サイズです (出力式を使用して W-F+1=28、W=32、F=5 を計算します)。 ;

        出力 = \frac{W-F+2P}{S} + 1: ここで、W は幅と高さを指し、F は要求された ColorSize のサイズを指し、P はパディングを指します - 画像の外側のパディングと同様に、横切るようにします。デフォルトは 0 です。S はステップ サイズ、コンボリューション カーネルを指します。画像を横断するステップ サイズ。デフォルトは 1 です。

        C. nn.Linear(16*5*5,120): 全結合層の初期化には 2 つのパラメータ (入力フィーチャの次元数と出力フィーチャの次元数) が含まれます。特徴) サイズ)、完全接続レイヤーは特徴を平坦化し、各特徴を平坦化し、前の特徴ベクトルを直線に引き込み、完全接続層に送信する必要があります。

        ②順伝播関数: ネットワーク動作全体のロジックを完成させることに相当する前方回帰ロジックを実装する必要があります。x は入力を指します。上図の入力です。

def forward(self,x)

        A. F.relu(x):relu アクティベーション関数。アクティベーション後、ネットワークは非線形分離能力を持ちます。

        B. tensor[batch,channel,H,W]: チャネルは、RBG 3 チャネルの概念などのチャネル数を指します。H は高さを指し、 W は幅を表します。バッチはそのようなデータのバッチ数を表します。

        C. F.max_pool2d(x,(2,2)):最大プーリング ダウンサンプリング プロセス x;

        D. x.view(-1,x.size()[1:].numel()): はフラット化され、完全に接続されたレイヤーに与えられます。現在の入力データ ; 行情報はバッチ情報に基づいて自動的に生成されます。-1 を指定すると、プログラムがこの行を自動的に生成できます。なぜ 1 をカットする必要がありますか? テンソル情報の場合、バッチはカットオフされ、チャネルの乗算が行われます。 、H、W は 16*5*5 に等しい;

       注: Pytorch は テンソル (テンソルはニューラル ネットワークのメイン データ構造で使用されます) データを処理します。

4. ネットワーク効果をテストする

        ネットワークの初期化部分を印刷することに相当し、ネットワーク構成に応じて確認することもできます。

net = Net()
print(net)

        リファレンス:Pytorch 行ごとのコード紹介_bilibili_bilibili

おすすめ

転載: blog.csdn.net/m0_53096519/article/details/134033250