質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.34%

[PyTorch]Outputs,損失関数の計算を行うとnullが出力される

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,030

nam19

score 15

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%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る