pythonでpytorchを用い音声の機械学習をおこなおうと考えておりました。 ソースコードを実行する際に、正しくモジュールをimportできない旨がエラーメッセージで表示されたのですが、解決策がわかりません。教えていただけるとありがたいです。 ### 出力結果及び・エラーメッセージ runfile('C:/Users/j20703dn/Desktop/AELAB/graduationresearch/work/python_asr-main/04dnn_hmm/my_dataset.py', wdir='C:/Users/j20703dn/Desktop/AELAB/graduationresearch/work/python_asr-main/04dnn_hmm') Reloaded modules: hmmfunc Traceback (most recent call last): File "C:\Users\j20703dn\Desktop\AELAB\graduationresearch\work\python_asr-main\04dnn_hmm\my_dataset.py", line 8, in <module> from torch.utils.data import Dataset File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\utils\__init__.py", line 4, in <module> from .throughput_benchmark import ThroughputBenchmark File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\utils\throughput_benchmark.py", line 2, in <module> import torch._C ImportError: DLL load failed while importing _C: 指定されたモジュールが見つかりません。 ```### 該当のソースコード ```python from torch.utils.data import Dataset 数値演算用モジュール(numpy)をインポート import numpy as np sysモジュールをインポート import sys class SequenceDataset(Dataset): ''' ミニバッチデータを作成するクラス torch.utils.data.Datasetクラスを継承し, 以下の関数を定義する __len__: 総サンプル数を出力する関数 __getitem__: 1サンプルのデータを出力する関数 feat_scp: 特徴量リストファイル label_scp: ラベルファイル feat_mean: 特徴量の平均値ベクトル feat_std: 特徴量の次元毎の標準偏差を並べたベクトル pad_index: バッチ化の際にフレーム数を合わせる ためにpaddingする整数値 splice: 前後(splice)フレームを特徴量を結合する splice=1とすると,前後1フレーム分結合 するので次元数は3倍になる. splice=0の場合は何もしない ''' def __init__(self, feat_scp, label_scp, feat_mean, feat_std, pad_index, splice=0): 発話の数 self.num_utts = 0 各発話のID self.id_list = [] 各発話の特徴量ファイルへのパスを記したリスト self.feat_list = [] 各発話の特徴量フレーム数を記したリスト self.feat_len_list = [] 特徴量の平均値ベクトル self.feat_mean = feat_mean 特徴量の標準偏差ベクトル self.feat_std = feat_std 標準偏差のフロアリング (0で割ることが発生しないようにするため) self.feat_std[self.feat_std<1E-10] = 1E-10 特徴量の次元数 self.feat_dim = \ np.size(self.feat_mean) 各発話のラベル self.label_list = [] 各発話のラベルの長さを記したリスト self.label_len_list = [] フレーム数の最大値 self.max_feat_len = 0 ラベル長の最大値 self.max_label_len = 0 フレーム埋めに用いる整数値 self.pad_index = pad_index splice:前後nフレームの特徴量を結合 self.splice = splice 特徴量リスト,ラベルを1行ずつ 読み込みながら情報を取得する with open(feat_scp, mode='r') as file_f, \ open(label_scp, mode='r') as file_l: for (line_feats, line_label) in zip(file_f, file_l): 各行をスペースで区切り, リスト型の変数にする parts_feats = line_feats.split() parts_label = line_label.split() 発話ID(partsの0番目の要素)が特徴量と ラベルで一致していなければエラー if parts_feats[0] != parts_label[0]: sys.stderr.write('IDs of feat and '\ 'label do not match.\n') exit(1) 発話IDをリストに追加 self.id_list.append(parts_feats[0]) 特徴量ファイルのパスをリストに追加 self.feat_list.append(parts_feats[1]) フレーム数をリストに追加 feat_len = np.int64(parts_feats[2]) self.feat_len_list.append(feat_len) ラベル(番号で記載)をint型の numpy arrayに変換 label = np.int64(parts_label[1:]) ラベルリストに追加 self.label_list.append(label) ラベルの長さを追加 self.label_len_list.append(len(label)) 発話数をカウント self.num_utts += 1 フレーム数の最大値を得る self.max_feat_len = \ np.max(self.feat_len_list) ラベル長の最大値を得る self.max_label_len = \ np.max(self.label_len_list) ラベルデータの長さを最大フレーム長に 合わせるため,pad_indexの値で埋める for n in range(self.num_utts): 埋めるフレームの数 = 最大フレーム数 - 自分のフレーム数 pad_len = self.max_label_len \ - self.label_len_list[n] pad_indexの値で埋める self.label_list[n] = \ np.pad(self.label_list[n], [0, pad_len], mode='constant', constant_values=self.pad_index) def __len__(self): ''' 学習データの総サンプル数を返す関数 本実装では発話単位でバッチを作成するため, 総サンプル数=発話数である. ''' return self.num_utts def __getitem__(self, idx): ''' サンプルデータを返す関数 本実装では発話単位でバッチを作成するため, idx=発話番号である. ''' 特徴量系列のフレーム数 feat_len = self.feat_len_list[idx] ラベルの長さ label_len = self.label_len_list[idx] 特徴量データを特徴量ファイルから読み込む feat = np.fromfile(self.feat_list[idx], dtype=np.float32) フレーム数 x 次元数の配列に変形 feat = feat.reshape(-1, self.feat_dim) 平均と標準偏差を使って正規化(標準化)を行う feat = (feat - self.feat_mean) / self.feat_std splicing: 前後 n フレームの特徴量を結合する org_feat = feat.copy() for n in range(-self.splice, self.splice+1): 元々の特徴量を n フレームずらす tmp = np.roll(org_feat, n, axis=0) if n < 0: 前にずらした場合は 終端nフレームを0にする tmp[n:] = 0 elif n > 0: 後ろにずらした場合は 始端nフレームを0にする tmp[:n] = 0 else: continue ずらした特徴量を次元方向に 結合する feat = np.hstack([feat,tmp]) 特徴量データのフレーム数を最大フレーム数に 合わせるため,0で埋める pad_len = self.max_feat_len - feat_len feat = np.pad(feat, [(0, pad_len), (0, 0)], mode='constant', constant_values=0) ラベル label = self.label_list[idx] 発話ID utt_id = self.id_list[idx] 特徴量,ラベル,フレーム数, ラベル長,発話IDを返す return (feat, label, feat_len, label_len, utt_id)
試したこと
pipを用いたpytorchのアンインストール及び再インストール
補足情報(FW/ツールのバージョンなど)
エディタはspyderを用いており、OSはwindowsを使用しております。
このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
コメントありがとうございます。修正させていただきました。
自分で「torch」という名前のディレクトリとか、ファイル名が「torch.py」というファイルとか、作ってませんか?
いや、作ってはおりません。
コードの先頭に下記を追加したら、何て表示されますか?
import torch
print(torch.__path__)
print(torch.__file__)
_NamespacePath(['C:\\Users\\ユーザ名\\anaconda3\\lib\\site-packages\\torch'])
None
このように表示されます。
あれ?
C:\Users\j20703dn\anaconda3\lib\site-packages\torch
に「__init__.py」というファイル有りますか?
存在しています。
import torch
print(torch.__path__)
print(torch.__file__)
の結果は、下記のようになるはずなのです
['C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\torch’]
C:\Users\j20703dn\anaconda3\lib\site-packages\torch\__init__.py
(一つ目には、「_NamespacePath()」は付きません)
これはpassなどの問題になるのでしょうか。それともインストール時点での問題になるのでしょうか。
from torch.utils.data import Dataset
で、
C:\Users\j20703dn\anaconda3\lib\site-packages\torch\utils\__init__.py
を参照してるので、パスは大丈夫だと思うのですが、念の為に下記を教えてください
> pipを用いたpytorchのアンインストール及び再インストール
と同じ状態で
pip show torch
を実行して、「Location:」で始まる行に何て書かれてるか
> 正しくモジュールをimportできない旨がエラーメッセージで表示された
と同じ状態でPythonで下記コードを実行した場合の結果
import sys
import pprint
pprint.pprint(sys.path)
pip show torchの実行結果は下記のとおりです。
Name: torch
Version: 1.9.1+cu102
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: c:\users\j20703dn\anaconda3\lib\site-packages
Requires: typing-extensions
Required-by: torchvision, torchaudio
また、import sys以下の実行結果も下記の通りになります。
['C:\\Users\\j20703dn\\anaconda3\\python38.zip',
'C:\\Users\\j20703dn\\anaconda3\\DLLs',
'C:\\Users\\j20703dn\\anaconda3\\lib',
'C:\\Users\\j20703dn\\anaconda3',
'',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\locket-0.2.1-py3.8.egg',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\win32',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\win32\\lib',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\Pythonwin',
'C:\\Users\\j20703dn\\anaconda3\\lib\\site-packages\\IPython\\extensions',
'C:\\Users\\j20703dn\\.ipython']
大丈夫だと思います
何でそれで、
import torch
で
C:\Users\j20703dn\anaconda3\lib\site-packages\torch\__init__.py
が読み込まれないのかが謎です
pipでのインストールは、
https://pytorch.org/get-started/locally/
に書かれてる手順で、普通にしましたよね?
他のPythonに入れたのを、「torch」ディレクトリごと持ってきた、とかはしてませんよね?
あと、Jupyterを起動した時に、コマンドプロンプトも起動してると思うのですが、Jupyterで質問のエラーが出た時に、そのコマンドプロンプトには何か他に表示されてませんでしょうか?
pipでのインストールはしっかりリンク先の方法で行っております。また、エディタはspyderを使用しています。今一度実行時のメッセージを下に書かせていただきます。
runfile('C:/Users/j20703dn/Desktop/AELAB/graduationresearch/work/python_asr-main/04dnn_hmm/02_train_dnn.py', wdir='C:/Users/j20703dn/Desktop/AELAB/graduationresearch/work/python_asr-main/04dnn_hmm')
Traceback (most recent call last):
File "C:\Users\j20703dn\Desktop\AELAB\graduationresearch\work\python_asr-main\04dnn_hmm\02_train_dnn.py", line 9, in <module>
import torch.nn as nn
File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\nn\__init__.py", line 1, in <module>
from .modules import * # noqa: F403
File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\nn\modules\__init__.py", line 1, in <module>
from .module import Module
File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\nn\modules\module.py", line 7, in <module>
from ..parameter import Parameter
File "C:\Users\j20703dn\anaconda3\lib\site-packages\torch\nn\parameter.py", line 2, in <module>
from torch._C import _disabled_torch_function_impl
ImportError: cannot import name '_disabled_torch_function_impl' from 'torch._C' (unknown location)
> from torch._C import _disabled_torch_function_impl
ImportError: cannot import name '_disabled_torch_function_impl' from 'torch._C' (unknown location)
質問のエラーと同じで、「torch._C」のインポートができてませんね
パスに問題は無いようなので、インストールがうまくいってない可能性がありますが、既に
> pipを用いたpytorchのアンインストール及び再インストール
をしてるので、それをもう一度やっても状況は変わらないかもしれません
(ダメ元でやってみる価値はありますが)
GPU版じゃなくて、一旦CPU版をインストールしてみたら、いかがでしょうか??
CPU版だと同じコードでエラー出ないなら (エラー出たとしても違うエラーなら)、CUDA関係のどこかに問題がある可能性があります
CPU版でも同じエラーを吐かれてしまいました。
Anacondaなので、pipではなくcondaで入れてみたら、いかがでしょうか??
pipで既に入れてるものを、まずpipでアンインストールしてから
私も先ほどそれを思いインストールしているところになります。終わり次第こちらに書かせていただきます。
Preparing transaction: done
Verifying transaction: failed
RemoveError: 'requests' is a dependency of conda and cannot be removed from
conda's operating environment.
condaでインストールしようとしたところ、このようなエラーメッセージを吐かれてしまいました
「requests」を削除できないって言われてますが、condaで
https://pytorch.org/get-started/locally/
に書かれてるコマンドを実行しようとしてるだけですよね?
そうです。cmdでこのコマンドを実行しようとしたらこうなりました。
そういえば、以前そうなった時に、これやったのを思い出しました
https://qiita.com/seal_qiita/items/57df08fb3effc2d467d3
今でもできるのかな??
ただし、当方ではそれやったら直りましたが、上記Webページにも書かれてますように、それが正しい対処かは分かりません
なので、実施する場合は自己責任でお願いします
この方法ですべて解決することが出来ました!!!
ありがとうございます。ベストアンサーにさせていただきたいのですが、回答の方に投稿願えますか?
回答2件
あなたの回答
tips
プレビュー