PyTorchでCNNを構築・学習する
nn.Conv2d、nn.MaxPool2d、nn.Linear、学習ループ、オプティマイザー、損失、精度の追跡について学習します。
「PyTorchでCNNを構築・学習する」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
画像にCNNを使う理由
畳み込みニューラルネットワークは、エッジ、テクスチャ、さらに形状や物体といった空間的なパターンを学習します。畳み込みは画像全体で重みを共有するため、CNNは効率的で、位置の変化にも対応できます。そのため、コンピュータービジョンの基盤となっています。
import torch
import torch.nn as nnnn.Module基底クラス
モデルはnn.Moduleを継承します。__init__で層を定義し、forwardでデータの流れを定義します。PyTorchはパラメーターと勾配を自動的に追跡します。
class CNN(nn.Module):
def __init__(self):
super().__init__()畳み込み層
nn.Conv2d(in_channels, out_channels, kernel_size)は、学習可能なフィルターを画像上でスライドさせ、特徴マップを生成します。最初の畳み込み層は3チャンネル(RGB)を受け取り、異なる特徴を捉えるために、より多くのチャンネルを出力します。
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)プーリング層
nn.MaxPool2dは各ウィンドウ内の最大値を残すことで、特徴マップをダウンサンプリングします。これにより空間サイズが小さくなって計算量が減り、位置の変化に対する不変性も少し加わります。
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)全結合層
畳み込みの後で特徴を平坦化し、nn.Linear層に渡してクラススコアを生成します。最後のLinear層はクラスごとに1つの値を出力します。
self.fc1 = nn.Linear(32 * 8 * 8, 128)
self.fc2 = nn.Linear(128, 10) # 10 classesforwardメソッド
forwardメソッドはデータの流れを定義します。畳み込み、ReLU、プーリングを繰り返し、最後に平坦化してLinear層に入力します。F.reluが非線形性を加えることで、ネットワークは複雑なパターンを学習できます。
import torch.nn.functional as F
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(x.size(0), -1) # flatten
x = F.relu(self.fc1(x))
return self.fc2(x)損失とオプティマイザー
分類にはCrossEntropyLossを使用します。Adamなどのオプティマイザーは、勾配を使って重みを更新します。モデルのパラメーターと学習率を渡します。
model = CNN()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)トレーニングループ:勾配をゼロにする
各ステップは、optimizer.zero_grad()で古い勾配を消去することから始めます。これを省略するとバッチをまたいで勾配が蓄積し、更新が正しく行われなくなります。
for images, labels in loader:
optimizer.zero_grad()順方向パスと損失
バッチをモデルに入力して予測を得た後、予測と正解ラベルを比較して損失を計算します。損失は、モデルの予測がどれだけ間違っているかを表す単一の値です。
outputs = model(images)
loss = criterion(outputs, labels)BackwardとStep
loss.backward()はautogradによって勾配を計算し、optimizer.step()は損失が減るように重みを少しずつ更新します。この二つで1回の学習ステップになります。
loss.backward()
optimizer.step()精度の追跡
正しい予測の数を数えて進捗を確認します。出力に対してargmaxを取り、予測クラスを取得してラベルと比較し、正解数を合計数で割ります。
preds = outputs.argmax(dim=1)
correct = (preds == labels).sum().item()
acc = correct / labels.size(0)
print("batch acc:", acc)理解度チェック
トレーニングループの理解度を確認しましょう。
復習:CNNの構築とトレーニング
nn.Moduleを継承し、nn.Conv2d、nn.MaxPool2d、nn.Linear層とforwardメソッドを使ってCNNを構築しました。zero_grad、順方向パス、loss.backward()、optimizer.step()というループでトレーニングし、argmaxで精度を追跡しました。
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 53
- レッスン
- 225
よくある質問
「PyTorchでCNNを構築・学習する」レッスンは無料ですか?
はい。「PyTorchでCNNを構築・学習する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「PyTorchでCNNを構築・学習する」で何を学びますか?
nn.Conv2d、nn.MaxPool2d、nn.Linear、学習ループ、オプティマイザー、損失、精度の追跡について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「PyTorchでCNNを構築・学習する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PyTorchのテンソルとAutograd
- カスタムデータセットとDataLoader
- PyTorchでCNNを構築・学習する
- YOLOv8による物体検出