ホームページ  >  記事  >  テクノロジー周辺機器  >  PyTorch を使用して畳み込みニューラル ネットワークを構築する基本手順

PyTorch を使用して畳み込みニューラル ネットワークを構築する基本手順

PHPz
PHPz転載
2024-01-24 09:21:10473ブラウズ

PyTorch を使用して畳み込みニューラル ネットワークを構築する基本手順

畳み込みニューラル ネットワーク (CNN) は、コンピューター ビジョン タスクで広く使用されている深層学習モデルです。完全に接続されたニューラル ネットワークと比較して、CNN はパラメーターが少なく、より強力な特徴抽出機能を備えており、画像分類、ターゲット検出、画像セグメンテーションなどのタスクで優れたパフォーマンスを発揮します。以下では、基本的な CNN モデルの構築方法を紹介します。

畳み込みニューラル ネットワーク (CNN) は、複数の畳み込み層、プーリング層、活性化関数、完全接続層を備えた深層学習モデルです。畳み込み層は CNN のコア コンポーネントであり、入力画像の特徴を抽出するために使用されます。プーリング層は、特徴マップのサイズを削減し、画像の主な特徴を維持できます。活性化関数は非線形変換を導入し、モデルの表現力を高めます。全結合層は、特徴マップを出力結果に変換します。これらのコンポーネントを組み合わせることで、基本的な畳み込みニューラル ネットワークを構築できます。 CNN は、画像分類、ターゲット検出、画像生成などのタスクで優れたパフォーマンスを発揮し、コンピューター ビジョンの分野で広く使用されています。

第二に、CNN の構造では、各畳み込み層とプーリング層のパラメーターを決定する必要があります。これらのパラメーターには、コンボリューション カーネルのサイズ、コンボリューション カーネルの数、プーリング カーネルのサイズが含まれます。同時に、入力データの次元と出力データの次元を決定することも必要です。これらのパラメータの選択は通常、実験的に決定する必要があります。一般的なアプローチは、最初に単純な CNN モデルを構築し、次に最適なパフォーマンスが達成されるまでパラメーターを徐々に調整することです。

CNN モデルをトレーニングするときは、損失関数とオプティマイザーを設定する必要があります。通常、クロスエントロピー損失関数が広く使用されていますが、確率的勾配降下法オプティマイザーも一般的な選択肢です。トレーニング プロセスでは、トレーニング データをバッチで CNN モデルに入力し、損失関数に基づいて損失値を計算します。次に、オプティマイザーを使用してモデル パラメーターを更新し、損失値を削減します。通常、トレーニングを完了するには複数の反復が必要で、所定のトレーニング エポック数に達するか特定のパフォーマンス基準が満たされるまで、反復ごとにトレーニング データがモデルにバッチ処理されます。

以下は、PyTorch を使用して基本的な畳み込みニューラル ネットワーク (CNN) を構築するコード例です。

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5) # 3个输入通道,6个输出通道,5x5的卷积核
        self.pool = nn.MaxPool2d(2, 2) # 2x2的最大池化层
        self.conv2 = nn.Conv2d(6, 16, 5) # 6个输入通道,16个输出通道,5x5的卷积核
        self.fc1 = nn.Linear(16 * 5 * 5, 120) # 全连接层1,输入大小为16x5x5,输出大小为120
        self.fc2 = nn.Linear(120, 84) # 全连接层2,输入大小为120,输出大小为84
        self.fc3 = nn.Linear(84, 10) # 全连接层3,输入大小为84,输出大小为10(10个类别)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x))) # 第一层卷积+激活函数+池化
        x = self.pool(torch.relu(self.conv2(x))) # 第二层卷积+激活函数+池化
        x = x.view(-1, 16 * 5 * 5) # 将特征图展开成一维向量
        x = torch.relu(self.fc1(x)) # 第一层全连接+激活函数
        x = torch.relu(self.fc2(x)) # 第二层全连接+激活函数
        x = self.fc3(x) # 第三层全连接
        return x

上記のコードは、nn から継承された Net という名前のクラスを定義します。 .モジュール。このクラスには、畳み込み層、プーリング層、全結合層に加えて、モデルの前方伝播プロセスを定義するために使用される forward メソッドが含まれています。 __init__ メソッドでは、2 つの畳み込み層、3 つの全結合層、およびプーリング層を定義します。フォワード法では、これらの層を順番に呼び出し、ReLU 活性化関数を使用して畳み込み層と全結合層の出力に対して非線形変換を実行します。最後に、最後に完全に接続された層の出力をモデルの予測として返します。さらに、この CNN モデルの入力は、(batch_size、channels、height、width) の形状を持つ 4 次元テンソルである必要があります。ここで、batch_size は入力データのバッチ サイズ、channels は入力データのチャネル数、height と width はそれぞれ入力データの高さと幅です。この例では、入力データはチャネル数が 3 の RGB カラー イメージである必要があります。

以上がPyTorch を使用して畳み込みニューラル ネットワークを構築する基本手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は163.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。