カエデ自動機械

ちょっとしたものづくりや電子工作のメモなど。技術開発とは今は呼べないかな。

自分用)Pythonで学ぶ強化学習 入門から実践まで エラーなどのメモ

本当にただのメモ。
いずれちゃんと読書メモにしたいけど。

機械学習スタートアップシリーズ Pythonで学ぶ強化学習 入門から実践まで(講談社)に関するメモ。
www.kspub.co.jp

記事の内容

配布されているコードを脳死で実行した時に起こったエラーとかをまとめています。
コードは著者から以下で提供されています。
github.com

環境構築

背伸びをやめた

頑張って本のとおりに進める。
ロボットや機械学習Ubuntu環境で実行する習慣があったけど、本のデフォルトの想定はWindowsみたいなので今回はそっちで頑張ってみることにした。

python3.7を使うとエラーを吐くから3.6で環境構築せよとある。
既にこの本の発売から日が経っているので問題無いかも知れないが、3.6.13で仮想環境を構築した。

welcome.pyが動かない

事象と解決策

環境構築が完了していることを確認するにはwelcome.pyを実行してみろというので実行する。

ボールキャッチゲームという、一見ブロック崩しのようにも見えるゲームのデモが表示されるようだが、ものすごく小さな画面、ものすごく高速で動いていて何が起こっているのかわからない。ウィンドウの拡大もできない。不具合としか思えない。

結論だけ言うと、tensorflowを再インストールしたら直った。

経緯

ターミナルではエラーを吐いている。
自分が書いたコードでエラーを吐いているくらいならなんとなく何がいけないのかわかるが、これはそうもいかない。

couldn't import doomish
couldn't import doom

が唯一英語として読み取れた部分。
github.com
なんかを眺めてみたが、doomというパッケージのインストールは上手くいかない(doomというパッケージがそもそも見つからない)

ログを残し忘れたが、確かエラーメッセージの他の部分、

Call initializer instance with the dtype argument instead of passing it to the constructor

とか、

WARNING:tensorflow: init_ops.py:1251: calling VarianceScaling.__init__ (from tensorflow.python.ops.i

でググった覚えがある。

以下のサイトがヒットした。「もっと長文のエラーを吐いてきた」以降にあるエラーメッセージの一部が自分のそれと似ていた。
qiita.com

確かに、本書のガイドではpip install でrequirements.txtにある諸々のパッケージをインストールするが、pipとcondaは混在させてはならないのだった。
pipならpipだけ使っていればいいのかもしれないが、既にcondaを使ってしまっているかもしれない。

というわけで、pip uninstallののち、conda install で改めてtensorflowをインストールすると、welcome.pyのデモが大きく、正常(っぽい)速度で流れるようになった。
上から落ちてくるボールを板で受け止める遊びらしい。

day3: 強化学習の解法(2)

monte_carlo.pyが動かない

q_learning.pyも動かなかったが、同じ事象かも。

事象と対処

以下のようなエラーメッセージが出る。

Traceback (most recent call last):
File "monte_carlo.py", line 62, in
train()
File "monte_carlo.py", line 55, in train
env = gym.make("FrozenLakeEasy-v0")
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\registration.py", line 156, in make
return registry.make(id, **kwargs)
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\registration.py", line 101, in make
env = spec.make(**kwargs)
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\registration.py", line 72, in make
cls = load(self.entry_point)
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\registration.py", line 17, in load
mod = importlib.import_module(mod_name)
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\toy_text\__init__.py", line 7, in
from gym.envs.toy_text.kellycoinflip import KellyCoinflipEnv
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\envs\toy_text\kellycoinflip.py", line 1, in
from scipy.stats import genpareto
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\scipy\stats\__init__.py", line 388, in
from .stats import *
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\scipy\stats\stats.py", line 180, in
from . import distributions
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\scipy\stats\distributions.py", line 8, in
from ._distn_infrastructure import (entropy, rv_discrete, rv_continuous,
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 23, in
from scipy import optimize
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\scipy\optimize\__init__.py", line 398, in
from ._nnls import nnls
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

これもどうやらpipでインストールされていたscipyなどをcondaで入れなおしたら直った。っぽい。

経緯

例によってそれっぽい部分を抜き出してググってみる。

in from ._nnls import nnls ImportError: DLL load failed: 指定されたモジュールが見つかりません。

以下のサイトがヒットした。
qiita.com

確かに元のエラーメッセージをよく見てみるとscipy関連(僕の場合は最適化関連のライブラリ?)でエラーが出ているっぽい。

例によってpipでインストールしたnumpy, scipy, scikit-learnをアンインストールし、condaで再インストールしてみた。
が、ここで誤って先にcondaでインストール、後からpipでアンインストールという順にコマンドを打ち込んでしまった。

違うエラーが出た。

Traceback (most recent call last):
File "monte_carlo.py", line 3, in
import gym
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\__init__.py", line 10, in
from gym.spaces import Space
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\spaces\__init__.py", line 2, in
from gym.spaces.box import Box
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\spaces\box.py", line 6, in
class Box(Space):
File "C:\Users\ktd\miniconda3\envs\rl-book\lib\site-packages\gym\spaces\box.py", line 23, in Box
def __init__(self, low, high, shape=None, dtype=np.float32):
AttributeError: module 'numpy' has no attribute 'float32'

なんかエラーメッセージが短いと対処しようがあるような気がしてきて気が楽になる。気がする。

ググって出てきた類似事例に対する対処法(例えばこれ)には心当たりがない。

とりあえず上記のようにpipでインストールされているパッケージをアンインストールする前に同じパッケージをcondaでインストールしてしまうという後ろめたい点を解消すべく、conda、pipそれぞれでnumpy, scipy, scikit-learnをアンインストールして、condaで再インストールしてみた。

直った。