PyTorch は、NumPy ユーザーと深層学習研究者の 2 つのグループを対象とした Python ベースの科学計算ライブラリです。柔軟で効率的な GPU アクセラレーション コンピューティングを提供し、複雑なニューラル ネットワーク アーキテクチャをサポートできる広範なツールボックスを備えています。
このブログでは、PyTorch の始め方を紹介します。まず PyTorch をインストールし、次にその基本的なテンソル、自動微分、モデル構築について調べます。最後に、簡単なニューラル ネットワークの例を使用して、これらの概念を実際の問題に適用する方法を示します。
PyTorch をインストールする
PyTorch のインストールは非常に簡単で、コマンド ラインで次のコマンドを実行するだけです。
pip install torch
PyTorch の GPU バージョンをインストールする場合は、CUDA ドライバーもインストールする必要があります。詳細については、PyTorch のドキュメントを参照してください。
テンソル
Tensor は、NumPy の多次元配列と同様に、PyTorch で最も重要なデータ型です。NumPy 配列と同様に、テンソルにはインデックス付け、スライス、ブロードキャストなど、多くの同様の操作があります。ただし、NumPy 配列とは異なり、PyTorch テンソルは GPU 高速化計算を特徴としており、ディープ ラーニング モデルでは大量の数値計算が必要になることが多いため、ディープ ラーニング アプリケーションに特に適しています。テンソルの作成と操作の例をいくつか示します。
import torch
# 创建一个大小为3x2的张量,并将其初始化为零
x = torch.zeros(3, 2)
print(x)
# 创建一个大小为2x3的随机张量
y = torch.randn(2, 3)
print(y)
# 将两个张量相加
z = x + y
print(z)
# 将张量转换为numpy数组
z_np = z.numpy()
print(z_np)
自動微分
深層学習には、逆伝播などの勾配を計算する多くの操作が含まれており、導関数の計算が必要です。PyTorch の自動微分機能は、テンソルに対するすべての演算を自動的に追跡し、勾配情報を保存するため、導関数の計算が非常に簡単になります。以下は自動微分の簡単な例です。
import torch
# 创建一个变量并将其设置为需要求导
x = torch.tensor([3.0], requires_grad=True)
# 定义一个函数
y = x**2 + 2*x + 1
# 计算y相对于x的导数
y.backward()
# 打印x的梯度
print(x.grad)
この例では、変数 x を作成し、微分されるように設定します。次に、関数 y を定義し、x に関する y の導関数を計算します。最後に、x の勾配を出力します。y の導関数は 2x + 2 (この場合、x は 3 に等しい) であるため、プログラムは 6.0 を出力します。したがって、y の導関数は 8 に等しくなります。
モデル構築
PyTorch には、あらゆる種類とサイズのニューラル ネットワークを簡単に構築できる幅広いニューラル ネットワーク モジュールが含まれています。これらのモジュールを使用すると、ニューラル ネットワークをすばやく定義してトレーニングできます。以下は、単一の隠れ層を持つ完全に接続されたニューラル ネットワークの例です。
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 创建一个模型实例
net = Net()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 训练模型
for i in range(100):
optimizer.zero_grad()
input = torch.randn(3, 10)
output = net(input)
target = torch.randn(3, 1)
loss = criterion(output, target)
loss.backward()
optimizer.step()
この例では、単一の隠れ層を持つニューラル ネットワークを作成します。二乗誤差を損失関数として使用し、確率的勾配降下オプティマイザを使用して最適化します。次に、複数回の反復を通じてモデルをトレーニングします。
結論は
PyTorch は、柔軟で効率的な GPU アクセラレーション コンピューティングを提供する強力で使いやすいディープ ラーニング フレームワークであり、複雑なニューラル ネットワーク アーキテクチャをサポートできる広範なツールボックスを備えています。このブログ投稿では、PyTorch の基本的なデータ構造、テンソル、自動微分、モデル構築について紹介しました。これらの概念を組み合わせることで、あらゆる種類とサイズのニューラル ネットワークを簡単に構築してトレーニングできます。シンプルでありながら強力な深層学習フレームワークを探している場合は、PyTorch が最適なツールになる可能性があります。