def bprop(self): ca.multiply(self.mu.out, self.out_grad, self.mu.out_grad) self.mu.out_grad *= self.out_grad ca.exp(self.log_sigma.out, out=self.log_sigma.out_grad) self.log_sigma.out_grad -= 1 self.log_sigma.out_grad *= 0.5 self.log_sigma.out_grad *= self.out_grad
def bprop(self): grad = ca.reshape(self.grad_array, self.bcast_shape) ca.multiply(self.mu.array, grad, self.mu.grad_array) ca.exp(self.logvar.array, out=self.logvar.grad_array) self.logvar.grad_array -= 1 self.logvar.grad_array *= 0.5 self.logvar.grad_array *= grad
def fprop(self): # e_i = exp(x_i - max(x)) # y = e_i / sum(e) tmp1 = ca.amax(self.x.array, axis=1, keepdims=True) ca.subtract(self.x.array, tmp1, self.array) ca.exp(self.array, self.array) ca.sum(self.array, axis=1, keepdims=True, out=tmp1) self.array /= tmp1
def fprop(self): tmp1 = self.mu.out**2 ca.negative(tmp1, tmp1) tmp1 += self.log_sigma.out tmp1 += 1 tmp1 -= ca.exp(self.log_sigma.out) ca.sum(tmp1, axis=1, keepdims=True, out=self.out) self.out *= -0.5
def fprop(self): tmp1 = self.mu.out**2 ca.negative(tmp1, tmp1) tmp1 += self.log_sigma.out tmp1 += 1 tmp1 -= ca.exp(self.log_sigma.out) self.out = ca.sum(tmp1) self.out *= -0.5
def fprop(self): tmp1 = self.mu.array**2 ca.negative(tmp1, tmp1) tmp1 += self.logvar.array tmp1 += 1 tmp1 -= ca.exp(self.logvar.array) ca.sum(tmp1, axis=self.axis, out=self.array) self.array *= -0.5
def fprop(self): tmp1 = self.mu.array**2 ca.negative(tmp1, tmp1) tmp1 += self.log_sigma.array tmp1 += 1 tmp1 -= ca.exp(self.log_sigma.array) self.array = ca.sum(tmp1) self.array *= -0.5
def bprop(self): ca.negative(self.x.out, self.x.out_grad) ca.exp(self.x.out_grad, self.x.out_grad) self.x.out_grad += 1 ca.divide(1.0, self.x.out_grad, out=self.x.out_grad) self.x.out_grad *= self.out_grad
def fprop(self): ca.exp(self.x.out, self.out) # TODO: use log1p() self.out += 1 ca.log(self.out, self.out)
def bprop(self): ca.multiply(self.mu.array, self.grad_array, self.mu.grad_array) ca.exp(self.log_sigma.array, out=self.log_sigma.grad_array) self.log_sigma.grad_array -= 1 self.log_sigma.grad_array *= 0.5 self.log_sigma.grad_array *= self.grad_array
def fprop(self, x): self._tmp_x = x return ca.log(1.0 + ca.exp(x))
def fprop(self): ca.exp(self.x.out, out=self.out)
def softmax(x): e = ca.exp(x - ca.amax(x, axis=1, keepdims=True)) return e/ca.sum(e, axis=1, keepdims=True)
def bprop(self): ca.exp(self.x.out, out=self.x.out_grad) self.x.out_grad *= self.out_grad
def bprop(self, y_grad): return 1.0 / (1.0 + ca.exp(-self._tmp_x)) * y_grad
def bprop(self, y_grad): return 1.0/(1.0 + ca.exp(-self._tmp_x)) * y_grad
def fprop(self): ca.exp(self.x.array, out=self.array)
def bprop(self): ca.exp(self.x.array, out=self.x.grad_array) self.x.grad_array *= self.grad_array
def softmax(x): e = ca.exp(x - ca.amax(x, axis=1, keepdims=True)) return e / ca.sum(e, axis=1, keepdims=True)
def bprop(self): ca.multiply(self.mu.out, self.out_grad, self.mu.out_grad) ca.exp(self.log_sigma.out, out=self.log_sigma.out_grad) self.log_sigma.out_grad -= 1 self.log_sigma.out_grad *= 0.5 self.log_sigma.out_grad *= self.out_grad