前提・実現したいこと
Deep Learningを使用したサンプルプログラムを実行するとエラーが出ました。
そのうちのいくつかは修正できたのですが、次のエラーの修正方法がわかりません。
発生している問題・エラーメッセージ
Exception in main training loop: module 'cupy.cudnn' has no attribute 'pooling_forward' Traceback (most recent call last): File "D:\tools\Anaconda\lib\site-packages\chainer\training\trainer.py", line 315, in run update() File "D:\tools\Anaconda\lib\site-packages\chainer\training\updaters\standard_updater.py", line 165, in update self.update_core() File "D:\tools\Anaconda\lib\site-packages\chainer\training\updaters\standard_updater.py", line 177, in update_core optimizer.update(loss_func, *in_arrays) File "D:\tools\Anaconda\lib\site-packages\chainer\optimizer.py", line 680, in update loss = lossfun(*args, **kwds) File "D:/sakuhin(python)/test/ver2.py", line 23, in __call__ h3 = F.max_pooling_2d(h2, 2)# プーリング層 File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\max_pooling_2d.py", line 383, in max_pooling_2d return func.apply((x,))[0] File "D:\tools\Anaconda\lib\site-packages\chainer\function_node.py", line 263, in apply outputs = self.forward(in_data) File "D:\tools\Anaconda\lib\site-packages\chainer\function_node.py", line 369, in forward return self.forward_gpu(inputs) File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\max_pooling_2d.py", line 64, in forward_gpu return super(MaxPooling2D, self).forward_gpu(x) File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\pooling_2d.py", line 54, in forward_gpu cudnn.pooling_forward( Will finalize trainer extensions and updater before reraising the exception. Traceback (most recent call last): File "D:/sakuhin(python)/test/ver2.py", line 58, in <module> trainer.run() File "D:\tools\Anaconda\lib\site-packages\chainer\training\trainer.py", line 329, in run six.reraise(*sys.exc_info()) File "D:\tools\Anaconda\lib\site-packages\six.py", line 693, in reraise raise value File "D:\tools\Anaconda\lib\site-packages\chainer\training\trainer.py", line 315, in run update() File "D:\tools\Anaconda\lib\site-packages\chainer\training\updaters\standard_updater.py", line 165, in update self.update_core() File "D:\tools\Anaconda\lib\site-packages\chainer\training\updaters\standard_updater.py", line 177, in update_core optimizer.update(loss_func, *in_arrays) File "D:\tools\Anaconda\lib\site-packages\chainer\optimizer.py", line 680, in update loss = lossfun(*args, **kwds) File "D:/sakuhin(python)/test/ver2.py", line 23, in __call__ h3 = F.max_pooling_2d(h2, 2)# プーリング層 File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\max_pooling_2d.py", line 383, in max_pooling_2d return func.apply((x,))[0] File "D:\tools\Anaconda\lib\site-packages\chainer\function_node.py", line 263, in apply outputs = self.forward(in_data) File "D:\tools\Anaconda\lib\site-packages\chainer\function_node.py", line 369, in forward return self.forward_gpu(inputs) File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\max_pooling_2d.py", line 64, in forward_gpu return super(MaxPooling2D, self).forward_gpu(x) File "D:\tools\Anaconda\lib\site-packages\chainer\functions\pooling\pooling_2d.py", line 54, in forward_gpu cudnn.pooling_forward( AttributeError: module 'cupy.cudnn' has no attribute 'pooling_forward' Process finished with exit code 1
該当のソースコード
python3
1import chainer 2import chainer.functions as F 3import chainer.links as L 4from chainer import training, datasets, iterators, optimizers 5from chainer.training import extensions 6import numpy as np 7 8batch_size = 10 # バッチサイズ10 9uses_device = 0 # GPU#0を使用 10 11class NMIST_Conv_NN(chainer.Chain): 12 13 def __init__(self): 14 super(NMIST_Conv_NN, self).__init__() 15 with self.init_scope(): 16 self.conv1 = L.Convolution2D(1, 8, ksize=3) # フィルタサイズ=3で出力数8 17 self.linear1 = L.Linear(1352, 10) # 出力数10 18 19 def __call__(self, x, t=None, train=True): 20 # 畳み込みニューラルネットワークによる画像認識 21 h1 = self.conv1(x) # 畳み込み層 22 h2 = F.relu(h1) # 活性化関数 23 h3 = F.max_pooling_2d(h2, 2)# プーリング層 24 h4 = self.linear1(h3) # 全結合層 25 # 損失か結果を返す 26 return F.softmax_cross_entropy(h4, t) if train else F.softmax(h4) 27 28# ニューラルネットワークを作成 29model = NMIST_Conv_NN() 30 31if uses_device >= 0: 32 # GPUを使う 33 chainer.cuda.get_device_from_id(0).use() 34 chainer.cuda.check_cuda_available() 35 # GPU用データ形式に変換 36 model.to_gpu() 37 38# MNISTデータセットを用意する 39train, test = chainer.datasets.get_mnist(ndim=3) 40 41# 繰り返し条件を作成する 42train_iter = iterators.SerialIterator(train, batch_size, shuffle=True) 43test_iter = iterators.SerialIterator(test, batch_size, repeat=False, shuffle=False) 44 45# 誤差逆伝播法アルゴリズムを選択する 46optimizer = optimizers.Adam() 47optimizer.setup(model) 48 49# デバイスを選択してTrainerを作成する 50updater = training.StandardUpdater(train_iter, optimizer, device=uses_device) 51trainer = training.Trainer(updater, (5, 'epoch'), out="result") 52# テストをTrainerに設定する 53trainer.extend(extensions.Evaluator(test_iter, model, device=uses_device)) 54# 学習の進展を表示するようにする 55trainer.extend(extensions.ProgressBar()) 56 57# 機械学習を実行する 58trainer.run() 59 60# 学習結果を保存する 61chainer.serializers.save_hdf5( 'NN.hdf5', model ) 62
試したこと
自宅のwindows7のdesktopPCでは問題なく動作します。
同じ要領でwindows10の前述のものとは違うノートPCで実行したところ、前述のエラーが出力されました。
cupy、chainerの再インストールをしました。
anaconda prompt上にて
(base) C:\Users\>nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Fri_Feb__8_19:08:26_Pacific_Standard_Time_2019 Cuda compilation tools, release 10.1, V10.1.105
python3コンソール上にて
>>> import cupy.cudnn >>>
5/13さらにanaconda、chainer、cupyを再インストールしました。最終的に同様のエラーにいたりました。
cupyx.spicyが見つからない感じのエラーがあったのでhttps://github.com/cupy/cupyのscipyフォルダをコピーして貼り付けてみると、エラーは消えましたが本題のエラーに至り、今度はcupyフォルダごとコピーして貼り付けましたがエラーは消えませんでした。
https://github.com/chainer/chainer/issues/5685に同様のエラーで困ってる方がいますが、解決していないかpyenvが原因(?)みたいなようで関係ないかもです。
なお、プログラムコードのuses_device を負にするとなんの問題もなく動きます。cupyでなくnumpy使用に切り替えたからです。
補足情報(FW/ツールのバージョンなど)
環境は以下の通りです。
PyCharm 2019.1.1 (Community Edition)
Build #PC-191.6605.12, built on April 3, 2019
JRE: 11.0.2+9-b159.34 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
chainer 5.3.0
cupy 4.1.0
python 3.6.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/14 03:25