前提・実現したいこと
機械学習を学び始めたばかりで、pytorchを使ってcnnモデルを作成しました。そこで損失関数にクロスエントロピー、最適化をadamに設定しました。
クロスエントロピーには標準でsoftmaxが入っているために、最後にそのままで0-1の確率値がでると学んだと思ったのですが、実際に確認するとマイナスが含まれています。
理解をし間違えていると思うのですが、なぜmodel()の結果にマイナスがあるのでしょうか
また、今回のモデルのように最終的に分類した20種それぞれである確率値を出力したい場合どのようにしたらいいのでしょうか
発生している問題
######モデル
python
1class cnn(nn.Module): 2 def __init__(self): 3 super().__init__() 4 self.conv1 = nn.Conv2d(3, 10, 3, 1) 5 self.conv2 = nn.Conv2d(10, 20, 3, 1) 6 self.fc1 = nn.Linear(20*6*6, 360) 7 self.fc2 = nn.Linear(360, 100) 8 self.fc3 = nn.Linear(100, 20) 9 10 self.criterion = nn.CrossEntropyLoss() 11 self.optimizer = torch.optim.Adam(self.parameters(), lr = 1e-3) 12 13 def forward(self, x): 14 x = F.relu(self.conv1(x)) 15 x = F.max_pool2d(x, 2, 2) 16 x = F.relu(self.conv2(x)) 17 x = F.max_pool2d(x, 2, 2) 18 x = x.view(-1, 20*6*6) 19 x = F.relu(self.fc1(x)) 20 x = F.relu(self.fc2(x)) 21 x = self.fc3(x) 22 return x
######出力
python
1 2 def train(model, data_loader): 3 model.train() 4 #省略 5 for X_train, y_train in data_loader: 6 7 outputs = model(X_train) 8 #省略 9 10 #出力結果例 11 #tensor([[ 0.0622, 0.0024, 0.1191, ..., -0.0031, -0.0571, 0.0554], 12
このoutputsを見てマイナスがでています。
試したこと
活性化関数やモデルの作り方について調べる
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。