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]:
In [ ]: