How do you use dropout in PyTorch? パイソンでドロップアウトを使い方は何ですか?

PyTorchでは、torch.nn.Dropoutを使用してDropout操作を実行することができます。Dropoutは一般的な正則化手法であり、訓練過程でランダムにネットワーク内の一部のニューロンの出力を0にすることで過学習を防ぎます。

Dropoutを使用したサンプルコードの例は以下の通りです:

import torch
import torch.nn as nn

# 定义一个简单的神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 20)
        self.dropout = nn.Dropout(p=0.5)  # 定义一个Dropout层
        self.fc2 = nn.Linear(20, 2)

    def forward(self, x):
        x = self.fc1(x)
        x = self.dropout(x)  # 在中间层应用Dropout
        x = torch.relu(x)
        x = self.fc2(x)
        return x

# 创建一个输入数据的示例
x = torch.randn(1, 10)

# 创建网络实例
net = Net()

# 将网络设为训练模式
net.train()

# 前向传播
output = net(x)

# 输出结果
print(output)

上記の例では、まずシンプルなニューラルネットワーククラスNetを定義しました。このNetクラスには、入力層、ドロップアウト層、出力層が含まれています。forwardメソッドでは、入力データをネットワークの各層を通過させますが、途中の層ではドロップアウト操作が適用されます。その後、入力データの例としてxを作成し、ネットワークのインスタンスnetを作成します。順伝播計算を行う際には、ネットワークを訓練モードに設定する必要があります。つまり、net.train()を呼び出して、このモードでドロップアウト操作を適用します。最後に、ネットワークの出力結果を出力します。

Dropoutはトレーニング段階のみ適用され、テスト段階では適用されません。つまり、net.eval()を呼び出すと、テスト段階でより安定した出力結果を得ることができます。

bannerAds