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

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

新規登録して質問してみよう
ただいま回答率
85.50%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3400閲覧

PyTorch / Terminalでコードを実行するもフリーズする

kay_ventris4

総合スコア269

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/22 07:54

編集2020/10/22 08:13

#問題
イメージ説明
PyTorchを用いたMNISTの文字画像認識のプログラムを以下の様に組み立てました。そのコードをTerminalで実行しようとするも、なかなかプログラムの結果が上の様な状態のまま、何十分と待っても待っても表示がありません。似たものとしてワインの分類を深層学習を使って解析するプログラムを同様に作った時は数秒でプログラムが実行されたので、何がいけなくて動いてくれないのだろう…といった状態に陥っています。随分と曖昧な質問ではありますが、どこかお力添え頂けるところが御座いましたら、宜しくお願い申し上げます。

#該当コード

Python

1import torch 2from torch.autograd import Variable 3import torch.nn 4import torch.nn.functional 5import torch.optim 6from torch.utils.data import TensorDataset, DataLoader 7 8from sklearn import datasets 9from sklearn.datasets import load_digits, fetch_openml 10from sklearn.model_selection import train_test_split 11 12import pandas as pd 13 14from matplotlib import pyplot as plt 15from matplotlib import cm 16 17import numpy as np 18 19mnist=datasets.fetch_openml('mnist_784', version=1) 20mnist_data=mnist.data/255 21mnist_pre_labels=mnist.target 22mnist_labels=mnist_pre_labels.astype(np.float64) 23 24train_X, test_X, train_Y, test_Y=train_test_split(mnist_data, mnist_labels, train_size=5000, test_size=500) 25train_X=torch.from_numpy(train_X).float() 26train_Y=torch.from_numpy(train_Y).long() 27test_X=torch.from_numpy(test_X).float() 28test_Y=torch.from_numpy(test_Y).long() 29 30train=TensorDataset(train_X, train_Y) 31batches=DataLoader(train, batch_size=16, shuffle=True) 32 33class Net(torch.nn.Module): 34 def __init__(self): 35 super(Net, self).__init__() 36 self.fc1=torch.nn.Linear(784,256) 37 self.fc2=torch.nn.Linear(256,256) 38 self.fc3=torch.nn.Linear(256,256) 39 self.fc4=torch.nn.Linear(256,128) 40 self.fc5=torch.nn.Linear(128,128) 41 self.fc6=torch.nn.Linear(128,10) 42 43 def forward(self, x): 44 x=torch.nn.functional.relu(self.fc1(x)) 45 x=torch.nn.functional.relu(self.fc2(x)) 46 x=torch.nn.functional.relu(self.fc3(x)) 47 x=torch.nn.functional.relu(self.fc4(x)) 48 x=torch.nn.functional.relu(self.fc5(x)) 49 x=torch.nn.functional.dropout(x, training=self.training) 50 x=self.fc6(x) 51 return torch.nn.functional.log_softmax(x, dim=1) 52 53net=Net() 54 55CEL=torch.nn.CrossEntropyLoss() 56optimiser=torch.optim.SGD(net.parameters(), lr=0.01) 57for epoch in range(1000): 58 total_loss=0 59 for train_x, train_y in batches: 60 train_x, train_y=Variable(train_X), Variable(train_Y) 61 optimiser.zero_grad() 62 output=net(train_x) 63 loss=CEL(output, train_y) 64 loss.backward() 65 optimiser.step() 66 total_loss+=loss.data.item() 67 if (epoch+1)%100==0: 68 print(epoch+1, total_loss)

#環境
WiFiには正常に接続されています。
Python 3.8.3
Model: MacBook Pro13
Version: macOS 10.15.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2020/10/22 08:00

実行はされているけど処理に時間がかかっているだけなのか、実行がされていないのか切り分けたほうがいいと思います。 for epoch in range(1000): の中に適当な文字を print() で出力すれば処理中なのかどうか判断できると思います。
tiitoi

2020/10/22 08:27 編集

for epoch in range(1000): の次の行に print(epoch) を入れてそれでなにも表示されませんか?
kay_ventris4

2020/10/22 10:36

いえ、print(epoch)では0~999までの数字が表示されました。しかし、上のコードを実行して再び1時間置いてみましたが、pcが熱くなる意外何も起きない状態が続いています。
tiitoi

2020/10/22 10:46

> いえ、print(epoch)では0~999までの数字が表示されました 「0~999までの数字が表示された」「pcが熱くなる」という状況から実行はされているのではないでしょうか? > 何も起きない状態が続いています。 上のコードを実行してどうなるのを期待しているのでしょうか? for epoch in range(1000): の次の行に print(epoch) を入れると1, 2, ... と表示されたなら問題なく動いてます。
kay_ventris4

2020/10/22 11:34

予定では、100回ごとの学習回数に対しその時点での累積誤差が表示される予定です。実行がどんな形であれ完了したとすると、Terminal上では(base) KaynoMacBook-Pro:Wine ***$と新たに出てくるはずなのですが、今回はそれが出てこず実行中という様な状態で固まってしまいます。半日置かないといけない様なとてつもなく重い量の学習(1000回)をしているとも思えず、この程度のノード数(7つ)と学習データ(MNISTデータ70000件)で途方もない時間がかかるともまた思えなかったので…
tiitoi

2020/10/22 12:28 編集

if (epoch+1)%100==0: の行を消して毎エポック出力が出るようにしてはどうでしょうか。 > 途方もない時間がかかるともまた思えなかったので… 全結合ネットワークでパラメータ数が多いことと、Mac ということは、GPU ではなく CPU 実行ということで、ディープラーニングは CPU 実行の場合は非常に時間がかかります。MNISTはワインデータセットと比較して、次元数が60倍、サンプル数が350倍なのでワインデータセットよりより規模が大きいデータセットです。 最初の出力が出るまで、MNIST6万毎 x 100エポック / バッチサイズ16 = 37500イテレーション回さないといけないので、そこに至るまでに非常に時間がかかっているものと思われます。
tiitoi

2020/10/22 12:38 編集

手元で質問のコードを実行したら、Corei7 6700K 4.00GHz で1エポックあたり12秒かかりました。なので、最初の出力が表示されるまでに最低20分はかかることになります。 CPU の性能がそれ未満ならもっと時間がかかることになります。
kay_ventris4

2020/10/22 12:59

epochを1回毎での表示に変更しました。 こちらの環境だと、30分の放置で出来たのが36回分の学習でした。1時間の実行じゃ100回も出来るはずありませんでした。お手数おかけしまして、申し訳ございませんでした。
kay_ventris4

2020/10/22 13:24

Google Colabolatoryっていつ使うのだろうと思ったのですが、こっちじゃないとGPUが実装されていなかったのですね!勉強になりました。有難う御座いました。
guest

回答1

0

自己解決

100回の学習が終了するまでに、推測でおよそ1.5時間かかることがわかりました。一晩置くくらいのことでないと、1000件の学習は終わりそうにありません。

投稿2020/10/22 13:00

kay_ventris4

総合スコア269

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問