5
2

More than 3 years have passed since last update.

【PyMC3】Compilation Failedエラーを解決する

Posted at

はじめに

この記事は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]})]')

解決方法

ターミナル
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も入れましたが、今の所不具合はないです。

もし同じ症状の人がいたら、これが役に立ったらいいな・・・

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2