前提・実現したいこと
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で行っていることは分かっているのですが、バージョンなどの確認方法も分からない状態です。情報が少なく大変申し訳ありませんが、ご助言をいただけると幸いです。宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。