😇
TensorflowでConv2Dを使うとNo algorithm worked!になってしまう時の対処法
Kerasを使ってディープラーニングの勉強をしようとしていたところ、CNNを使った学習ができなくなって困ってた話。
根本的に何がだめなのか全くわからないが、一応なんとかなったのでメモ。
環境:
Tensorflow GPUをDockerで動かしている。
GPU: Geforce 1660 Super
CPU: Ryzen 3700X
Host OS: Ubuntu 20.04
Docker Version: 20.10.0
Docker Image: tensorflow/tensorflow:2.4.0rc3-gpu-jupyter
(03f19a53cd23)
環境構築はこちらを見て、ホスト側にnvidia-docker2とcuda-driversはインストール済み。
ブラウザからDocker内のJupyter(localhost:8888)にアクセスして使っています。
エラー再現
PythonとKerasによるディープラーニング(François Chollet著)
5.1のMNISTをCNNで学習させるコードでエラーが出ます。具体的には
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
のmodel.fit()
で、以下のエラーが発生します。
NotFoundError: No algorithm worked!
[[node sequential/conv2d/Conv2D (defined at <ipython-input-7-68f402c82258>:4) ]] [Op:__inference_train_function_993]
コード全文はこちら。import keras
の部分はimport tensorflow.keras
に書き換えました
解決方法
TensorflowのGitHubにIssueが上がってました。
参考になったのはこちらのコメント
以下を先頭に追加
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
先頭にこの数行を追加すると無事model.fit()
を実行してもエラーが出なくなりました。
理由はよくわかっていないが、とりあえず動きます。
Discussion