Существует реализация для RBM. Первоначальная реализация RBM для дискретных данных, таких как изображения, мои данные - двоичные данные, работает ли код для реальных данных? Я где-то читал, что есть версия gaussin типичного RBM, которая работает для этого, также она реализована в этом модуле?Ограниченные машины Boltzman для непрерывных входов
0
A
ответ
0
Одним словом, RBM является просто марковским случайным полем на двудольном графе. Поэтому вы можете иметь любое распределение вероятности для описания отношений между узлами.
Что касается кода, вам не нужно явно копировать вещи. Роль, которую будет играть выбранная вероятностная функция, находится в алгоритме контрастной дивергенции. Вам нужно только изменить способ выбора образцов. Детали кода, которые необходимо изменить, копируются ниже.
def sample_h_given_v(self, v0_sample):
''' This function infers state of hidden units given visible units '''
# compute the activation of the hidden units given a sample of
# the visibles
pre_sigmoid_h1, h1_mean = self.propup(v0_sample)
# get a sample of the hiddens given their activation
# Note that theano_rng.binomial returns a symbolic sample of dtype
# int64 by default. If we want to keep our computations in floatX
# for the GPU we need to specify to return the dtype floatX
h1_sample = self.theano_rng.binomial(size=h1_mean.shape,
n=1, p=h1_mean,
dtype=theano.config.floatX)
return [pre_sigmoid_h1, h1_mean, h1_sample]
def propdown(self, hid):
'''This function propagates the hidden units activation downwards to
the visible units
Note that we return also the pre_sigmoid_activation of the
layer. As it will turn out later, due to how Theano deals with
optimizations, this symbolic variable will be needed to write
down a more stable computational graph (see details in the
reconstruction cost function)
'''
pre_sigmoid_activation = T.dot(hid, self.W.T) + self.vbias
return [pre_sigmoid_activation, T.nnet.sigmoid(pre_sigmoid_activation)]
def sample_v_given_h(self, h0_sample):
''' This function infers state of visible units given hidden units '''
# compute the activation of the visible given the hidden sample
pre_sigmoid_v1, v1_mean = self.propdown(h0_sample)
# get a sample of the visible given their activation
# Note that theano_rng.binomial returns a symbolic sample of dtype
# int64 by default. If we want to keep our computations in floatX
# for the GPU we need to specify to return the dtype floatX
v1_sample = self.theano_rng.binomial(size=v1_mean.shape,
n=1, p=v1_mean,
dtype=theano.config.floatX)
return [pre_sigmoid_v1, v1_mean, v1_sample]
Не могли бы вы дать более подробную информацию? Где и какова эта реализация, о которой вы говорите? Вы говорите о внедрении RBM или о Джеффри Хинтоне и Руслане Салахутдинове за их научную работу? – Amir
Спасибо за ваш ответ, я говорю об этом, deeplearning.net/tutorial/code/rbm.py вы знаете лучшую реализацию: – HHH