def __init__(self, num_hidden, num_visible, data=None, binary_visible=True, hidden_activation_function = Sigmoid(), dropout=0.0): '''Initialize a restricted boltzmann machine on GPU num_visible: The number of visible units. data.shape[0] num_hidden: The number of hidden units. binary: True if the visible units are binary, False if the visible units are normally distributed. ''' self.num_hidden = num_hidden self.num_visible = num_visible self.hidden_unittype = hidden_activation_function self.visible_unittype = self.hidden_unittype if binary_visible else Gaussian() if(data is not None): self.data = data#isinstance(data, gp.garray) and data or gp.garray(data.astype(np.float32)) self.num_visible = data.shape[1] self.weights = 0.1 * gp.randn(self.num_visible,self.num_hidden) self.hidden_bias = -4. * gp.ones(self.num_hidden) self.visible_bias = gp.zeros(self.num_visible) self.grad_weights = gp.zeros(self.weights.shape) self.grad_visible = gp.zeros(self.visible_bias.shape) self.grad_hidden = gp.zeros(self.hidden_bias.shape) self.dropout = dropout if(dropout is None or dropout==0): self.cd1 = CD1 else: self.cd1=CD1_dropout
def sampleStates(self, acts): if self.krizNoise: return self.activate(acts + gp.randn(*acts.shape)) tiny = 1e-30 stddev = gp.sqrt(acts.sigmoid() + tiny) return self.activate( acts + stddev*gp.randn(*acts.shape) )