

vgg16をファインチューニングしたCNNモデルをヒートマップとして可視化させるために、「PythonとKerasによるディープラーニング,
P.182」を参考にプログラムを作成したのですが、入力画像をNumpy配列に変換して読み込ませようとするとエラーを吐いてしまいます。

以下プログラムの一部抜粋とエラー内容です。どうかご回答お願いいたします。

**コード (抜粋):**

[code]

    img = image.load_img(img_path, target_size=(img_width, img_height))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    preds = model.predict(x)
    
[/code]

**エラーメッセージ:**

[code]

    ----> 1 preds = model.predict(x)
    
    ~\Anaconda3\lib\site-packages\keras\engine\training.py in predict(self, x, batch_size, verbose, steps)
       1167                                             batch_size=batch_size,
       1168                                             verbose=verbose,
    -> 1169                                             steps=steps)
       1170 
       1171     def train_on_batch(self, x, y,
    
    ~\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in predict_loop(model, f, ins, batch_size, verbose, steps)
        292                 ins_batch[i] = ins_batch[i].toarray()
        293 
    --> 294             batch_outs = f(ins_batch)
        295             batch_outs = to_list(batch_outs)
        296             if batch_index == 0:
    
    ~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in __call__(self, inputs)
       2713                 return self._legacy_call(inputs)
       2714 
    -> 2715             return self._call(inputs)
       2716         else:
       2717             if py_any(is_tensor(x) for x in inputs):
    
    ~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in _call(self, inputs)
       2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)
       2674         else:
    -> 2675             fetched = self._callable_fn(*array_vals)
       2676         return fetched[:len(self.outputs)]
       2677 
    
    ~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __call__(self, *args, **kwargs)
       1456         ret = tf_session.TF_SessionRunCallable(self._session._session,
       1457                                                self._handle, args,
    -> 1458                                                run_metadata_ptr)
       1459         if run_metadata:
       1460           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
    
    UnknownError: 2 root error(s) found.
      (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
         [[{{node block1_conv1_1/convolution}}]]
      (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
         [[{{node block1_conv1_1/convolution}}]]
         [[sequential_2/dense_4/Softmax/_607]]
    0 successful operations.
    0 derived errors ignored.
    
[/code]


CC BY-SA 4.0
2019-07-16T20:32:00.240
56690
2022-06-16T03:01:35.147
2022-05-04T07:31:14.200
3060
35144
question
python python3 keras
CNNモデルの入力画像をNumpy配列に変換して読み込ませようとするとエラーが発生する


Qiitaの [機械学習の勉強すっぞ！Keras-
TensorFlowでCNN(畳み込みニューラルネットワーク)の演習をやろうとしたらエラーが出た件](https://qiita.com/minarai/items/48ab415d134e9a44f7a5)
の記事に書かれている状況と似ているように思われます。

記事に書かれている解決方法を試してみては、いかがでしょう。


CC BY-SA 4.0
2019-07-17T00:38:22.087
56692
2019-07-17T00:38:22.087
217
56690
answer


anacondaを使っていて、cuda, cudnn関連がうまく設定されていない可能性が高いです。使っているtensorflow, cuda,
cudnnのバージョンが対応関係にあるか確認してからOSの環境変数の設定をチェックしてください。

  * テストビルドにおける環境: <https://www.tensorflow.org/install/source#gpu>

以下のコードは私の環境で正常動作しました。

環境

  * ubuntu 20.04
  * tensorflow 2.8.0
  * cuda 11.2
  * cudnn 8.1

[code]

    from keras_preprocessing import image
    from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
    import numpy as np
    
    model = VGG16(weights="imagenet")
    img_path = "img.jpg"
    img = image.load_img(img_path, target_size=(224, 224))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    preds = model.predict(x)
    print(preds)
    
[/code]


CC BY-SA 4.0
2022-05-03T13:09:13.693
88638
2022-05-03T13:09:13.693
52014
56690
answer