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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

PyTorch

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

Python

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

Q&A

2回答

1690閲覧

Pytorchを用いたニューラルネットワークによる分類

退会済みユーザー

退会済みユーザー

総合スコア0

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

PyTorch

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

Python

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

0グッド

0クリップ

投稿2021/11/14 08:06

編集2021/11/14 08:48

前提・実現したいこと

Pytorch初心者です。ニューラルネットワークを用いて入力したデータを1と0に分類し、その入力した値と一緒に出力する、というプログラムを作成したいと考えています。

現在入力した値から0と1に分類し出力するところまでは作成したのですが、エラーが出てしまいどのように対処すれば良いのかわからない状態です。

Anacondaにpytorch19という環境を作っており、そこで実行を行いました。また、今回作成したニューラルネットワークのプログラムNN_classification.pyは Tokyo/PycharmProjectsに入っていて、環境のpytorch19もこのTokyoファイル内のanaconda3に入っています。
イメージ説明

発生した問題、エラーメッセージ

Pycharm Community Edition にて作成したニューラルネットワークのプログラムを実行したところ、以下のようなエラーが出てしまいます。

Python

1C:\Users\Tokyo\anaconda3\envs\pytorch19\python.exe C:/Users/Tokyo/PycharmProjects/Su/NN_classification.py 2Traceback (most recent call last): 3 File "C:/Users/Tokyo/PycharmProjects/Su/NN_classification.py", line 2, in <module> 4 import torch 5 File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\__init__.py", line 629, in <module> 6 from .functional import * # noqa: F403 7 File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\functional.py", line 6, in <module> 8 import torch.nn.functional as F 9 File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\nn\__init__.py", line 50 10 11 ^ 12SyntaxError: unexpected EOF while parsing 13 14Process finished with exit code 1

ターミナルにて以下のコマンドを入力してもこのようなエラーが出る状態です。

Pytorch

1 2PS C:\Users\Tokyo\PycharmProjects\Su> import torch 3import : 用語 'import' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パ 4スが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 5発生場所 行:1 文字:1 6+ import torch 7+ ~~~~~~ 8 + CategoryInfo : ObjectNotFound: (import:String) [], CommandNotFoundException 9 + FullyQualifiedErrorId : CommandNotFoundException 10 11PS C:\Users\Tokyo\PycharmProjects\SuNN> print(torch.__version__) 12torch.__version__ : 用語 'torch.__version__' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述され 13ていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 14発生場所 行:1 文字:7 15+ print(torch.__version__) 16+ ~~~~~~~~~~~~~~~~~ 17 + CategoryInfo : ObjectNotFound: (torch.__version__:String) [], CommandNotFoundException 18 + FullyQualifiedErrorId : CommandNotFoundException 19

該当のソースコード

Pytorch

1 2import time 3import torch 4import pandas as pd 5import numpy as np 6import csv 7 8# データサイズ(I行J列) 9DATA_SIZE_I = 11 10DATA_SIZE_J = 11 11 12# ファイルパス 13TRAIN_CSV_PATH = r"C:\Users\Tokyo.vscode\su\train_data_noise.csv" 14VALIDATION_CSV_PATH = r"C:\Users\Tokyo.vscode\su\validation_data_noise.csv" 15TEST_CSV_PATH = r"C:\Users\Tokyo.vscode\su\test_data_noise.csv" 16OUTPUT_CSV_PATH = 'result_noise.csv' 17LOSS_CSV_PATH = '.result_losses.csv' 18 19# ハイパーパラメータ 20EPOCHS = 10 21BATCH = 100 22lr = 1.0e-4 23NODE_NUM = DATA_SIZE_I*DATA_SIZE_J 24 25 26class BGS(torch.utils.data.Dataset): 27 28 def __init__(self, csv_path): 29 df = pd.read_csv(csv_path, header=0, dtype='float') 30 data = df.iloc[:, 1:].values 31 data = data_transform(data) 32 self.data = torch.tensor(data, dtype=torch.float32) 33 labels = df.iloc[:, 0].values 34 self.labels = torch.tensor(labels, dtype=torch.long) 35 36 def __len__(self): 37 return len(self.data) 38 39 def __getitem__(self, index): 40 return self.data[index], self.labels[index] 41 42 43class Net(torch.nn.Module): 44 def __init__(self): 45 super(Net, self).__init__() 46 self.fc1 = torch.nn.Linear(DATA_SIZE_I*DATA_SIZE_J, NODE_NUM*5) 47 self.fc2 = torch.nn.Linear(NODE_NUM*5, NODE_NUM) 48 self.fc3 = torch.nn.Linear(NODE_NUM, 2) 49 50 def forward(self, x): 51 x = self.fc1(x) 52 x = torch.nn.functional.relu(x) 53 x = self.fc2(x) 54 x = torch.nn.functional.relu(x) 55 x = self.fc3(x) 56 x = torch.nn.functional.softmax(x, dim=1) 57 return x 58 59 60def data_transform(x): 61 return (x - np.mean(x, axis=1, keepdims=True)) / np.std(x, axis=1, ddof=1, keepdims=True) 62 63 64# 学習用関数 65def train(train_loader, model, optimizer, criterion, device, num_epochs, epoch, losses): 66 model.train() # モデルを学習モードに変更 67 train_loss = 0 68 train_acc = 0 69 i = 0 70 for i, (data, target) in enumerate(train_loader): 71 data, target = data.to(device), target.to(device) 72 optimizer.zero_grad() # 勾配を初期化 73 output = model(data) # 順伝播の計算 74 loss = criterion(output, target) # 誤差を計算 75 train_loss += float(loss.item()) 76 preds = torch.max(output, 1)[1] 77 train_acc += torch.sum(preds == target).item() / len(target) 78 loss.backward() # 誤差を逆伝播させる 79 optimizer.step() # 重みを更新する 80 losses.append(train_loss) 81 print('#train_epoch: [{}/{}], Loss: {}, acc: {}'.format(epoch + 1, num_epochs, train_loss / (i+1), train_acc / (i+1)), end=' ') 82 83 84def validation(validation_loader, model, criterion, device, num_epochs, epoch, losses): 85 model.eval() # モデルを推論モードに変更 86 val_loss = 0 87 val_acc = 0 88 i = 0 89 with torch.no_grad(): 90 for i, (data, target) in enumerate(validation_loader): 91 data, target = data.to(device), target.to(device) 92 output = model(data) 93 loss = criterion(output, target) # 誤差を計算 94 val_loss += float(loss.item()) 95 preds = torch.max(output, 1)[1] 96 val_acc += torch.sum(preds == target).item() / len(target) 97 losses.append(val_loss) 98 print('#val_epoch: [{}/{}], Loss: {}, acc: {}'.format(epoch + 1, num_epochs, val_loss / (i+1), val_acc / (i+1))) 99 100 101def test(test_loader, model, device): 102 model.eval() # モデルを推論モードに変更 103 with torch.no_grad(): 104 for i, (data, target) in enumerate(test_loader): 105 data, target = data.to(device), target.to(device) 106 output = model(data) 107 preds = torch.max(output, 1)[1] 108 accuracy = torch.sum(preds == target).item() / len(target) 109 target, preds = target.cpu().numpy(), preds.cpu().numpy() 110 target, preds = pd.DataFrame(target), pd.DataFrame(preds) 111 df = pd.concat([target, preds], axis=1) 112 with open(OUTPUT_CSV_PATH, 'w', newline='') as file: 113 writer = csv.writer(file) 114 writer.writerow(['accuracy', '{}'.format(accuracy)]) 115 writer.writerow(['labels', 'predict']) 116 df.to_csv(OUTPUT_CSV_PATH, mode='a', header=False, index=False) 117 118 119def main(): 120 # 1. GPUの設定(PyTorchでは明示的に指定する必要がある) 121 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') 122 print(device) 123 124 # 3. データセットを取得 125 train_data = BGS(TRAIN_CSV_PATH) 126 validation_data = BGS(VALIDATION_CSV_PATH) 127 test_data = BGS(TEST_CSV_PATH) 128 129 # 4. DataLoaderの作成 130 train_loader = torch.utils.data.DataLoader(train_data, batch_size=BATCH, shuffle=True, num_workers=2) 131 validation_loader = torch.utils.data.DataLoader(validation_data, batch_size=BATCH, shuffle=False) 132 test_loader = torch.utils.data.DataLoader(test_data, batch_size=test_data.__len__(), shuffle=False) 133 134 # 5. モデル作成 135 torch.manual_seed(0) 136 model = Net().to(device) 137 138 # 6. 損失関数を定義 139 criterion = torch.nn.CrossEntropyLoss() 140 141 # 7. 最適化手法を定義 142 optimizer = torch.optim.Adam(model.parameters(), lr=lr) 143 144 # 8. 出力用ファイル作成 145 train_losses = [] 146 # train_accuracy = [] 147 validation_losses = [] 148 # validation_accuracy = [] 149 150 # 9. 学習(エポック終了時点ごとにテスト用データで評価) 151 start = time.time() 152 for epoch in range(EPOCHS): 153 train(train_loader, model, optimizer, criterion, device, EPOCHS, epoch, train_losses) 154 validation(validation_loader, model, criterion, device, EPOCHS, epoch, validation_losses) 155 test(test_loader, model, device) 156 process_time = time.time() - start 157 print("process_time:{0}".format(process_time) + "[sec]") 158 # train_losses, validation_losses = pd.DataFrame(train_losses), pd.DataFrame(validation_losses) 159 # df_losses = pd.concat([train_losses/1000, validation_losses/100], axis=1) 160 # df_losses.to_csv(LOSS_CSV_PATH, mode='a', header=False, index=False) 161 162 163if __name__ == '__main__': 164 main() 165

エラーがありそうなコードも以下に載せさせていただきます。

Pytorch

1# C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\__init__.py 2 3. 4. 5. 6 7################################################################################ 8# Import interface functions defined in Python 9################################################################################ 10 11# needs to be after the above ATen bindings so we can overwrite from Python side 12from .functional import * # noqa: F403 13 14. 15. 16. 17

Pytorch

1# C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\functional.py 2 3from typing import ( 4 Tuple, Optional, Union, Any, Sequence, TYPE_CHECKING 5) 6 7import torch 8import torch.nn.functional as F 9from torch.types import _size 10from ._lowrank import svd_lowrank, pca_lowrank 11from .overrides import ( 12 has_torch_function, has_torch_function_unary, has_torch_function_variadic, 13 handle_torch_function) 14from ._jit_internal import boolean_dispatch, List 15from ._jit_internal import _overload as overload 16from torch._autograd_functions import _LU 17 18. 19. 20.

Pytorch

1# C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\nn\__init__.py 2 3. 4. 5 6def functional(): 7

行ったこと、補足

Pythonを起動し、ニューラルネットワークのプログラムでtorch.nn.functionalをそのまま書いていたため as F の部分を削除し import torch を入力したところ、以下のようなエラーが出ました。

Pytorch

1 2>>> import torch 3Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\__init__.py", line 229, in <module> 6 __all__ += [name for name in dir(_C) 7NameError: name '_C' is not defined 8

anacondaで行っていることは分かっているのですが、バージョンなどの確認方法も分からない状態です。情報が少なく大変申し訳ありませんが、ご助言をいただけると幸いです。宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

すみません、解決しました。
def functional()の宣言が余計となっていました。ありがとうございました。

投稿2021/11/14 09:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

SyntaxError: unexpected EOF while parsing
が出るということは、Pytorchのインストールに失敗しているか、インストール後に壊れたかのどちらかです。
どのようにインストールしたのかがわかれば、もう少し分かるかもしれません。

import : 用語 'import' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パ
スが含まれている場合はそのパスが正しいことを確認してから、再試行してください。

は、Pythonの中で実行すべきものを、PowerShellで実行したから起きる問題です。Pythonを起動して>>>が表示された状態で実行してみてください。

投稿2021/11/14 08:14

ppaul

総合スコア24668

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

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

退会済みユーザー

退会済みユーザー

2021/11/14 08:41

ご回答ありがとうございます。 上記と同一のディレクトリからpythonを起動し同じコマンドを入力したのですが、似たような結果が出力されました。 >>> import torch Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\__init__.py", line 629, in <module> from .functional import * # noqa: F403 File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\functional.py", line 6, in <module> import torch.nn.functional as F File "C:\Users\Tokyo\anaconda3\envs\pytorch19\lib\site-packages\torch\nn\__init__.py", line 50 ^ SyntaxError: unexpected EOF while parsing これらのエラーが出てしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問