def TranslateData(self, batch, i): """Applies translations to data at index i in batch.""" sizeX = self.sizeX sizex = self.sizex batchsize = batch[i].shape[1] shift = (sizeX - sizex) / 2 offset_x = np.array([ random.choice(self.translate_range_x) + shift for k in range(batchsize) ]).reshape(1, -1) offset_y = np.array([ random.choice(self.translate_range_y) + shift for k in range(batchsize) ]).reshape(1, -1) num_channels = self.num_channels d = batch[i] if self.offset_x is None: self.offset_x = cm.CUDAMatrix(offset_x) else: self.offset_x.overwrite(offset_x) if self.offset_y is None: self.offset_y = cm.CUDAMatrix(offset_y) else: self.offset_y.overwrite(offset_y) if self.translated_d is None or self.translated_d.shape[1] != batchsize: self.translated_d = cm.empty((sizex**2 * num_channels, batchsize)) d.generate_translations(sizeX, sizex, self.offset_x, self.offset_y, target=self.translated_d) batch[i] = self.translated_d
def log(self, inplace=False): if self.typ == 'numpy': return PMAT(np.log(self.mat)) elif self.typ == 'cuda': if inplace: self.mat = cm.log(self.mat) return self else: target = cm.empty(self.mat.shape) cm.log(self.mat, target=target) return PMAT(target)
def element_add(self, mat, inplace=False): if self.typ == 'numpy': return PMAT(self.mat + mat.mat) elif self.typ == 'cuda': if inplace: self.mat = self.mat.add(mat.mat) return self else: target = cm.empty(self.mat.shape) self.mat.add(mat.mat, target=target) return PMAT(target)
def add_col_vec(self, colvec, inplace=False): if self.typ == 'numpy': return PMAT(self.mat + colvec.mat) elif self.typ == 'cuda': if inplace: self.mat.add_col_vec(colvec.mat) return self else: target = cm.empty(self.mat.shape) self.mat.add_col_vec(colvec.mat, target=target) return PMAT(target)
def multiply_by_col(self, colvec, inplace=False): if self.typ == 'numpy': return PMAT(self.mat * colvec.mat) elif self.typ == 'cuda': if inplace: self.mat.mult_by_col(colvec.mat) return self else: target = cm.empty(self.mat.shape) self.mat.mult_by_col(colvec.mat, target=target) return PMAT(target)
def subtract(self, mat, inplace=False): if self.typ == 'numpy': return PMAT(self.mat - mat.mat) if self.typ == 'cuda': if inplace: self.mat.subtract(mat.mat) return self else: target = cm.empty(self.mat.shape) self.mat.subtract(mat.mat, target=target) return PMAT(target)
def exp(self, inplace=False): if self.typ == "numpy": return PMAT(np.exp(self.mat)) elif self.typ == "cuda": if inplace: self.mat = cm.exp(self.mat) return self else: target = cm.empty(self.mat.shape) cm.exp(self.mat, target=target) return PMAT(target)
def element_multiply(self, mat, inplace=False): if self.typ == "numpy": return PMAT(self.mat * mat.mat) elif self.typ == "cuda": if inplace: self.mat = self.mat.mult(mat.mat) return self else: target = cm.empty(self.mat.shape) self.mat.mult(mat.mat, target=target) return PMAT(target)
def add_row_vec(self, rowvec, inplace=False): if self.typ == "numpy": return PMAT(self.mat + rowvec.mat) elif self.typ == "cuda": if inplace: self.mat.add_row_vec(rowvec.mat) return self else: target = cm.empty(self.mat.shape) self.mat.add_row_vec(rowvec.mat, target=target) return PMAT(target)
def multiply_by_row(self, rowvec, inplace=False): if self.typ == "numpy": return PMAT(self.mat * rowvec.mat) elif self.typ == "cuda": if inplace: self.mat.mult_by_row(rowvec.mat) return self else: target = cm.empty(self.mat.shape) self.mat.mult_by_row(rowvec.mat, target=target) return PMAT(target)
def divide_by_row(self, rowvec, inplace=False): if self.typ == 'numpy': return PMAT(self.mat / rowvec.mat) elif self.typ == 'cuda': if inplace: rowvec.mat.reciprocal() self.mat.mult_by_row(rowvec.mat) return self else: target = cm.empty(self.mat.shape) rowvec.mat.reciprocal() self.mat.mult_by_row(rowvec.mat, target=target) return PMAT(target)