def bprop(self, delta, momentum=0.0): op.streams[2].synchronize() # make sure layer above is done self.dfunc(delta, self.A, self.Z, stream=op.streams[0]) op.streams[0].synchronize() op.add_dot(delta, self.X, self.dW, True, False, alpha=1.0 / delta.shape[0], beta=momentum, stream=op.streams[0]) m = op.mean(delta, axis=0, stream=op.streams[1]) op.add_vec(self.db, 1.0, m, beta=momentum, stream=op.streams[1]) if self.l2_penalty > 0: op.add_vec(self.dW, self.l2_penalty, self.W, stream=op.streams[0]) if not self.is_input_layer: if self.dropout > 0.0 and self.activation not in ("relu", "sigmoid"): return op.dot(delta, self.W) * self.M else: return op.dot(delta, self.W) else: return 0.0
def fprop(self, X, stream=None): ''' Forward propagation. NOTE: If we do dropout, X will get mutated. Usually, X == lowerlayer.A. Thus, we don't need to multiply by a dropout mask in bprop.''' self.X, self.M = self._corrupt_input(X, stream=stream) self.Z = op.dot(self.X, self.W, False, True, stream=stream) self.Z = op.add_matvec(self.Z, self.b, out=self.Z, stream=stream) self.A = self.func(self.Z, stream=stream) return self.A
def bprop(self, delta, momentum=0.0): op.streams[2].synchronize() # make sure layer above is done self.dfunc(delta, self.A, self.Z, stream=op.streams[0]) op.streams[0].synchronize() op.add_dot(delta, self.X, self.dW, True, False, alpha=1.0/delta.shape[0], beta=momentum, stream=op.streams[0]) m = op.mean(delta, axis=0, stream=op.streams[1]) op.add_vec(self.db, 1.0, m, beta=momentum, stream=op.streams[1]) if self.l2_penalty > 0: op.add_vec(self.dW, self.l2_penalty, self.W, stream=op.streams[0]) if not self.is_input_layer: if self.dropout > 0.0 and self.activation not in ("relu", "sigmoid"): return op.dot(delta, self.W)*self.M else: return op.dot(delta, self.W) else: return 0.0
def test_csrmm_bug(): ''' the 2nd call might crash''' from scipy.sparse import csr_matrix W = np.random.normal(size=(5, 3)).astype(np.float32, order="c") X = np.random.laplace(size=(6, 3)).astype(np.float32) X[X<0.1] = 0 X = csr_matrix(X, dtype=np.float32) Xd = GPUCSRArray(X) Wd = op.to_gpu(W) Cd = op.dot(Xd, Wd, False, True, out=None, stream=op.streams[0]) op.add_dot(Cd, Xd, Wd, True, False, alpha=-0.3, beta=1.0, stream=op.streams[0]) op.mean(Cd, axis=0, stream=op.streams[1])
def _mean_hiddens(self, v): """Computes the probabilities P(h=1|v). Parameters ---------- v : array-like, shape (n_samples, n_features) Values of the visible layer. Returns ------- h : array-like, shape (n_samples, n_components) Corresponding mean field values for the hidden layer. """ p = op.dot(v, self.W, False, True) p = op.add_matvec(p, self.bh, out=p) return op.sigmoid(p, out=p)
def _mean_visibles(self, h): """Computes the probabilities P(v=1|h). Parameters ---------- h : array-like, shape (n_samples, n_components) Values of the hidden layer to sample from. Returns ------- v : array-like, shape (n_samples, n_features) Values of the visible layer. """ p = op.dot(h, self.W, False, False) p = op.add_matvec(p, self.bv, out=p) return p
def test_csrmm_bug(): ''' the 2nd call might crash''' from scipy.sparse import csr_matrix W = np.random.normal(size=(5, 3)).astype(np.float32, order="c") X = np.random.laplace(size=(6, 3)).astype(np.float32) X[X < 0.1] = 0 X = csr_matrix(X, dtype=np.float32) Xd = GPUCSRArray(X) Wd = op.to_gpu(W) Cd = op.dot(Xd, Wd, False, True, out=None, stream=op.streams[0]) op.add_dot(Cd, Xd, Wd, True, False, alpha=-0.3, beta=1.0, stream=op.streams[0]) op.mean(Cd, axis=0, stream=op.streams[1])