Являются ли эти уравнения правильными для получения выборок из RBM со скрытыми и двоичными видимыми единицами измерения ReLu:
I = w.T * v + bias
h = RelU(I)
P(h|I) = max(0, h + N(0, h))
Вот реализация, которую я нашел для переполнения стека, для данных MNIST после обучения он генерирует бессмысленные цифры:
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]
Где ошибка?