PyTorchによるディープラーニング実装
https://www.madopro.net/entry/pytorch_mnistを参考,改変させていただいて,
PyTorchによるディープラーニング実装を行なっています.
画像データでないデータを,訓練データとテストデータの分割し,
4クラスに分類する機能を実装中に以下のエラーメッセージが発生しました。
tensorの計算ができません.
発生している問題・エラーメッセージ
outputs: tensor([[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], grad_fn=<AddmmBackward>) loss: tensor(nan, grad_fn=<NllLossBackward>)
該当のソースコード
python3
1mport sys, os 2sys.path.append(os.pardir) 3import numpy as np 4import pandas as pd 5from pandas import Series,DataFrame 6from sklearn.model_selection import train_test_split 7import pickle 8import torch 9from torch.utils.data import TensorDataset, DataLoader 10 11 12 13##訓練データとテストデータの分割 14x_train,x_test,t_train,t_test = train_test_split(setsumei_standardization,mokuteki,test_size=0.2) 15 16# tensor型に変換 17train_X = torch.Tensor(x_train) 18val_X = torch.Tensor(x_test) 19train_y = torch.LongTensor(t_train) 20val_y = torch.LongTensor(t_test) 21 22#データとラベルをセットにしたDatasetを作成 23ds_train = TensorDataset(train_X, train_y) 24ds_test = TensorDataset(val_X, val_y) 25 26 27#データセットのミニバッチサイズを指定した、Dataloaderを作成 28train_loader = DataLoader(ds_train, batch_size=5, shuffle=True) 29test_loader = DataLoader(ds_test, batch_size=5, shuffle=False) 30 31 32 33from torch.autograd import Variable 34import torch.nn as nn 35import torch.nn.functional as F 36 37class Net(nn.Module): 38 def __init__(self): 39 super().__init__() 40 self.l1 = nn.Linear(39, 50) # 入力層から隠れ層へ 41 self.l2 = nn.Linear(50, 4) # 隠れ層から出力層へ 42 43 def forward(self, x): 44 x = self.l1(x) 45 x = self.l2(x) 46 return x 47 48 49model = Net() 50 51print(model) 52 53 54 55# コスト関数と最適化手法を定義 56import torch.optim as optim 57 58criterion = nn.CrossEntropyLoss() 59optimizer = optim.SGD(model.parameters(), lr=0.01) 60 61 62for epoch in range(3): 63 running_loss = 0.0 64 for i, data in enumerate(train_loader): 65 inputs, labels = data 66 # print('inputs=',inputs) 67 # print('labels=',labels) 68 69 # Variableに変換 70 inputs, labels = Variable(inputs), Variable(labels) 71 72 # 勾配情報をリセット 73 optimizer.zero_grad() 74 75 # 順伝播 76''' 77 この部分でエラーが発生① 78''' 79 outputs = model(inputs) 80 81''' 82 この部分でエラーが発生② 83''' 84 # コスト関数を使ってロスを計算する 85 loss = criterion(outputs, labels) 86 87 # 逆伝播 88 loss.backward() 89 90 # パラメータの更新 91 optimizer.step() 92 93 # running_loss += loss.data[0] 94 running_loss += loss.item() 95 96 # この部分でエラーが発生 97 if i % 50 == 49: 98 print('outputs:',outputs) 99 print('loss:',loss) 100 print('%d %d loss: %.3f' % (epoch + 1, i + 1, running_loss / 1000)) 101 running_loss = 0.0 102 103print('Finished Training')
試したこと
nullの原因として考えられるものがわかりません.是非お願いいたします.
あなたの回答
tips
プレビュー