def feedf(self, data): """ Pool features within a given receptive from the input data. Args: ----- data: An N x k x m1 x n1 array of input plains. Returns: ------- A N x k x m2 x n2 array of output plains. """ if self.decode: if self.type == 'max': pooled = np.kron(data, np.ones(self.factor)) else: pooled = np.kron(data, np.ones( self.factor)) * (1.0 / np.sum(self.factor)) else: if self.type == 'max': pooled, self.positions = maxpool(data, self.factor) else: pooled = downsample(data, (1, 1, self.factor[0], self.factor[1])) return pooled
def bprop(self, dEdo): """ Compute error gradients and return sum of error from output down to this layer. Args: ----- dEdo: A N x l x m2 x n2 array of errors from prev layers. Returns: -------- A N x k x x m1 x m1 array of errors. """ if self.decode: dE = downsample(dEdo, (1, 1, self.factor[0], self.factor[1])) * np.sum( self.factor) else: if self.type == 'max': dE = np.kron(dEdo, np.ones(self.factor)) * self.positions else: dE = np.kron(dEdo, np.ones( self.factor)) * (1.0 / np.sum(self.factor)) return dE
def processState(self): """ Return the processed current state of the robot. Args: ---- A tuple of touch, ir and image sensors reading. """ state, factor = self.state, self.params['downsample'] touch, ir, img = state[0][0], state[0][1], [obsv[2] for obsv in state] img = np.asarray(img) img = np.transpose(img, (1, 2, 0)) img = downsample(img, (factor[0], factor[1], 1)) return (touch, ir, img)
def processState(self, state): """ Process the sequence of frames that make up a state. Args: ----- state: A list of img_height x img_width arrays repr. frames. Returns: -------- An cropped_img_height x cropped_img_width x no_frames array. """ same_state = state if len(state) < self.game_params['state_frames']: same_state = state + ([state[-1]] * (self.game_params['state_frames'] - len(state))) #TODO: remove flickering between frames. phi_s = np.asarray(same_state) phi_s = np.transpose(phi_s, (1, 2, 0)) return downsample(phi_s, (self.game_params['downsample'][0], self.game_params['downsample'][1], 1))
def feedf(self, data): """ Pool features within a given receptive from the input data. Args: ----- data: An N x k x m1 x n1 array of input plains. Returns: ------- A N x k x m2 x n2 array of output plains. """ if self.type == 'max': _data = np.asarray(data, dtype='float32') x = tn.ftensor4('x') f = thn.function([], max_pool(x, self.factor), givens={x: shared(_data)}) g = thn.function([], max_pool_same(x, self.factor)/x, givens={x: shared(_data + 0.0000000001)}) self.grad = g() self.grad[np.where(np.isnan(self.grad))] = 0 return f() else: return downsample(data, (1, 1, self.factor[0], self.factor[1]))
def bprop(self, dEdo): """ Compute error gradients and return sum of error from output down to this layer. Args: ----- dEdo: A N x l x m2 x n2 array of errors from prev layers. Returns: -------- A N x k x x m1 x m1 array of errors. """ if self.decode: dE = downsample(dEdo, (1, 1, self.factor[0], self.factor[1])) * np.sum(self.factor) else: if self.type == 'max': dE = np.kron(dEdo, np.ones(self.factor)) * self.positions else: dE = np.kron(dEdo, np.ones(self.factor)) * (1.0 / np.sum(self.factor)) return dE
def feedf(self, data): """ Pool features within a given receptive from the input data. Args: ----- data: An N x k x m1 x n1 array of input plains. Returns: ------- A N x k x m2 x n2 array of output plains. """ if self.decode: if self.type == 'max': pooled = np.kron(data, np.ones(self.factor)) else: pooled = np.kron(data, np.ones(self.factor)) * (1.0 / np.sum(self.factor)) else: if self.type == 'max': pooled, self.positions = maxpool(data, self.factor) else: pooled = downsample(data, (1, 1, self.factor[0], self.factor[1])) return pooled