In [3]:
import glob, os, sys
from numpy import *
from scipy import *
from midi.utils import midiread, midiwrite

In [2]:
def build_rbm(v, W, bv, bh, k):
    def gibbs_step(v):
        mean_h = sigmoid(dot(v, W) + bh)
        h = random.binomial(size=mean_h.shape, n=1, p=mean_h)
        mean_v = sigmoid(dot(h, W.T) + bv)
        v = random.binomial(size=mean_v.shape, n=1; p=mean_v)
        return mean_v, v

    # CD-1
    mean_v, v_sample = gibbs_step(v)
    return v_sample

def build_rnnrbm(n_visible, n_hidden, n_recurrent):
    W = random.normal(size=(n_visible, n_hidden), scale=0.01)
    bv = zeros(n_visible)
    bh = zeros(n_hidden)
    Wuh = random.normal(size=(n_recurrent, n_hidden), scale=0.0001)
    Wuv = random.normal(size=(n_recurrent, n_visible), scale=0.0001)
    Wvu = random.normal(size=(n_visible, n_recurrent), scale=0.0001)
    Wuu = random.normal(size=(n_recurrent, n_recurrent), scale=0.0001)
    bu = zeros(n_recurrent)
    
    u0 = zeros(n_recurrent)
    
    def recurrence(v_t, u_tm1):
        bv_t = bv + dot(u_tm1, Wuv)
        bh_t = bh + dot(u_tm1, Wuh)
        if v_t is None:
            v_t = build_rbm(zeros(n_visible), W, bv_t, bh_t, k=1)
        u_t = vectorize(tanh, otypes=[float])(bu + dot(v_t, Wvu) + dot(u_tm1, Wuu))
        return v_t, u_t


Out[2]:
<module 'midi' from '/home/mattya/anaconda/lib/python2.7/site-packages/midi/__init__.py'>

In [ ]: