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>)
該当のソースコード
mport sys, os
sys.path.append(os.pardir)
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from sklearn.model_selection import train_test_split
import pickle
import torch
from torch.utils.data import TensorDataset, DataLoader
##訓練データとテストデータの分割
x_train,x_test,t_train,t_test = train_test_split(setsumei_standardization,mokuteki,test_size=0.2)
# tensor型に変換
train_X = torch.Tensor(x_train)
val_X = torch.Tensor(x_test)
train_y = torch.LongTensor(t_train)
val_y = torch.LongTensor(t_test)
#データとラベルをセットにしたDatasetを作成
ds_train = TensorDataset(train_X, train_y)
ds_test = TensorDataset(val_X, val_y)
#データセットのミニバッチサイズを指定した、Dataloaderを作成
train_loader = DataLoader(ds_train, batch_size=5, shuffle=True)
test_loader = DataLoader(ds_test, batch_size=5, shuffle=False)
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
self.l1 = nn.Linear(39, 50) # 入力層から隠れ層へ
self.l2 = nn.Linear(50, 4) # 隠れ層から出力層へ
def forward(self, x):
x = self.l1(x)
x = self.l2(x)
return x
model = Net()
print(model)
# コスト関数と最適化手法を定義
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
for epoch in range(3):
running_loss = 0.0
for i, data in enumerate(train_loader):
inputs, labels = data
# print('inputs=',inputs)
# print('labels=',labels)
# Variableに変換
inputs, labels = Variable(inputs), Variable(labels)
# 勾配情報をリセット
optimizer.zero_grad()
# 順伝播
'''
この部分でエラーが発生①
'''
outputs = model(inputs)
'''
この部分でエラーが発生②
'''
# コスト関数を使ってロスを計算する
loss = criterion(outputs, labels)
# 逆伝播
loss.backward()
# パラメータの更新
optimizer.step()
# running_loss += loss.data[0]
running_loss += loss.item()
# この部分でエラーが発生
if i % 50 == 49:
print('outputs:',outputs)
print('loss:',loss)
print('%d %d loss: %.3f' % (epoch + 1, i + 1, running_loss / 1000))
running_loss = 0.0
print('Finished Training')
試したこと
nullの原因として考えられるものがわかりません.是非お願いいたします.
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる