def forward(self, v_input, k_positive = 10, k_negative=10, greedy = True, ith_layer = 0, CD_k = 10): #for greedy training
if greedy:
v = v_input
for ith in range(ith_layer):
p_v, v = self.rbm_layers[ith].v_to_h(v)
v, v_ = self.rbm_layers[ith_layer](v, CD_k = CD_k)
return v, v_
v = v_input
even_layer = [v]
odd_layer = []
for i in range(1, self.n_even_layers):
even_layer.append(torch.bernoulli(torch.sigmoid(self.bias[2*i].repeat(v.size()[0],1))))
for _ in range(k_positive):
p_odd_layer, odd_layer = self.even_to_odd(even_layer)
p_even_layer, even_layer = self.odd_to_even(odd_layer)
even_layer[0] = v
positive_phase_even = [i.detach().clone() for i in even_layer]
positive_phase_odd = [i.detach().clone() for i in odd_layer]
for i, d in enumerate(positive_phase_odd):
positive_phase_even.insert(2*i+1, positive_phase_odd[i])
positive_phase = positive_phase_even
for _ in range(k_negative):
p_odd_layer, odd_layer = self.even_to_odd(even_layer)
p_even_layer, even_layer = self.odd_to_even(odd_layer)
negative_phase_even = [i.detach().clone() for i in even_layer]
negative_phase_odd = [i.detach().clone() for i in odd_layer]
for i, d in enumerate(negative_phase_odd):
negative_phase_even.insert(2*i+1, negative_phase_odd[i])
negative_phase = negative_phase_even
return positive_phase, negative_phase
model_DBM.py 文件源码
python
阅读 31
收藏 0
点赞 0
评论 0
评论列表
文章目录