pymc3 математика правдоподобия с функцией non-theano

Я новичок в байесовском выводе. Я пытаюсь адаптировать код поиска по сетке, который я написал, для байесовского подхода Монте-Карло Маркова, и я использую PyMC3. Моя проблема в том, что код должен вызывать функцию, которую нельзя переписать в синтаксисе theano. (Эта функция основана на фрагменте кода Fortran в оболочке f2py.)

Вот код, с которым я работаю:

with pm.Model() as model:
    # Independent parameters
    x = pm.Normal('x', sx, sd=incx*float(nrangex)/2.0)
    y = pm.Normal('y', sy, sd=incy*float(nrangey)/2.0)
    depth = pm.Normal('depth', sdepth, sd=incdepth*float(nrangedepth)/2.0)
    length = pm.Normal('length', slength, sd=inclength*float(nrangelength)/2.0)
    width = pm.Normal('width', swidth, sd=incwidth*float(nrangewidth)/2.0)
    strike = pm.Normal('strike', sstrike, sd=incstrike*float(nrangestrike)/2.0)
    dip = pm.Normal('dip', sdip, sd=incdip*float(nrangedip)/2.0)
    rake = pm.Normal('rake', srake, sd=incrake*float(nrangerake)/2.0)

    # Model (This is the part that doesn't work.)
    los_disp =  zne2los(getdisp(lon2km(dsidata['lon'], x), lat2km(dsidata['lat'], y), depth, length, width, strike, dip, rake))

    # Likelihood
    odisp = pymc3.Normal('los_disp', mu = los_disp, sd = 0.5, observed = dsidata['disp'])

    # Sampling
    trace = pm.sample(100)

Этот код пытается инвертировать параметры очага землетрясения из данных смещения грунта. Фрейм данных dsidata содержит данные о смещении грунта в зависимости от широты и долготы. Я пытаюсь найти восемь параметров очага землетрясения, которые наилучшим образом соответствуют этому смещению земной поверхности.

Функция getdisp просто не может быть переписана для theano, потому что она вызывает часть Fortran, которая упреждающе моделирует смещение земной поверхности по параметрам очага землетрясения. Есть ли способ скомпилировать не-теано-код в теано-форму? Есть ли другой способ сделать это?

Поскольку я новичок в этом и не могу найти много хороших примеров для просмотра, в коде вполне могут быть другие ошибки. Есть ли другие ошибки, которые я делаю?


person user3692778    schedule 24.08.2017    source источник
comment
Да, документация по pymc3 довольно плохая, и вы не найдете примеров в Интернете, если вы не находитесь в простом случае, когда многие примеры не нужны... Проблема в том, что модуль pymc3 выглядит так здорово, но я уверен Я использую только 10% его мощности только потому, что нет надежной документации... У меня было несколько таких сложных вопросов с pymc3 (stackoverflow.com/questions/42205123/, например) и каждый раз Я теряю как минимум несколько недель... А пока есть надежда, что вы справитесь без pymc3? pymc2 например?   -  person Stéphane    schedule 01.09.2017