2016-01-01 7 views
0

Существует реализация для RBM. Первоначальная реализация RBM для дискретных данных, таких как изображения, мои данные - двоичные данные, работает ли код для реальных данных? Я где-то читал, что есть версия gaussin типичного RBM, которая работает для этого, также она реализована в этом модуле?Ограниченные машины Boltzman для непрерывных входов

+2

Не могли бы вы дать более подробную информацию? Где и какова эта реализация, о которой вы говорите? Вы говорите о внедрении RBM или о Джеффри Хинтоне и Руслане Салахутдинове за их научную работу? – Amir

+0

Спасибо за ваш ответ, я говорю об этом, deeplearning.net/tutorial/code/rbm.py вы знаете лучшую реализацию: – HHH

ответ

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] 

 Смежные вопросы

  • Нет связанных вопросов^_^