我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用theano.tensor.tensor()。
def init_variational_inference(self, x): '''Initialize variational inference. Args: x (T.tensor): Data samples Returns: T.tensor: Initial variational parameters. ''' model = self.model if self.init_inference == 'recognition_network': print 'Initializing %s inference with recognition network' % self.name q0 = model.posterior.feed(x) elif self.init_inference == 'from_prior': print 'Initializing %s inference with prior parameters' % self.name q0 = model.prior.get_center(**model.prior.get_params()) else: raise ValueError(self.init_inference) return q0
def __call__(self, x, y, **model_args): '''Call function for performing inference. Args: x (T.tensor): Input data sample for posterior, p(h|x) y (T.tensor): Output data sample for conditional, p(x|h) model_args (dict): dictionary of arguments for model results. Returns: OrderedDict: results. OrderedDict: tensors for visualization, etc. list: constants in learning theano.OrderedUpdates: updates. ''' model = self.model inference_outs, constants, updates = self.inference(x, y) qk = inference_outs['qk'] results, samples, constants_m, updates_m = model(x, y, qk=qk, **model_args) constants += constants_m updates += updates_m return results, samples, constants, updates
def __call__(self, x, y, **model_args): '''Call function for performing inference. Args: x (T.tensor): Input data sample for posterior, p(h|x) y (T.tensor): Output data sample for conditional, p(x|h) model_args (dict): dictionary of arguments for model results. Returns: OrderedDict: results. OrderedDict: tensors for visualization, etc. list: constants in learning theano.OrderedUpdates: updates. ''' model = self.model inference_outs, constants, updates = self.inference(x, y) qks = inference_outs['qks'] results, samples, constants_m, updates_m = model(x, y, qks=qks, **model_args) constants += constants_m updates += updates_m return results, samples, constants, updates
def l2_decay(self, gamma, layers=None): '''L2 decay cost. Args: gamma (float): l2 decay rate. layers (Optional[list]): layer numbers to do l2 decay on. Returns: T.tensor: L2 cost. ''' if layers is None: layers = range(self.n_layers) cost = T.constant(0.).astype(floatX) for l in layers: W = self.__dict__['W%d' % l] cost += gamma * (W ** 2).sum() return cost
def log_marginal(self, y, h, py, q): '''Computes the approximate log marginal. Uses \log \sum p / q - \log N Args: y: T.tensor, target values. h: T.tensor, latent samples. py: T.tesnor, conditional density p(y | h) q: approximate posterior q(h | y) Returns: approximate log marginal. ''' log_py_h = -self.conditional.neg_log_prob(y, py) log_ph = -self.prior.neg_log_prob(h) log_qh = -self.posterior.neg_log_prob(h, q) assert log_py_h.ndim == log_ph.ndim == log_qh.ndim log_p = log_py_h + log_ph - log_qh log_p_max = T.max(log_p, axis=0, keepdims=True) w = T.exp(log_p - log_p_max) return (T.log(w.mean(axis=0, keepdims=True)) + log_p_max).mean()
def step_gibbs(self, r_h, r_v, h, *params): '''Step Gibbs sample. Args: r_h (theano.randomstream): random variables for hiddens. r_v (theano.randomstream): random variables for visibles. h (T.tensor): hidden state. *params: theano shared variables. Returns: T.tensor: hidden samples. T.tensor: visible samples. T.tensor: conditional hidden probability. T.tensor: conditional visible probability. ''' v, pv = self.step_sv_h(r_v, h, *params) h, ph = self.step_sh_v(r_h, v, *params) return h, v, ph, pv
def reconstruct(self, x): '''Reconstruction error (cross entropy). Performs one step of Gibbs. Args: x (T.tensor): input Returns: pv (T.tensor): visible conditional probability density from hidden sampled from :math:`p(h | x)` ''' r = self.trng.uniform( size=(x.shape[0], self.h_dist.dim), dtype=floatX) h, ph = self.step_sh_v(r, x, *self.get_params()) pv = self.step_pv_h(h, *self.get_params()) return pv
def step_free_energy(self, x, beta, *params): '''Step free energy function. Args: x (T.tensor): data sample. beta (float): beta value for annealing. *params: theano shared variables. Returns: T.tensor: free energy. ''' W, v_params, h_params = self.split_params(*params) vis_term = beta * self.v_dist.get_energy_bias(x, *v_params) x = self.v_dist.scale_for_energy_model(x, *v_params) hid_act = beta * (T.dot(x, W) + self.h_dist.get_center(*h_params)) fe = -vis_term - T.log(1. + T.exp(hid_act)).sum(axis=1) return fe
def free_energy(self, x): '''Free energy function. Args: x (T.tensor): data sample. Returns: T.tensor: free energy. ''' if x.ndim == 3: reduce_dims = (x.shape[0], x.shape[1]) x = x.reshape((reduce_dims[0] * reduce_dims[1], x.shape[2])) else: reduce_dims = None fe = self.step_free_energy(x, 1., *self.get_params()) if reduce_dims is not None: fe = fe.reshape(reduce_dims) return fe
def free_energy_h(self, h): '''Free energy function for hidden states. Args: h (T.tensor): hidden sample. Returns: T.tensor: free energy. ''' if h.ndim == 3: reduce_dims = (h.shape[0], h.shape[1]) h = h.reshape((reduce_dims[0] * reduce_dims[1], h.shape[2])) else: reduce_dims = None fe = self.step_free_energy_h(h, 1., *self.get_params()) if reduce_dims is not None: fe = fe.reshape(reduce_dims) return fe
def _step(self, m, y, h_, Ur): '''Step function for RNN call. Args: m (T.tensor): masks. y (T.tensor): inputs. h_ (T.tensor): recurrent state. Ur (theano.shared): recurrent connection. Returns: T.tensor: next recurrent state. ''' preact = T.dot(h_, Ur) + y h = T.tanh(preact) h = m * h + (1 - m) * h_ return h
def call_seqs(self, x, condition_on, level, *params): '''Prepares the input for __call__ Args: x (T.tensor): input condtion_on (T.tensor or None): tensor to condition recurrence on. level (int): reccurent level. *params: list of theano.shared. Returns: list: list of scan inputs. ''' if level == 0: i_params = self.get_input_args(*params) a = self.input_net.step_preact(x, *i_params) else: i_params = self.get_inter_args(level - 1, *params) a = self.inter_nets[level - 1].step_preact(x, *i_params) if condition_on is not None: a += condition_on return [a]
def __init__(self, dim, name='distribution', must_sample=False, scale=1, **kwargs): '''Init function for Distribution class. Args: dim (int): dimension of distribution. must_sample (bool). scale (int): scale for distribution tensor. ''' self.dim = dim self.must_sample = must_sample self.scale = scale kwargs = init_weights(self, **kwargs) kwargs = init_rngs(self, **kwargs) super(Distribution, self).__init__(name=name)
def debug_shape(X, x, t_out, updates=None): '''Debug function that returns the shape then raises assert error. Raises assert False. For debugging shape only. Args: X (T.tensor): input tensor. x (numpy.array): input values. t_out (T.tensor): output tensor. updates (theano.OrderedUpdates): updates for function. ''' f = theano.function([X], t_out, updates=updates) out = f(x) print out.shape assert False
def shuffle_columns(x, srng): '''Shuffles a tensor along the second index. Args: x (T.tensor). srng (sharedRandomstream). ''' def step_shuffle(m, perm): return m[perm] perm_mat = srng.permutation(n=x.shape[0], size=(x.shape[1],)) y, _ = scan( step_shuffle, [x.transpose(1, 0, 2), perm_mat], [None], [], x.shape[1], name='shuffle', strict=False) return y.transpose(1, 0, 2)
def _slice(_x, n, dim): '''Slice a tensor into 2 along last axis. Extended from Cho's arctic repo. Args: _x (T.tensor). n (int). dim (int). Returns: T.tensor. ''' if _x.ndim == 1: return _x[n*dim:(n+1)*dim] elif _x.ndim == 2: return _x[:, n*dim:(n+1)*dim] elif _x.ndim == 3: return _x[:, :, n*dim:(n+1)*dim] elif _x.ndim == 4: return _x[:, :, :, n*dim:(n+1)*dim] else: raise ValueError('Number of dims (%d) not supported' ' (but can add easily here)' % _x.ndim)
def _slice2(_x, start, end): '''Slightly different slice function than above. Args: _x (T.tensor). start (int). end (int). Returns: T.tensor. ''' if _x.ndim == 1: return _x[start:end] elif _x.ndim == 2: return _x[:, start:end] elif _x.ndim == 3: return _x[:, :, start:end] elif _x.ndim == 4: return _x[:, :, :, start:end] else: raise ValueError('Number of dims (%d) not supported' ' (but can add easily here)' % _x.ndim)
def __init__(self, inpshape=None): super(temporalizelayer, self).__init__() # Input must be non-sequential self.dim = 2 self.inpdim = 4 self.issequence = False self.allowsequences = False # Shape inference self.inpshape = list(inpshape) if inpshape is not None else [None, ] * self.inpdim # Containers for input and output self.x = T.tensor('floatX', [False, ] * self.inpdim, name='x:' + str(id(self))) self.y = T.tensor('floatX', [False, ] * (self.inpdim + 1), name='y:' + str(id(self))) self.xr = T.tensor('floatX', [False, ] * self.inpdim, name='xr:' + str(id(self)))
def test_advinc_subtensor1(): # Test the second case in the opt local_gpu_advanced_incsubtensor1 for shp in [(3, 3), (3, 3, 3)]: shared = gpuarray_shared_constructor xval = numpy.arange(numpy.prod(shp), dtype='float32').reshape(shp) + 1 yval = numpy.empty((2,) + shp[1:], dtype='float32') yval[:] = 10 x = shared(xval, name='x') y = tensor.tensor(dtype='float32', broadcastable=(False,) * len(shp), name='y') expr = tensor.advanced_inc_subtensor1(x, y, [0, 2]) f = theano.function([y], expr, mode=mode_with_gpu) assert sum([isinstance(node.op, GpuAdvancedIncSubtensor1) for node in f.maker.fgraph.toposort()]) == 1 rval = f(yval) rep = xval.copy() rep[[0, 2]] += yval assert numpy.allclose(rval, rep)
def test_adv_subtensor(): # Test the advancedsubtensor on gpu. shp = (2, 3, 4) shared = gpuarray_shared_constructor xval = numpy.arange(numpy.prod(shp), dtype=theano.config.floatX).reshape(shp) idx1, idx2 = tensor.ivectors('idx1', 'idx2') idxs = [idx1, None, slice(0, 2, 1), idx2, None] x = shared(xval, name='x') expr = x[idxs] f = theano.function([idx1, idx2], expr, mode=mode_with_gpu) assert sum([isinstance(node.op, GpuAdvancedSubtensor) for node in f.maker.fgraph.toposort()]) == 1 idx1_val = [0, 1] idx2_val = [0, 1] rval = f(idx1_val, idx2_val) rep = xval[idx1_val, None, slice(0, 2, 1), idx2_val, None] assert numpy.allclose(rval, rep)
def test_csm_grad(self): for sparsetype in ('csr', 'csc'): x = tensor.vector() y = tensor.ivector() z = tensor.ivector() s = tensor.ivector() call = getattr(sp, sparsetype + '_matrix') spm = call(random_lil((300, 400), config.floatX, 5)) out = tensor.grad(dense_from_sparse( CSM(sparsetype)(x, y, z, s) ).sum(), x) self._compile_and_check([x, y, z, s], [out], [spm.data, spm.indices, spm.indptr, spm.shape], (CSMGrad, CSMGradC) )
def __generalized_sd_test(self, theanop, symbolicType, testOp, scipyType): scipy_ver = [int(n) for n in scipy.__version__.split('.')[:2]] if (bool(scipy_ver < [0, 13])): raise SkipTest("comparison operators need newer release of scipy") x = symbolicType() y = theano.tensor.matrix() op = theanop(x, y) f = theano.function([x, y], op) m1 = scipyType(random_lil((10, 40), config.floatX, 3)) m2 = self._rand_ranged(1000, -1000, [10, 40]) self.assertTrue(numpy.array_equal(f(m1, m2).data, testOp(m1, m2).data))
def __generalized_ds_test(self, theanop, symbolicType, testOp, scipyType): scipy_ver = [int(n) for n in scipy.__version__.split('.')[:2]] if (bool(scipy_ver < [0, 13])): raise SkipTest("comparison operators need newer release of scipy") x = symbolicType() y = theano.tensor.matrix() op = theanop(y, x) f = theano.function([y, x], op) m1 = scipyType(random_lil((10, 40), config.floatX, 3)) m2 = self._rand_ranged(1000, -1000, [10, 40]) self.assertTrue(numpy.array_equal(f(m2, m1).data, testOp(m2, m1).data))
def test_equality_case(self): """ Test assuring normal behaviour when values in the matrices are equal """ scipy_ver = [int(n) for n in scipy.__version__.split('.')[:2]] if (bool(scipy_ver < [0, 13])): raise SkipTest("comparison operators need newer release of scipy") x = sparse.csc_matrix() y = theano.tensor.matrix() m1 = sp.csc_matrix((2, 2), dtype=theano.config.floatX) m2 = numpy.asarray([[0, 0], [0, 0]], dtype=theano.config.floatX) for func in self.testsDic: op = func(y, x) f = theano.function([y, x], op) self.assertTrue(numpy.array_equal(f(m2, m1), self.testsDic[func](m2, m1)))
def test_csm_unsorted(self): """ Test support for gradients of unsorted inputs. """ sp_types = {'csc': sp.csc_matrix, 'csr': sp.csr_matrix} for format in ['csr', 'csc', ]: for dtype in ['float32', 'float64']: x = tensor.tensor(dtype=dtype, broadcastable=(False,)) y = tensor.ivector() z = tensor.ivector() s = tensor.ivector() # Sparse advanced indexing produces unsorted sparse matrices a = sparse_random_inputs(format, (4, 3), out_dtype=dtype, unsorted_indices=True)[1][0] # Make sure it's unsorted assert not a.has_sorted_indices def my_op(x): y = tensor.constant(a.indices) z = tensor.constant(a.indptr) s = tensor.constant(a.shape) return tensor.sum( dense_from_sparse(CSM(format)(x, y, z, s) * a)) verify_grad_sparse(my_op, [a.data])
def test_csm(self): sp_types = {'csc': sp.csc_matrix, 'csr': sp.csr_matrix} for format in ['csc', 'csr']: for dtype in ['float32', 'float64']: x = tensor.tensor(dtype=dtype, broadcastable=(False,)) y = tensor.ivector() z = tensor.ivector() s = tensor.ivector() f = theano.function([x, y, z, s], CSM(format)(x, y, z, s)) spmat = sp_types[format](random_lil((4, 3), dtype, 3)) res = f(spmat.data, spmat.indices, spmat.indptr, numpy.asarray(spmat.shape, 'int32')) assert numpy.all(res.data == spmat.data) assert numpy.all(res.indices == spmat.indices) assert numpy.all(res.indptr == spmat.indptr) assert numpy.all(res.shape == spmat.shape)
def test_csr_dense(self): x = theano.sparse.csr_matrix('x') y = theano.tensor.matrix('y') v = theano.tensor.vector('v') for (x, y, x_v, y_v) in [(x, y, self.x_csr, self.y), (x, v, self.x_csr, self.v_100), (v, x, self.v_10, self.x_csr)]: f_a = theano.function([x, y], theano.sparse.dot(x, y)) f_b = lambda x, y: x * y utt.assert_allclose(f_a(x_v, y_v), f_b(x_v, y_v)) # Test infer_shape self._compile_and_check([x, y], [theano.sparse.dot(x, y)], [x_v, y_v], (Dot, Usmm, UsmmCscDense))
def test_csc_dense(self): x = theano.sparse.csc_matrix('x') y = theano.tensor.matrix('y') v = theano.tensor.vector('v') for (x, y, x_v, y_v) in [(x, y, self.x_csc, self.y), (x, v, self.x_csc, self.v_100), (v, x, self.v_10, self.x_csc)]: f_a = theano.function([x, y], theano.sparse.dot(x, y)) f_b = lambda x, y: x * y utt.assert_allclose(f_a(x_v, y_v), f_b(x_v, y_v)) # Test infer_shape self._compile_and_check([x, y], [theano.sparse.dot(x, y)], [x_v, y_v], (Dot, Usmm, UsmmCscDense))
def test_int32_dtype(self): # Reported on the theano-user mailing-list: # https://groups.google.com/d/msg/theano-users/MT9ui8LtTsY/rwatwEF9zWAJ size = 9 intX = 'int32' C = tensor.matrix('C', dtype=intX) I = tensor.matrix('I', dtype=intX) fI = I.flatten() data = tensor.ones_like(fI) indptr = tensor.arange(data.shape[0] + 1, dtype='int32') m1 = sparse.CSR(data, fI, indptr, (8, size)) m2 = sparse.dot(m1, C) y = m2.reshape(shape=(2, 4, 9), ndim=3) f = theano.function(inputs=[I, C], outputs=y) i = numpy.asarray([[4, 3, 7, 7], [2, 8, 4, 5]], dtype=intX) a = numpy.asarray(numpy.random.randint(0, 100, (size, size)), dtype=intX) f(i, a)
def test_grad(self): for format in sparse.sparse_formats: for i_dtype in sparse.float_dtypes: for o_dtype in tensor.float_dtypes: if o_dtype == 'float16': # Don't test float16 output. continue _, data = sparse_random_inputs( format, shape=(4, 7), out_dtype=i_dtype) eps = None if o_dtype == 'float32': eps = 1e-2 verify_grad_sparse(Cast(o_dtype), data, eps=eps)
def test_structured_add_s_v(self): sp_types = {'csc': sp.csc_matrix, 'csr': sp.csr_matrix} for format in ['csr', 'csc']: for dtype in ['float32', 'float64']: x = theano.sparse.SparseType(format, dtype=dtype)() y = tensor.vector(dtype=dtype) f = theano.function([x, y], structured_add_s_v(x, y)) spmat = sp_types[format](random_lil((4, 3), dtype, 3)) spones = spmat.copy() spones.data = numpy.ones_like(spones.data) mat = numpy.asarray(numpy.random.rand(3), dtype=dtype) out = f(spmat, mat) utt.assert_allclose(as_ndarray(spones.multiply(spmat + mat)), out.toarray())
def test_op_sd(self): for format in sparse.sparse_formats: for dtype in sparse.all_dtypes: variable, data = sparse_random_inputs(format, shape=(10, 10), out_dtype=dtype, n=2, p=0.1) variable[1] = tensor.TensorType(dtype=dtype, broadcastable=(False, False))() data[1] = data[1].toarray() f = theano.function(variable, self.op(*variable)) tested = f(*data) expected = numpy.dot(data[0].toarray(), data[1]) assert tested.format == format assert tested.dtype == expected.dtype tested = tested.toarray() utt.assert_allclose(tested, expected)
def _is_sparse_variable(x): """ Returns ------- boolean True iff x is a L{SparseVariable} (and not a L{tensor.TensorType}, for instance). """ if not isinstance(x, gof.Variable): raise NotImplementedError("this function should only be called on " "*variables* (of type sparse.SparseType " "or tensor.TensorType, for instance), not ", x) return isinstance(x.type, SparseType)
def as_sparse_or_tensor_variable(x, name=None): """ Same as `as_sparse_variable` but if we can't make a sparse variable, we try to make a tensor variable. Parameters ---------- x A sparse matrix. Returns ------- SparseVariable or TensorVariable version of `x` """ try: return as_sparse_variable(x, name) except (ValueError, TypeError): return theano.tensor.as_tensor_variable(x, name)
def sp_zeros_like(x): """ Construct a sparse matrix of zeros. Parameters ---------- x Sparse matrix to take the shape. Returns ------- A sparse matrix The same as `x` with zero entries for all element. """ # TODO: don't restrict to CSM formats _, _, indptr, shape = csm_properties(x) return CSM(format=x.format)(data=numpy.array([], dtype=x.type.dtype), indices=numpy.array([], dtype='int32'), indptr=tensor.zeros_like(indptr), shape=shape)
def __getitem__(self, args): if not isinstance(args, tuple): args = args, if len(args) == 2: scalar_arg_1 = (numpy.isscalar(args[0]) or getattr(args[0], 'type', None) == tensor.iscalar) scalar_arg_2 = (numpy.isscalar(args[1]) or getattr(args[1], 'type', None) == tensor.iscalar) if scalar_arg_1 and scalar_arg_2: ret = get_item_scalar(self, args) elif isinstance(args[0], list): ret = get_item_2lists(self, args[0], args[1]) else: ret = get_item_2d(self, args) elif isinstance(args[0], list): ret = get_item_list(self, args[0]) else: ret = get_item_2d(self, args) return ret
def make_node(self, x, index, gz): x = as_sparse_variable(x) gz = as_sparse_variable(gz) assert x.format in ["csr", "csc"] assert gz.format in ["csr", "csc"] ind = tensor.as_tensor_variable(index) assert ind.ndim == 1 assert "int" in ind.dtype scipy_ver = [int(n) for n in scipy.__version__.split('.')[:2]] if not scipy_ver >= [0, 13]: raise NotImplementedError("Scipy version is to old") return gof.Apply(self, [x, ind, gz], [x.type()])
def make_node(self, x, y): x, y = as_sparse_variable(x), tensor.as_tensor_variable(y) assert x.format in ["csr", "csc"] # upcast the tensor. Is the cast of sparse done implemented? dtype = scalar.upcast(x.type.dtype, y.type.dtype) # The magic number two here arises because L{scipy.sparse} # objects must be matrices (have dimension 2) # Broadcasting of the sparse matrix is not supported. # We support nd == 0 used by grad of SpSum() assert y.type.ndim in [0, 2] out = SparseType(dtype=dtype, format=x.type.format)() return gof.Apply(self, [x, y], [out])
def grad(self, inputs, gout): (gz,) = gout is_continuous = [(inputs[i].dtype in tensor.continuous_dtypes) for i in range(len(inputs))] if _is_sparse_variable(gz): gz = dense_from_sparse(gz) split = tensor.Split(len(inputs))(gz, 1, tensor.stack( [x.shape[1] for x in inputs])) if not isinstance(split, list): split = [split] derivative = [SparseFromDense(self.format)(s) for s in split] def choose(continuous, derivative): if continuous: return derivative else: return None return [choose(c, d) for c, d in zip(is_continuous, derivative)]
def grad(self, inputs, gout): (gz,) = gout is_continuous = [(inputs[i].dtype in tensor.continuous_dtypes) for i in range(len(inputs))] if _is_sparse_variable(gz): gz = dense_from_sparse(gz) split = tensor.Split(len(inputs))(gz, 0, tensor.stack( [x.shape[0] for x in inputs])) if not isinstance(split, list): split = [split] derivative = [SparseFromDense(self.format)(s) for s in split] def choose(continuous, derivative): if continuous: return derivative else: return None return [choose(c, d) for c, d in zip(is_continuous, derivative)]
def grad(self, inputs, gout): (x, y) = inputs (gz,) = gout assert _is_sparse_variable(x) or _is_sparse_variable(y) rval = [] if _is_dense_variable(y): rval.append(tensor.dot(gz, y.T)) else: rval.append(dot(gz, y.T)) if _is_dense_variable(x): rval.append(tensor.dot(x.T, gz)) else: rval.append(dot(x.T, gz)) return rval
def local_csm_properties_csm(node): """ If we find csm_properties(CSM(*args)), then we can replace that with the *args directly. """ if node.op == csm_properties: csm, = node.inputs if csm.owner and (csm.owner.op == CSC or csm.owner.op == CSR): # csm.owner.inputs could be broadcastable. In that case, we have # to adjust the broadcasting flag here. ret_var = [theano.tensor.patternbroadcast(i, o.broadcastable) for i, o in izip(csm.owner.inputs, node.outputs)] return ret_var return False
def make_node(self, x, y): x, y = sparse.as_sparse_variable(x), tensor.as_tensor_variable(y) out_dtype = scalar.upcast(x.type.dtype, y.type.dtype) if self.inplace: assert out_dtype == y.dtype indices, indptr, data = csm_indices(x), csm_indptr(x), csm_data(x) # We either use CSC or CSR depending on the format of input assert self.format == x.type.format # The magic number two here arises because L{scipy.sparse} # objects must be matrices (have dimension 2) assert y.type.ndim == 2 out = tensor.TensorType(dtype=out_dtype, broadcastable=y.type.broadcastable)() return gof.Apply(self, [data, indices, indptr, y], [out])
def test_DownsampleFactorMax_hessian(self): # Example provided by Frans Cronje, see # https://groups.google.com/d/msg/theano-users/qpqUy_3glhw/JMwIvlN5wX4J x_vec = tensor.vector('x') z = tensor.dot(x_vec.dimshuffle(0, 'x'), x_vec.dimshuffle('x', 0)) y = pool_2d(input=z, ds=(2, 2), ignore_border=True) C = tensor.exp(tensor.sum(y)) grad_hess = tensor.hessian(cost=C, wrt=x_vec) fn_hess = function(inputs=[x_vec], outputs=grad_hess) # The value has been manually computed from the theoretical gradient, # and confirmed by the implementation. assert numpy.allclose(fn_hess([1, 2]), [[0., 0.], [0., 982.7667]])
def test_max_pool_2d_2D(self): rng = numpy.random.RandomState(utt.fetch_seed()) maxpoolshps = ((1, 1), (3, 2)) imval = rng.rand(4, 5) images = tensor.dmatrix() for maxpoolshp, ignore_border, mode in product(maxpoolshps, [True, False], ['max', 'sum', 'average_inc_pad', 'average_exc_pad']): # print 'maxpoolshp =', maxpoolshp # print 'ignore_border =', ignore_border numpy_output_val = self.numpy_max_pool_2d(imval, maxpoolshp, ignore_border, mode=mode) output = pool_2d(images, maxpoolshp, ignore_border, mode=mode) output_val = function([images], output)(imval) utt.assert_allclose(output_val, numpy_output_val) def mp(input): return pool_2d(input, maxpoolshp, ignore_border, mode=mode) utt.verify_grad(mp, [imval], rng=rng)
def test_max_pool_3d_3D(self): rng = numpy.random.RandomState(utt.fetch_seed()) maxpoolshps = ((1, 1, 1), (3, 2, 1)) imval = rng.rand(4, 5, 6) images = tensor.dtensor3() for maxpoolshp, ignore_border, mode in product(maxpoolshps, [True, False], ['max', 'sum', 'average_inc_pad', 'average_exc_pad']): # print 'maxpoolshp =', maxpoolshp # print 'ignore_border =', ignore_border numpy_output_val = self.numpy_max_pool_nd(imval, maxpoolshp, ignore_border, mode=mode) output = pool_3d(images, maxpoolshp, ignore_border, mode=mode) output_val = function([images], output)(imval) utt.assert_allclose(output_val, numpy_output_val) def mp(input): return pool_3d(input, maxpoolshp, ignore_border, mode=mode) utt.verify_grad(mp, [imval], rng=rng)
def test_max_pool_2d_2D_same_size(self): rng = numpy.random.RandomState(utt.fetch_seed()) test_input_array = numpy.array([[[ [1., 2., 3., 4.], [5., 6., 7., 8.] ]]]).astype(theano.config.floatX) test_answer_array = numpy.array([[[ [0., 0., 0., 0.], [0., 6., 0., 8.] ]]]).astype(theano.config.floatX) input = tensor.tensor4(name='input') patch_size = (2, 2) op = max_pool_2d_same_size(input, patch_size) op_output = function([input], op)(test_input_array) utt.assert_allclose(op_output, test_answer_array) def mp(input): return max_pool_2d_same_size(input, patch_size) utt.verify_grad(mp, [test_input_array], rng=rng)
def make_node(self, a, b): assert imported_scipy, ( "Scipy not available. Scipy is needed for the Eigvalsh op") if b == theano.tensor.NoneConst: a = as_tensor_variable(a) assert a.ndim == 2 out_dtype = theano.scalar.upcast(a.dtype) w = theano.tensor.vector(dtype=out_dtype) return Apply(self, [a], [w]) else: a = as_tensor_variable(a) b = as_tensor_variable(b) assert a.ndim == 2 assert b.ndim == 2 out_dtype = theano.scalar.upcast(a.dtype, b.dtype) w = theano.tensor.vector(dtype=out_dtype) return Apply(self, [a, b], [w])
def test_kording_bug(self): x, y = vectors('xy') eps = scalar('eps') s = scalar('s') #r = theano.tensor.mul(theano.tensor.fill(x, 2.*a), x/a , (y+z) , a) #r = theano.tensor.mul((x/a+y) , a, z) r = tensor.mul(s - 1, eps + x / s, eps + y / s, s) f = function([s, eps, x, y], r ** 2) s_val = numpy.asarray(4, dtype=config.floatX) eps_val = numpy.asarray(1.e-6, dtype=config.floatX) x_val = numpy.asarray([1.5, 2], dtype=config.floatX) y_val = numpy.asarray([2.3, 3.1], dtype=config.floatX) r0 = f(s_val, eps_val, x_val, y_val) r1 = f(s_val, eps_val, x_val, y_val) r2 = f(s_val, eps_val, x_val, y_val) assert numpy.all(r0 == r1) assert numpy.all(r0 == r2)