python中的自由能是
def free_energy(self, v_sample):
''' Function to compute the free energy '''
wx_b = T.dot(v_sample, self.W) + self.hbias
vbias_term = T.dot(v_sample, self.vbias)
hidden_term = T.sum(T.log(1 + T.exp(wx_b)), axis=1)
return -hidden_term - vbias_term
我对python不是很在行,基本上它得到每个可见单元的乘积专家作为向量wx_b,计算exp和+1,计算log并将其求和为隐藏项。在
我认为这与学习深层架构中的自由能方程有些不同:
自由能(x)=−b′x−∑log∑e^hi(ci+Wix)。在
其中:
hi
是单元i
隐藏层ci
是向量c中的i
隐藏偏差它计算exp和sum,计算关于和值的log。毕竟所有的产品专家都是基于可见单元的数量来求和的。在
上面的等式是Learning Deep Architectures for AI (Yoshua Bengio)中的等式5.21
下面是我的java实现草稿vis_v是可见层示例,hid犠v是隐藏层单元示例。在
^{pr2}$这是某种近似吗?我试图在java中实现同样的东西,但我对此感到困惑。提前感谢您的帮助!在
我想你的困惑在于参考python代码中自由能函数的定义。如果这不是你要求的,我道歉。在
首先,这是一个近似值。看起来他们假设隐藏的单位是二进制值的。请记住,自由能只是隐藏变量被边缘化的能量(对数)。所以,上面列出的自由能方程中的内和只是第i个隐藏单元可以接受的值的和,在本例中是{0,1}。因为exp(0)=1,那么内部和就变成了1+exp(…)。请参阅link you provided中的“带二进制单位的RBMs”部分。在
我不熟悉java中的apachecommons数学库,因此我不能提供大量的帮助,但是实现应该是从python函数直接转换而来的。在
相关问题 更多 >
编程相关推荐