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

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

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

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3987閲覧

「module 'cupy.cudnn' has no attribute 'pooling_forward'」というエラーが出る

sachsen

総合スコア13

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/04 04:18

編集2019/05/13 11:51

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく、Chainerとcupyのバージョンが一致してないことが原因だと思います。

githubで確認したところ、cupy 5.3.0にはpooling_forwardがありますが、4.1.0にはありません。

以下、参考記事からの引用です。

it seems your Chainer & Cupy version mismatches. Can you trypip uninstall cupy and pip install cupy-cuda90==5.3.0 --no-cache-dir to install same version of cupy & chainer?

参考記事:Chainer module 'cupy.cudnn' has no attribute 'softmax_forward'

ご参考になれば幸いです。

投稿2019/05/14 01:46

amahara_waya

総合スコア1029

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

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

sachsen

2019/05/14 03:25

言われた通りにしてみるときちんと動きました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問