1
この問題は、Theano
で私の理解が不足していると思います。私は分布とnumpyの配列の間の減算の結果である変数を作成したいという状況にあります。私は1
PYMC3/Theanoで数学放送を放送する
import pymc3 as pm
import numpy as np
import theano.tensor as T
X = np.random.randint(low = -10, high = 10, size = 100)
with pm.Model() as model:
nl = pm.Normal('nl', shape = 1)
det = pm.Deterministic('det', nl - x)
nl.dshape
(1,)
として形状パラメータを指定したとき、これはしかし、これは私が> 1
with pm.Model() as model:
nl = pm.Normal('nl', shape = 2)
det = pm.Deterministic('det', nl - X)
ValueError: Input dimension mis-match. (input[0].shape[0] = 2, input[1].shape[0] = 100)
nl.dshape
(2,)
X.shape
(100,)
形状を指定したとき、私はそれbroadcastable
X2 = X.reshape(-1, 1).transpose()
X2.shape
(1, 100)
作るためにXを転置しようとした壊し正常に動作しますしかし、今度は、.shape[0]
の代わりに.shape[1]
に不一致があると宣言します。
with pm.Model() as model:
nl = pm.Normal('nl', shape = 2)
det = pm.Deterministic('det', nl - X2)
ValueError: Input dimension mis-match. (input[0].shape[1] = 2, input[1].shape[1] = 100)
分布の要素
distShape = 2
with pm.Model() as model:
nl = pm.Normal('nl', shape = distShape)
det = {}
for i in range(distShape):
det[i] = pm.Deterministic('det' + str(i), nl[i] - X)
det
{0: det0, 1: det1}
以上のIループはしかし、これは洗練感じ、モデルの残りのループを使用するために私を拘束している場合、私はこの作業を行うことができます。私は、配布と同じように動作するようにこの操作を指定する方法があるのだろうかと思っていました。
distShape = 2
with pm.Model() as model:
nl0 = pm.Normal('nl1', shape = distShape)
nl1 = pm.Normal('nl2', shape = 1)
det = pm.Deterministic('det', nl0 - nl1)
おかげで同じ動作を得る
お知らせ!私はこれがpymc3で欲しい振る舞いを作り出していることを二重に確認しなければなりませんが、これは良い解決策であると楽観的です! –