はじめに
この記事はPythonで体験するベイズ推論で使用するPyMC2の構文をPyMC3に記載し直したときに起きたCompilation Failedエラーについて、
私の症状に当たるものがあまり見つからなかったのでここに共有しておこうと思います。
Pythonで体験するベイズ推論のコードをPyMC3で書き直したものはGithubに上がっています。
環境
- Windows 10 Home 64bit
- Anaconda 4.8.3
- Python(conda) 3.8.3
- theano(pip) 1.0.5
- pymc3(pip) 3.9.3
- numpy(conda) 1.18.5
エラー内容
PyMC3で書き直したChapter1の「メッセージ数に変化はあるか?」にて
ここの実行は問題なし。
import pymc3 as pm
import theano.tensor as tt
with pm.Model() as model:
alpha = 1.0/count_data.mean() # Recall count_data is the
# variable that holds our txt counts
lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)
tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)
次のこの部分にて、下記エラーが起きました。
with model:
idx = np.arange(n_count_data) # Index
lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)
エラー内容
Exception: ('Compilation failed (return status=1): C:\\Users\\user\\AppData\\Local\\Temp\\ccq4MDSW.s: Assembler messages:\r. C:\\Users\\user\\AppData\\Local\\Temp\\ccq4MDSW.s:270: Error: invalid register for .seh_savexmm\r. ', '[Elemwise{gt,no_inplace}(<TensorType(int64, (True,))>, TensorConstant{[ 0 1 2 ..71\n 72 73]})]')
解決方法
-
MinGW-w64をインストールし、環境変数を設定(こちらを参照しました)
-
新たに仮想環境を作り直す
ターミナル
conda create -n env_name
conda install numpy
conda install scipy
conda install cython
pip install git+https://github.com/theano/theano
pip install git+https://github.com/pymc-devs/pymc3
conda install jupyter
一度、theano,PyMC3もcondaでインストールしたのですが、その場合は全く同じエラーが出て解決しませんでした。
が、pipとcondaを混ぜると、動作的にあまりよろしくないので、独立した環境を作るのがいいかと思います。
- 再度実行する
import pymc3 as pm
import theano.tensor as tt
with pm.Model() as model:
alpha = 1.0/count_data.mean() # Recall count_data is the
# variable that holds our txt counts
lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)
tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)
with model:
idx = np.arange(n_count_data) # Index
lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)
で、通りました。
このあと、condaでmatplotlib,seabornも入れましたが、今の所不具合はないです。
もし同じ症状の人がいたら、これが役に立ったらいいな・・・