将Relu rbm堆叠到DBN中

  • 本文关键字:DBN Relu rbm python rbm dbn
  • 更新时间 :
  • 英文 :


我正在实现带有整流线性单元的受限制的玻尔兹曼机器。我在任何地方都没有找到一个简单的实现,所以想询问是否有人会验证设计。

这是CD1计算:

def propup(self, vis):
    activation = numpy.dot(vis, self.W) + self.hbias        
    # ReLU activation of hidden units
    return activation * (activation > 0)
def sample_h_given_v(self, v0_sample):
    h1_mean = self.propup(v0_sample)
    # Sampling from a rectified Normal distribution
    h1_sample = numpy.maximum(0, h1_mean + numpy.random.normal(0, sigmoid(h1_mean)))
    return [h1_mean, h1_sample]
def propdown(self, hid):
    activation = numpy.dot(hid, self.W.T) + self.vbias
    return sigmoid(activation)
def sample_v_given_h(self, h0_sample):
    v1_mean = self.propdown(h0_sample)
    v1_sample = self.numpy_rng.binomial(size=v1_mean.shape, n=1, p=v1_mean)
    return [v1_mean, v1_sample]

这就是我计算梯度的方式:

def get_cost_updates(self, lr, decay, mom, l1_penalty, p_noise, epoch, persistent=None, k=1):
    ph_mean, ph_sample = self.sample_h_given_v(input)
    nv_means, nv_samples,nh_means, nh_samples = self.gibbs_hvh(ph_sample)      
    W_grad = numpy.dot(self.input.T, ph_mean) - numpy.dot(nv_samples.T, nh_means)
    vbias_grad = numpy.mean(self.input - nv_samples, axis=0)
    hbias_grad = numpy.mean(ph_mean - nh_means, axis=0)

我的问题是,如何将其分层到DBN中?

目的是构造自动编码器,但我不确定如何处理可见单元也是第二层中的实际数字变量。

我可以看到这个问题是在某个时候提出的,但是由于没有答案,我会加我的。您所撰写的DBN是通过贪婪的学习算法实现的,该算法将每一层都像RBM一样。我实际上最近进行了一次讲座,您可以找到一个我在此处使用的数字示例的演示文稿:https://www.slideshare.net/mobile/mobile/avnergidron/generative-models/avnergidron/generative-models

我认为,如果您理解演示文稿,那么您自己做不久就不需要很长时间。

相关内容

  • 没有找到相关文章

最新更新