提交 2b7ee2ec authored 作者: Frédéric Bastien's avatar Frédéric Bastien 提交者: GitHub

Merge pull request #5193 from kvmanohar22/numpy_imports

Numpy imports
...@@ -12,7 +12,7 @@ from __future__ import absolute_import, print_function, division ...@@ -12,7 +12,7 @@ from __future__ import absolute_import, print_function, division
import sys import sys
import numpy import numpy as np
from numpy.lib.stride_tricks import as_strided from numpy.lib.stride_tricks import as_strided
from six import integer_types from six import integer_types
from six.moves import xrange from six.moves import xrange
...@@ -86,11 +86,11 @@ def _is_dense(x): ...@@ -86,11 +86,11 @@ def _is_dense(x):
L{numpy.ndarray}). L{numpy.ndarray}).
""" """
if not isinstance(x, (scipy.sparse.spmatrix, numpy.ndarray)): if not isinstance(x, (scipy.sparse.spmatrix, np.ndarray)):
raise NotImplementedError("this function should only be called on " raise NotImplementedError("this function should only be called on "
"sparse.scipy.sparse.spmatrix or " "sparse.scipy.sparse.spmatrix or "
"numpy.ndarray, not,", x) "numpy.ndarray, not,", x)
return isinstance(x, numpy.ndarray) return isinstance(x, np.ndarray)
# Wrapper type # Wrapper type
...@@ -205,8 +205,8 @@ def sp_zeros_like(x): ...@@ -205,8 +205,8 @@ def sp_zeros_like(x):
# TODO: don't restrict to CSM formats # TODO: don't restrict to CSM formats
_, _, indptr, shape = csm_properties(x) _, _, indptr, shape = csm_properties(x)
return CSM(format=x.format)(data=numpy.array([], dtype=x.type.dtype), return CSM(format=x.format)(data=np.array([], dtype=x.type.dtype),
indices=numpy.array([], dtype='int32'), indices=np.array([], dtype='int32'),
indptr=tensor.zeros_like(indptr), indptr=tensor.zeros_like(indptr),
shape=shape) shape=shape)
...@@ -293,9 +293,9 @@ class _sparse_py_operators: ...@@ -293,9 +293,9 @@ class _sparse_py_operators:
args = args, args = args,
if len(args) == 2: if len(args) == 2:
scalar_arg_1 = (numpy.isscalar(args[0]) or scalar_arg_1 = (np.isscalar(args[0]) or
getattr(args[0], 'type', None) == tensor.iscalar) getattr(args[0], 'type', None) == tensor.iscalar)
scalar_arg_2 = (numpy.isscalar(args[1]) or scalar_arg_2 = (np.isscalar(args[1]) or
getattr(args[1], 'type', None) == tensor.iscalar) getattr(args[1], 'type', None) == tensor.iscalar)
if scalar_arg_1 and scalar_arg_2: if scalar_arg_1 and scalar_arg_2:
ret = get_item_scalar(self, args) ret = get_item_scalar(self, args)
...@@ -554,17 +554,17 @@ class CSM(gof.Op): ...@@ -554,17 +554,17 @@ class CSM(gof.Op):
data = tensor.as_tensor_variable(data) data = tensor.as_tensor_variable(data)
if not isinstance(indices, gof.Variable): if not isinstance(indices, gof.Variable):
indices_ = numpy.asarray(indices) indices_ = np.asarray(indices)
indices_32 = theano._asarray(indices, dtype='int32') indices_32 = theano._asarray(indices, dtype='int32')
assert (indices_ == indices_32).all() assert (indices_ == indices_32).all()
indices = indices_32 indices = indices_32
if not isinstance(indptr, gof.Variable): if not isinstance(indptr, gof.Variable):
indptr_ = numpy.asarray(indptr) indptr_ = np.asarray(indptr)
indptr_32 = theano._asarray(indptr, dtype='int32') indptr_32 = theano._asarray(indptr, dtype='int32')
assert (indptr_ == indptr_32).all() assert (indptr_ == indptr_32).all()
indptr = indptr_32 indptr = indptr_32
if not isinstance(shape, gof.Variable): if not isinstance(shape, gof.Variable):
shape_ = numpy.asarray(shape) shape_ = np.asarray(shape)
shape_32 = theano._asarray(shape, dtype='int32') shape_32 = theano._asarray(shape, dtype='int32')
assert (shape_ == shape_32).all() assert (shape_ == shape_32).all()
shape = shape_32 shape = shape_32
...@@ -606,7 +606,7 @@ class CSM(gof.Op): ...@@ -606,7 +606,7 @@ class CSM(gof.Op):
if self.format == 'csc': if self.format == 'csc':
out[0] = scipy.sparse.csc_matrix((data, indices.copy(), out[0] = scipy.sparse.csc_matrix((data, indices.copy(),
indptr.copy()), indptr.copy()),
numpy.asarray(shape), copy=False) np.asarray(shape), copy=False)
else: else:
assert self.format == 'csr' assert self.format == 'csr'
out[0] = scipy.sparse.csr_matrix((data, indices.copy(), out[0] = scipy.sparse.csr_matrix((data, indices.copy(),
...@@ -729,8 +729,8 @@ class CSMGrad(gof.op.Op): ...@@ -729,8 +729,8 @@ class CSMGrad(gof.op.Op):
else: else:
sp_dim = x_shape[0] sp_dim = x_shape[0]
g_row = numpy.zeros(sp_dim, dtype=g_data.dtype) g_row = np.zeros(sp_dim, dtype=g_data.dtype)
gout_data = numpy.zeros(x_data.shape, dtype=node.outputs[0].dtype) gout_data = np.zeros(x_data.shape, dtype=node.outputs[0].dtype)
for i in range(len(x_indptr) - 1): for i in range(len(x_indptr) - 1):
for j_ptr in range(g_indptr[i], g_indptr[i + 1]): for j_ptr in range(g_indptr[i], g_indptr[i + 1]):
...@@ -1100,7 +1100,7 @@ class GetItem2Lists(gof.op.Op): ...@@ -1100,7 +1100,7 @@ class GetItem2Lists(gof.op.Op):
x = inp[0] x = inp[0]
ind1 = inp[1] ind1 = inp[1]
ind2 = inp[2] ind2 = inp[2]
out[0] = numpy.asarray(x[ind1, ind2]).flatten() out[0] = np.asarray(x[ind1, ind2]).flatten()
""" """
Here scipy returns the corresponding elements in a matrix which isn't Here scipy returns the corresponding elements in a matrix which isn't
what we are aiming for. Using asarray and flatten, out[0] becomes an what we are aiming for. Using asarray and flatten, out[0] becomes an
...@@ -1244,7 +1244,7 @@ class GetItem2d(gof.op.Op): ...@@ -1244,7 +1244,7 @@ class GetItem2d(gof.op.Op):
elif ((isinstance(ind, gof.Variable) and elif ((isinstance(ind, gof.Variable) and
getattr(ind, 'ndim', -1) == 0) or getattr(ind, 'ndim', -1) == 0) or
numpy.isscalar(ind)): np.isscalar(ind)):
raise NotImplementedError( raise NotImplementedError(
'Theano has no sparse vector' + 'Theano has no sparse vector' +
'Use X[a:b, c:d], X[a:b, c:c+1] or X[a:b] instead.') 'Use X[a:b, c:d], X[a:b, c:c+1] or X[a:b] instead.')
...@@ -1653,9 +1653,9 @@ class SpSum(gof.op.Op): ...@@ -1653,9 +1653,9 @@ class SpSum(gof.op.Op):
(x,) = inputs (x,) = inputs
(z,) = outputs (z,) = outputs
if self.axis is None: if self.axis is None:
z[0] = numpy.asarray(x.sum()) z[0] = np.asarray(x.sum())
else: else:
z[0] = numpy.asarray(x.sum(self.axis)).ravel() z[0] = np.asarray(x.sum(self.axis)).ravel()
def grad(self, inputs, gout): def grad(self, inputs, gout):
(x,) = inputs (x,) = inputs
...@@ -2540,7 +2540,7 @@ class __ComparisonOpSD(gof.op.Op): ...@@ -2540,7 +2540,7 @@ class __ComparisonOpSD(gof.op.Op):
assert x.shape == y.shape assert x.shape == y.shape
assert _is_dense(y) assert _is_dense(y)
o = self.comparison(x, y).astype('uint8') o = self.comparison(x, y).astype('uint8')
o = numpy.asarray(o) o = np.asarray(o)
out[0] = o out[0] = o
def infer_shape(self, node, ins_shapes): def infer_shape(self, node, ins_shapes):
...@@ -3382,7 +3382,7 @@ class TrueDot(gof.op.Op): ...@@ -3382,7 +3382,7 @@ class TrueDot(gof.op.Op):
# 'ushort', 'intc', 'uintc', 'longlong', 'ulonglong', 'single', # 'ushort', 'intc', 'uintc', 'longlong', 'ulonglong', 'single',
# 'double', 'longdouble', 'csingle', 'cdouble', 'clongdouble'] # 'double', 'longdouble', 'csingle', 'cdouble', 'clongdouble']
# But ulonglong is uint64 on x86-64, but with a different typenum! # But ulonglong is uint64 on x86-64, but with a different typenum!
if rval.dtype.num != numpy.dtype(str(rval.dtype)).num: if rval.dtype.num != np.dtype(str(rval.dtype)).num:
assert str(rval.dtype) == node.outputs[0].dtype assert str(rval.dtype) == node.outputs[0].dtype
# Create a view with the expected typenum. # Create a view with the expected typenum.
format = node.outputs[0].type.format format = node.outputs[0].type.format
...@@ -3509,7 +3509,7 @@ class StructuredDot(gof.Op): ...@@ -3509,7 +3509,7 @@ class StructuredDot(gof.Op):
# dot of an NxM sparse matrix, with a Mx1 dense matrix, returns vector # dot of an NxM sparse matrix, with a Mx1 dense matrix, returns vector
# not matrix # not matrix
if variable.ndim == 1: if variable.ndim == 1:
variable = numpy.expand_dims(variable, 1) variable = np.expand_dims(variable, 1)
elif variable.ndim != 2: elif variable.ndim != 2:
raise Exception('Output of structured dot should be a matrix ' raise Exception('Output of structured dot should be a matrix '
'(ndim=2)') '(ndim=2)')
...@@ -3622,7 +3622,7 @@ class StructuredDotGradCSC(gof.Op): ...@@ -3622,7 +3622,7 @@ class StructuredDotGradCSC(gof.Op):
def perform(self, node, inputs, outputs): def perform(self, node, inputs, outputs):
(a_indices, a_indptr, b, g_ab) = inputs (a_indices, a_indptr, b, g_ab) = inputs
(out,) = outputs (out,) = outputs
g_a_data = numpy.zeros(a_indices.shape, dtype=g_ab.dtype) g_a_data = np.zeros(a_indices.shape, dtype=g_ab.dtype)
for j in xrange(len(a_indptr) - 1): for j in xrange(len(a_indptr) - 1):
ind0 = a_indptr[j] ind0 = a_indptr[j]
ind1 = a_indptr[j + 1] ind1 = a_indptr[j + 1]
...@@ -3631,7 +3631,7 @@ class StructuredDotGradCSC(gof.Op): ...@@ -3631,7 +3631,7 @@ class StructuredDotGradCSC(gof.Op):
# Depending on the type of g_ab and b (sparse or dense), # Depending on the type of g_ab and b (sparse or dense),
# the following dot product can result in a scalar or # the following dot product can result in a scalar or
# a (1, 1) sparse matrix. # a (1, 1) sparse matrix.
dot_val = numpy.dot(g_ab[i], b[j].T) dot_val = np.dot(g_ab[i], b[j].T)
if isinstance(dot_val, scipy.sparse.spmatrix): if isinstance(dot_val, scipy.sparse.spmatrix):
dot_val = dot_val[0, 0] dot_val = dot_val[0, 0]
g_a_data[i_idx] = dot_val g_a_data[i_idx] = dot_val
...@@ -3752,7 +3752,7 @@ class StructuredDotGradCSR(gof.Op): ...@@ -3752,7 +3752,7 @@ class StructuredDotGradCSR(gof.Op):
def perform(self, node, inputs, outputs): def perform(self, node, inputs, outputs):
(a_indices, a_indptr, b, g_ab) = inputs (a_indices, a_indptr, b, g_ab) = inputs
(out,) = outputs (out,) = outputs
g_a_data = numpy.zeros(a_indices.shape, dtype=g_ab.dtype) g_a_data = np.zeros(a_indices.shape, dtype=g_ab.dtype)
for i in xrange(len(a_indptr) - 1): # loop over rows for i in xrange(len(a_indptr) - 1): # loop over rows
ind0 = a_indptr[i] ind0 = a_indptr[i]
ind1 = a_indptr[i + 1] ind1 = a_indptr[i + 1]
...@@ -3763,7 +3763,7 @@ class StructuredDotGradCSR(gof.Op): ...@@ -3763,7 +3763,7 @@ class StructuredDotGradCSR(gof.Op):
# Depending on the type of g_ab and b (sparse or dense), # Depending on the type of g_ab and b (sparse or dense),
# the following dot product can result in a scalar or # the following dot product can result in a scalar or
# a (1, 1) sparse matrix. # a (1, 1) sparse matrix.
dot_val = numpy.dot(g_ab[i], b[j].T) dot_val = np.dot(g_ab[i], b[j].T)
if isinstance(dot_val, scipy.sparse.spmatrix): if isinstance(dot_val, scipy.sparse.spmatrix):
dot_val = dot_val[0, 0] dot_val = dot_val[0, 0]
g_a_data[j_idx] = dot_val g_a_data[j_idx] = dot_val
...@@ -3910,7 +3910,7 @@ class SamplingDot(gof.op.Op): ...@@ -3910,7 +3910,7 @@ class SamplingDot(gof.op.Op):
if not _is_sparse(p): if not _is_sparse(p):
raise TypeError(p) raise TypeError(p)
out[0] = p.__class__(p.multiply(numpy.dot(x, y.T))) out[0] = p.__class__(p.multiply(np.dot(x, y.T)))
def grad(self, inputs, gout): def grad(self, inputs, gout):
(x, y, p) = inputs (x, y, p) = inputs
...@@ -4243,7 +4243,7 @@ class ConstructSparseFromList(gof.Op): ...@@ -4243,7 +4243,7 @@ class ConstructSparseFromList(gof.Op):
out, = out_ out, = out_
rows, cols = values.shape rows, cols = values.shape
assert rows == len(ilist) assert rows == len(ilist)
indptr = numpy.arange(cols + 1) * rows indptr = np.arange(cols + 1) * rows
indices = as_strided(ilist, indices = as_strided(ilist,
strides=(0, ilist.strides[0]), strides=(0, ilist.strides[0]),
shape=(cols, ilist.shape[0])).flatten() shape=(cols, ilist.shape[0])).flatten()
......
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
import numpy import numpy as np
import scipy import scipy
import theano import theano
...@@ -879,7 +879,7 @@ local_usmm = gof.opt.PatternSub( ...@@ -879,7 +879,7 @@ local_usmm = gof.opt.PatternSub(
(theano.tensor.sub, 'z', (theano.tensor.sub, 'z',
(theano.tensor.mul, (theano.tensor.mul,
{'pattern': 'alpha', {'pattern': 'alpha',
'constraint': lambda expr: (numpy.all(expr.type.broadcastable) and 'constraint': lambda expr: (np.all(expr.type.broadcastable) and
theano.config.blas.ldflags)}, theano.config.blas.ldflags)},
(sparse._dot, 'x', 'y'))), (sparse._dot, 'x', 'y'))),
(usmm, (theano.tensor.neg, 'alpha'), 'x', 'y', 'z')) (usmm, (theano.tensor.neg, 'alpha'), 'x', 'y', 'z'))
......
...@@ -8,7 +8,7 @@ U{http://www-users.cs.umn.edu/~saad/software/SPARSKIT/paper.ps}. ...@@ -8,7 +8,7 @@ U{http://www-users.cs.umn.edu/~saad/software/SPARSKIT/paper.ps}.
""" """
# COPIED FROM hpu/icml09/sp.py # COPIED FROM hpu/icml09/sp.py
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
import numpy import numpy as np
import scipy import scipy
from scipy import sparse as scipy_sparse from scipy import sparse as scipy_sparse
from six.moves import xrange from six.moves import xrange
...@@ -81,18 +81,17 @@ class ConvolutionIndices(Op): ...@@ -81,18 +81,17 @@ class ConvolutionIndices(Op):
raise Exception("ws is obsolete and it must be always True") raise Exception("ws is obsolete and it must be always True")
(dx, dy) = strides (dx, dy) = strides
N = numpy
# inshp contains either 2 entries (height,width) or 3 (nfeatures,h,w) # inshp contains either 2 entries (height,width) or 3 (nfeatures,h,w)
# in the first case, default nfeatures to 1 # in the first case, default nfeatures to 1
if N.size(inshp) == 2: if np.size(inshp) == 2:
inshp = (1,) + inshp inshp = (1,) + inshp
inshp = N.array(inshp) inshp = np.array(inshp)
kshp = N.array(kshp) kshp = np.array(kshp)
ksize = N.prod(kshp) ksize = np.prod(kshp)
kern = ksize - 1 - N.arange(ksize) kern = ksize - 1 - np.arange(ksize)
# size of output image if doing proper convolution # size of output image if doing proper convolution
# (mode='full',dx=dy=0) outshp is the actual output shape # (mode='full',dx=dy=0) outshp is the actual output shape
...@@ -102,32 +101,32 @@ class ConvolutionIndices(Op): ...@@ -102,32 +101,32 @@ class ConvolutionIndices(Op):
s = -1 s = -1
else: else:
s = 1 s = 1
outshp = N.int64(N.ceil((inshp[1:] + s * kshp - s * 1) \ outshp = np.int64(np.ceil((inshp[1:] + s * kshp - s * 1) \
/ N.array([dy, dx], dtype='float'))) / np.array([dy, dx], dtype='float')))
if any(outshp <= 0): if any(outshp <= 0):
err = 'Invalid kernel', kshp, 'and/or step size', (dx, dy),\ err = 'Invalid kernel', kshp, 'and/or step size', (dx, dy),\
'for given input shape', inshp 'for given input shape', inshp
raise ValueError(err) raise ValueError(err)
outsize = N.prod(outshp) outsize = np.prod(outshp)
insize = N.prod(inshp) insize = np.prod(inshp)
# range of output units over which to iterate # range of output units over which to iterate
if mode == 'valid': if mode == 'valid':
lbound = N.array([kshp[0] - 1, kshp[1] - 1]) lbound = np.array([kshp[0] - 1, kshp[1] - 1])
ubound = lbound + (inshp[1:] - kshp + 1) ubound = lbound + (inshp[1:] - kshp + 1)
else: else:
lbound = N.zeros(2) lbound = np.zeros(2)
ubound = fulloutshp ubound = fulloutshp
# coordinates of image in "fulloutshp" coordinates # coordinates of image in "fulloutshp" coordinates
topleft = N.array([kshp[0] - 1, kshp[1] - 1]) topleft = np.array([kshp[0] - 1, kshp[1] - 1])
# bound when counting the receptive field # bound when counting the receptive field
botright = topleft + inshp[1:] botright = topleft + inshp[1:]
# sparse matrix specifics... # sparse matrix specifics...
if ws: if ws:
spmatshp = (outsize * N.prod(kshp) * inshp[0], insize) spmatshp = (outsize * np.prod(kshp) * inshp[0], insize)
else: else:
spmatshp = (nkern * outsize, insize) spmatshp = (nkern * outsize, insize)
spmat = scipy_sparse.lil_matrix(spmatshp) spmat = scipy_sparse.lil_matrix(spmatshp)
...@@ -152,17 +151,17 @@ class ConvolutionIndices(Op): ...@@ -152,17 +151,17 @@ class ConvolutionIndices(Op):
# FOR EACH OUTPUT PIXEL... # FOR EACH OUTPUT PIXEL...
# loop over output image height # loop over output image height
for oy in N.arange(lbound[0], ubound[0], dy): for oy in np.arange(lbound[0], ubound[0], dy):
# loop over output image width # loop over output image width
for ox in N.arange(lbound[1], ubound[1], dx): for ox in np.arange(lbound[1], ubound[1], dx):
# kern[l] is filter value to apply at (oj,oi) # kern[l] is filter value to apply at (oj,oi)
# for (iy,ix) # for (iy,ix)
l = 0 l = 0
# ... ITERATE OVER INPUT UNITS IN RECEPTIVE FIELD # ... ITERATE OVER INPUT UNITS IN RECEPTIVE FIELD
for ky in oy + N.arange(kshp[0]): for ky in oy + np.arange(kshp[0]):
for kx in ox + N.arange(kshp[1]): for kx in ox + np.arange(kshp[1]):
# verify if we are still within image # verify if we are still within image
# boundaries. Equivalent to # boundaries. Equivalent to
...@@ -173,13 +172,13 @@ class ConvolutionIndices(Op): ...@@ -173,13 +172,13 @@ class ConvolutionIndices(Op):
# convert to "valid" input space # convert to "valid" input space
# coords used to determine column # coords used to determine column
# index to write to in sparse mat # index to write to in sparse mat
iy, ix = N.array((ky, kx)) - topleft iy, ix = np.array((ky, kx)) - topleft
# determine raster-index of input pixel... # determine raster-index of input pixel...
# taking into account multiple # taking into account multiple
# input features # input features
col = iy * inshp[2] + ix + \ col = iy * inshp[2] + ix + \
fmapi * N.prod(inshp[1:]) fmapi * np.prod(inshp[1:])
# convert oy,ox values to output # convert oy,ox values to output
# space coordinates # space coordinates
...@@ -188,7 +187,7 @@ class ConvolutionIndices(Op): ...@@ -188,7 +187,7 @@ class ConvolutionIndices(Op):
else: else:
(y, x) = (oy, ox) - topleft (y, x) = (oy, ox) - topleft
# taking into account step size # taking into account step size
(y, x) = N.array([y, x]) / (dy, dx) (y, x) = np.array([y, x]) / (dy, dx)
# convert to row index of sparse matrix # convert to row index of sparse matrix
if ws: if ws:
...@@ -228,7 +227,7 @@ class ConvolutionIndices(Op): ...@@ -228,7 +227,7 @@ class ConvolutionIndices(Op):
if ws: if ws:
kmap = None kmap = None
else: else:
kmap = N.zeros(ntaps, dtype='int') kmap = np.zeros(ntaps, dtype='int')
k = 0 k = 0
# print 'TEMPORARY BUGFIX: REMOVE !!!' # print 'TEMPORARY BUGFIX: REMOVE !!!'
for j in xrange(spmat.shape[1]): for j in xrange(spmat.shape[1]):
...@@ -259,7 +258,7 @@ class ConvolutionIndices(Op): ...@@ -259,7 +258,7 @@ class ConvolutionIndices(Op):
indices, indptr, spmatshp, outshp = self.evaluate(inshp, kshp) indices, indptr, spmatshp, outshp = self.evaluate(inshp, kshp)
out_indices[0] = indices out_indices[0] = indices
out_indptr[0] = indptr out_indptr[0] = indptr
spmat_shape[0] = numpy.asarray(spmatshp) spmat_shape[0] = np.asarray(spmatshp)
convolution_indices = ConvolutionIndices() convolution_indices = ConvolutionIndices()
...@@ -318,13 +317,12 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None, ...@@ -318,13 +317,12 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None,
:TODO: test for 1D and think of how to do n-d convolutions :TODO: test for 1D and think of how to do n-d convolutions
""" """
N = numpy
# start by computing output dimensions, size, etc # start by computing output dimensions, size, etc
kern_size = N.int64(N.prod(kshp)) kern_size = np.int64(np.prod(kshp))
# inshp contains either 2 entries (height,width) or 3 (nfeatures,h,w) # inshp contains either 2 entries (height,width) or 3 (nfeatures,h,w)
# in the first case, default nfeatures to 1 # in the first case, default nfeatures to 1
if N.size(imgshp) == 2: if np.size(imgshp) == 2:
imgshp = (1,) + imgshp imgshp = (1,) + imgshp
# construct indices and index pointers for sparse matrix, which, # construct indices and index pointers for sparse matrix, which,
...@@ -334,12 +332,12 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None, ...@@ -334,12 +332,12 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None,
convolution_indices.conv_eval(imgshp, kshp, step, mode) convolution_indices.conv_eval(imgshp, kshp, step, mode)
# build sparse matrix, then generate stack of image patches # build sparse matrix, then generate stack of image patches
csc = theano.sparse.CSM(sptype)(N.ones(indices.size), indices, csc = theano.sparse.CSM(sptype)(np.ones(indices.size), indices,
indptr, spmat_shape) indptr, spmat_shape)
patches = (sparse.structured_dot(csc, images.T)).T patches = (sparse.structured_dot(csc, images.T)).T
# compute output of linear classifier # compute output of linear classifier
pshape = tensor.stack([images.shape[0] * tensor.as_tensor(N.prod(outshp)),\ pshape = tensor.stack([images.shape[0] * tensor.as_tensor(np.prod(outshp)),\
tensor.as_tensor(imgshp[0] * kern_size)]) tensor.as_tensor(imgshp[0] * kern_size)])
patch_stack = tensor.reshape(patches, pshape, ndim=2) patch_stack = tensor.reshape(patches, pshape, ndim=2)
...@@ -354,14 +352,14 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None, ...@@ -354,14 +352,14 @@ def convolve(kerns, kshp, nkern, images, imgshp, step=(1, 1), bias=None,
# now to have feature maps in raster order ... # now to have feature maps in raster order ...
# go from bsize*outshp x nkern to bsize x nkern*outshp # go from bsize*outshp x nkern to bsize x nkern*outshp
newshp = tensor.stack([images.shape[0],\ newshp = tensor.stack([images.shape[0],\
tensor.as_tensor(N.prod(outshp)),\ tensor.as_tensor(np.prod(outshp)),\
tensor.as_tensor(nkern)]) tensor.as_tensor(nkern)])
tensout = tensor.reshape(output, newshp, ndim=3) tensout = tensor.reshape(output, newshp, ndim=3)
output = tensor.DimShuffle((False,) * tensout.ndim, (0, 2, 1))(tensout) output = tensor.DimShuffle((False,) * tensout.ndim, (0, 2, 1))(tensout)
if flatten: if flatten:
output = tensor.flatten(output, 2) output = tensor.flatten(output, 2)
return output, N.hstack((nkern, outshp)) return output, np.hstack((nkern, outshp))
def max_pool(images, imgshp, maxpoolshp): def max_pool(images, imgshp, maxpoolshp):
...@@ -380,12 +378,11 @@ def max_pool(images, imgshp, maxpoolshp): ...@@ -380,12 +378,11 @@ def max_pool(images, imgshp, maxpoolshp):
:return: out1, symbolic result (2D tensor) :return: out1, symbolic result (2D tensor)
:return: out2, logical shape of the output :return: out2, logical shape of the output
""" """
N = numpy poolsize = np.int64(np.prod(maxpoolshp))
poolsize = N.int64(N.prod(maxpoolshp))
# imgshp contains either 2 entries (height,width) or 3 (nfeatures,h,w) # imgshp contains either 2 entries (height,width) or 3 (nfeatures,h,w)
# in the first case, default nfeatures to 1 # in the first case, default nfeatures to 1
if N.size(imgshp) == 2: if np.size(imgshp) == 2:
imgshp = (1,) + imgshp imgshp = (1,) + imgshp
# construct indices and index pointers for sparse matrix, which, # construct indices and index pointers for sparse matrix, which,
...@@ -401,12 +398,12 @@ def max_pool(images, imgshp, maxpoolshp): ...@@ -401,12 +398,12 @@ def max_pool(images, imgshp, maxpoolshp):
# print 'outshp = ', outshp # print 'outshp = ', outshp
# build sparse matrix, then generate stack of image patches # build sparse matrix, then generate stack of image patches
csc = theano.sparse.CSM(sptype)(N.ones(indices.size), indices, csc = theano.sparse.CSM(sptype)(np.ones(indices.size), indices,
indptr, spmat_shape) indptr, spmat_shape)
patches = sparse.structured_dot(csc, images.T).T patches = sparse.structured_dot(csc, images.T).T
pshape = tensor.stack([images.shape[0] *\ pshape = tensor.stack([images.shape[0] *\
tensor.as_tensor(N.prod(outshp)), tensor.as_tensor(np.prod(outshp)),
tensor.as_tensor(imgshp[0]), tensor.as_tensor(imgshp[0]),
tensor.as_tensor(poolsize)]) tensor.as_tensor(poolsize)])
patch_stack = tensor.reshape(patches, pshape, ndim=3) patch_stack = tensor.reshape(patches, pshape, ndim=3)
...@@ -414,7 +411,7 @@ def max_pool(images, imgshp, maxpoolshp): ...@@ -414,7 +411,7 @@ def max_pool(images, imgshp, maxpoolshp):
out1 = tensor.max(patch_stack, axis=2) out1 = tensor.max(patch_stack, axis=2)
pshape = tensor.stack([images.shape[0], pshape = tensor.stack([images.shape[0],
tensor.as_tensor(N.prod(outshp)), tensor.as_tensor(np.prod(outshp)),
tensor.as_tensor(imgshp[0])]) tensor.as_tensor(imgshp[0])])
out2 = tensor.reshape(out1, pshape, ndim=3) out2 = tensor.reshape(out1, pshape, ndim=3)
......
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
import numpy import numpy as np
from six.moves import xrange from six.moves import xrange
import theano import theano
import scipy.sparse import scipy.sparse
...@@ -74,7 +74,7 @@ class Poisson(gof.op.Op): ...@@ -74,7 +74,7 @@ class Poisson(gof.op.Op):
assert _is_sparse(x) assert _is_sparse(x)
assert x.format in ["csr", "csc"] assert x.format in ["csr", "csc"]
out[0] = x.copy() out[0] = x.copy()
out[0].data = numpy.asarray(numpy.random.poisson(out[0].data), out[0].data = np.asarray(np.random.poisson(out[0].data),
dtype=x.dtype) dtype=x.dtype)
out[0].eliminate_zeros() out[0].eliminate_zeros()
...@@ -123,7 +123,7 @@ class Binomial(gof.op.Op): ...@@ -123,7 +123,7 @@ class Binomial(gof.op.Op):
def perform(self, node, inputs, outputs): def perform(self, node, inputs, outputs):
(n, p, shape) = inputs (n, p, shape) = inputs
(out,) = outputs (out,) = outputs
binomial = numpy.random.binomial(n, p, size=shape) binomial = np.random.binomial(n, p, size=shape)
csx_matrix = getattr(scipy.sparse, self.format + '_matrix') csx_matrix = getattr(scipy.sparse, self.format + '_matrix')
out[0] = csx_matrix(binomial, dtype=self.dtype) out[0] = csx_matrix(binomial, dtype=self.dtype)
...@@ -195,14 +195,14 @@ class Multinomial(gof.op.Op): ...@@ -195,14 +195,14 @@ class Multinomial(gof.op.Op):
if n.ndim == 0: if n.ndim == 0:
for i in xrange(p.shape[0]): for i in xrange(p.shape[0]):
k, l = p.indptr[i], p.indptr[i + 1] k, l = p.indptr[i], p.indptr[i + 1]
out[0].data[k:l] = numpy.random.multinomial(n, p.data[k:l]) out[0].data[k:l] = np.random.multinomial(n, p.data[k:l])
elif n.ndim == 1: elif n.ndim == 1:
if n.shape[0] != p.shape[0]: if n.shape[0] != p.shape[0]:
raise ValueError('The number of element of n must be ' raise ValueError('The number of element of n must be '
'the same as the number of row of p.') 'the same as the number of row of p.')
for i in xrange(p.shape[0]): for i in xrange(p.shape[0]):
k, l = p.indptr[i], p.indptr[i + 1] k, l = p.indptr[i], p.indptr[i + 1]
out[0].data[k:l] = numpy.random.multinomial(n[i], p.data[k:l]) out[0].data[k:l] = np.random.multinomial(n[i], p.data[k:l])
def grad(self, inputs, outputs_gradients): def grad(self, inputs, outputs_gradients):
comment_n = "No gradient exists for the number of samples in class\ comment_n = "No gradient exists for the number of samples in class\
......
...@@ -11,7 +11,7 @@ if not theano.sparse.enable_sparse: ...@@ -11,7 +11,7 @@ if not theano.sparse.enable_sparse:
import scipy.sparse import scipy.sparse
from scipy.signal import convolve2d from scipy.signal import convolve2d
import scipy.sparse as sparse import scipy.sparse as sparse
import numpy import numpy as np
from six.moves import xrange from six.moves import xrange
from theano import function, tensor from theano import function, tensor
...@@ -43,8 +43,8 @@ class TestSP(unittest.TestCase): ...@@ -43,8 +43,8 @@ class TestSP(unittest.TestCase):
bias = tensor.dvector() bias = tensor.dvector()
kerns = tensor.dmatrix() kerns = tensor.dmatrix()
input = tensor.dmatrix() input = tensor.dmatrix()
rng = numpy.random.RandomState(3423489) rng = np.random.RandomState(3423489)
filters = rng.randn(nkern, numpy.prod(kshp)) filters = rng.randn(nkern, np.prod(kshp))
biasvals = rng.randn(nkern) biasvals = rng.randn(nkern)
for mode in ('FAST_COMPILE', 'FAST_RUN'): for mode in ('FAST_COMPILE', 'FAST_RUN'):
...@@ -57,12 +57,12 @@ class TestSP(unittest.TestCase): ...@@ -57,12 +57,12 @@ class TestSP(unittest.TestCase):
f = function([kerns, bias, input], output, mode=mode) f = function([kerns, bias, input], output, mode=mode)
# now test with real values # now test with real values
img2d = numpy.arange(bsize * numpy.prod(imshp)).reshape(( \ img2d = np.arange(bsize * np.prod(imshp)).reshape(( \
bsize,) + imshp) bsize,) + imshp)
img1d = img2d.reshape(bsize, -1) img1d = img2d.reshape(bsize, -1)
# create filters (need to be flipped to use convolve2d) # create filters (need to be flipped to use convolve2d)
filtersflipped = numpy.zeros((nkern,) + kshp) filtersflipped = np.zeros((nkern,) + kshp)
for k in range(nkern): for k in range(nkern):
it = reversed(filters[k, :]) it = reversed(filters[k, :])
for i in range(kshp[0]): for i in range(kshp[0]):
...@@ -71,11 +71,11 @@ class TestSP(unittest.TestCase): ...@@ -71,11 +71,11 @@ class TestSP(unittest.TestCase):
# compute output with convolve2d # compute output with convolve2d
if conv_mode == 'valid': if conv_mode == 'valid':
fulloutshp = numpy.array(imshp) - numpy.array(kshp) + 1 fulloutshp = np.array(imshp) - np.array(kshp) + 1
else: else:
fulloutshp = numpy.array(imshp) + numpy.array(kshp) - 1 fulloutshp = np.array(imshp) + np.array(kshp) - 1
ntime1 = time.time() ntime1 = time.time()
refout = numpy.zeros((bsize,)+tuple(fulloutshp)+(nkern,)) refout = np.zeros((bsize,)+tuple(fulloutshp)+(nkern,))
for b in range(bsize): for b in range(bsize):
for n in range(nkern): for n in range(nkern):
refout[b, ..., n] = convolve2d(img2d[b, :, :], refout[b, ..., n] = convolve2d(img2d[b, :, :],
...@@ -88,7 +88,7 @@ class TestSP(unittest.TestCase): ...@@ -88,7 +88,7 @@ class TestSP(unittest.TestCase):
bench1 += biasvals.reshape(1, 1, nkern) bench1 += biasvals.reshape(1, 1, nkern)
# swap the last two dimensions (output needs to be nkern x outshp) # swap the last two dimensions (output needs to be nkern x outshp)
bench1 = numpy.swapaxes(bench1, 1, 2) bench1 = np.swapaxes(bench1, 1, 2)
ttime1 = time.time() ttime1 = time.time()
out1 = f(filters, biasvals, img1d) out1 = f(filters, biasvals, img1d)
ttot += time.time() - ttime1 ttot += time.time() - ttime1
...@@ -101,13 +101,13 @@ class TestSP(unittest.TestCase): ...@@ -101,13 +101,13 @@ class TestSP(unittest.TestCase):
#downprop = function([kerns,input], vis, mode=mode) #downprop = function([kerns,input], vis, mode=mode)
#visval = downprop(filters,img1d) #visval = downprop(filters,img1d)
# test downward propagation -- reference implementation # test downward propagation -- reference implementation
#pshape = (img1d.shape[0],numpy.prod(outshp[1:]),numpy.prod(kshp)) #pshape = (img1d.shape[0],np.prod(outshp[1:]),np.prod(kshp))
#patchstack = numpy.zeros(pshape) #patchstack = np.zeros(pshape)
# for bi in numpy.arange(pshape[0]): # batch index # for bi in np.arange(pshape[0]): # batch index
#abspos = 0 #abspos = 0
# for outy in numpy.arange(outshp[1]): # for outy in np.arange(outshp[1]):
# for outx in numpy.arange(outshp[2]): # for outx in np.arange(outshp[2]):
# for ni in numpy.arange(nkern): # for ni in np.arange(nkern):
# print 'filters[n,:].shape = ', filters[n,:].shape # print 'filters[n,:].shape = ', filters[n,:].shape
# print 'out1[bi,abspos].shape =',out1[bi,abspos].shape # print 'out1[bi,abspos].shape =',out1[bi,abspos].shape
#patchstack[bi,abspos,:] = filters[n,:]*out1[bi,abspos] #patchstack[bi,abspos,:] = filters[n,:]*out1[bi,abspos]
...@@ -115,13 +115,13 @@ class TestSP(unittest.TestCase): ...@@ -115,13 +115,13 @@ class TestSP(unittest.TestCase):
#patchstack = patchstack.reshape(1,-1) #patchstack = patchstack.reshape(1,-1)
# indices, indptr, spmat_shape, sptype, outshp = \ # indices, indptr, spmat_shape, sptype, outshp = \
# sp.convolution_indices.conv_eval(imshp,kshp,ss,conv_mode) # sp.convolution_indices.conv_eval(imshp,kshp,ss,conv_mode)
#spmat = sparse.csc_matrix((numpy.ones_like(indices),indices,indptr),spmat_shape) #spmat = sparse.csc_matrix((np.ones_like(indices),indices,indptr),spmat_shape)
#visref = numpy.dot(patchstack, spmat.todense()) #visref = np.dot(patchstack, spmat.todense())
# print 'visval = ', visval # print 'visval = ', visval
# print 'visref = ', visref # print 'visref = ', visref
#assert numpy.all(visref==visval) #assert np.all(visref==visval)
# print '**** Convolution Profiling Results (',mode,') ****' # print '**** Convolution Profiling Results (',mode,') ****'
...@@ -143,10 +143,10 @@ class TestSP(unittest.TestCase): ...@@ -143,10 +143,10 @@ class TestSP(unittest.TestCase):
# symbolic stuff # symbolic stuff
kerns = [tensor.dmatrix(), tensor.dmatrix()] kerns = [tensor.dmatrix(), tensor.dmatrix()]
input = tensor.dmatrix() input = tensor.dmatrix()
rng = numpy.random.RandomState(3423489) rng = np.random.RandomState(3423489)
# build actual input images # build actual input images
img2d = numpy.arange(bsize*numpy.prod(imshp)).reshape((bsize,)+imshp) img2d = np.arange(bsize*np.prod(imshp)).reshape((bsize,)+imshp)
img1d = img2d.reshape(bsize, -1) img1d = img2d.reshape(bsize, -1)
for mode in ('FAST_COMPILE', 'FAST_RUN'): for mode in ('FAST_COMPILE', 'FAST_RUN'):
...@@ -157,8 +157,8 @@ class TestSP(unittest.TestCase): ...@@ -157,8 +157,8 @@ class TestSP(unittest.TestCase):
nkerns[0], input, imshp, ss[0], mode=conv_mode) nkerns[0], input, imshp, ss[0], mode=conv_mode)
l1propup = function([kerns[0], input], l1hid, mode=mode) l1propup = function([kerns[0], input], l1hid, mode=mode)
#l1kernvals = numpy.random.rand(nkerns[0],numpy.prod(kshp[0])) #l1kernvals = np.random.rand(nkerns[0],np.prod(kshp[0]))
l1kernvals = numpy.arange(nkerns[0]*numpy.prod(kshp[0])).reshape(nkerns[0], numpy.prod(kshp[0])) l1kernvals = np.arange(nkerns[0]*np.prod(kshp[0])).reshape(nkerns[0], np.prod(kshp[0]))
l1hidval = l1propup(l1kernvals, img1d) l1hidval = l1propup(l1kernvals, img1d)
# actual values # actual values
...@@ -166,17 +166,17 @@ class TestSP(unittest.TestCase): ...@@ -166,17 +166,17 @@ class TestSP(unittest.TestCase):
nkerns[1], l1hid, l1shp, ss[1], mode=conv_mode) nkerns[1], l1hid, l1shp, ss[1], mode=conv_mode)
l2propup = function([kerns[1], l1hid], l2hid, mode=mode) l2propup = function([kerns[1], l1hid], l2hid, mode=mode)
#l2kernvals = numpy.random.rand(nkerns[1],numpy.prod(kshp[1])*nkerns[0]) #l2kernvals = np.random.rand(nkerns[1],np.prod(kshp[1])*nkerns[0])
l2kernvals = numpy.arange(nkerns[1]*numpy.prod(kshp[1])*nkerns[0]).reshape(nkerns[1], numpy.prod(kshp[1])*nkerns[0]) l2kernvals = np.arange(nkerns[1]*np.prod(kshp[1])*nkerns[0]).reshape(nkerns[1], np.prod(kshp[1])*nkerns[0])
# for debugging, we bring things back to integers # for debugging, we bring things back to integers
l1hidval = numpy.arange(numpy.size(l1hidval)).reshape(l1hidval.shape) l1hidval = np.arange(np.size(l1hidval)).reshape(l1hidval.shape)
l2hidval = l2propup(l2kernvals, l1hidval) l2hidval = l2propup(l2kernvals, l1hidval)
def test_maxpool(self): def test_maxpool(self):
# generate flatted images # generate flatted images
maxpoolshps = ((2, 2), (3, 3), (4, 4), (5, 5), (6, 6)) maxpoolshps = ((2, 2), (3, 3), (4, 4), (5, 5), (6, 6))
imval = numpy.random.rand(4, 5, 10, 10) imval = np.random.rand(4, 5, 10, 10)
images = tensor.dmatrix() images = tensor.dmatrix()
for maxpoolshp in maxpoolshps: for maxpoolshp in maxpoolshps:
...@@ -187,10 +187,10 @@ class TestSP(unittest.TestCase): ...@@ -187,10 +187,10 @@ class TestSP(unittest.TestCase):
output_val = f(imval.reshape(imval.shape[0], -1)) output_val = f(imval.reshape(imval.shape[0], -1))
# numeric verification # numeric verification
my_output_val = numpy.zeros((imval.shape[0], imval.shape[1], my_output_val = np.zeros((imval.shape[0], imval.shape[1],
imval.shape[2] // maxpoolshp[0], imval.shape[2] // maxpoolshp[0],
imval.shape[3] // maxpoolshp[1])) imval.shape[3] // maxpoolshp[1]))
assert numpy.prod(my_output_val.shape[1:]) == numpy.prod(numpy.r_[imval.shape[1], outshp]) assert np.prod(my_output_val.shape[1:]) == np.prod(np.r_[imval.shape[1], outshp])
for n in range(imval.shape[0]): for n in range(imval.shape[0]):
for k in range(imval.shape[1]): for k in range(imval.shape[1]):
...@@ -198,9 +198,9 @@ class TestSP(unittest.TestCase): ...@@ -198,9 +198,9 @@ class TestSP(unittest.TestCase):
for j in range(imval.shape[3] // maxpoolshp[1]): for j in range(imval.shape[3] // maxpoolshp[1]):
ii, jj = i*maxpoolshp[0], j*maxpoolshp[1] ii, jj = i*maxpoolshp[0], j*maxpoolshp[1]
patch = imval[n, k, ii:ii+maxpoolshp[0], jj:jj+maxpoolshp[1]] patch = imval[n, k, ii:ii+maxpoolshp[0], jj:jj+maxpoolshp[1]]
my_output_val[n, k, i, j] = numpy.max(patch) my_output_val[n, k, i, j] = np.max(patch)
my_output_val = my_output_val.reshape(imval.shape[0], -1) my_output_val = my_output_val.reshape(imval.shape[0], -1)
assert numpy.all(output_val == my_output_val) assert np.all(output_val == my_output_val)
def mp(input): def mp(input):
output, outshp = sp.max_pool(input, imval.shape[1:], maxpoolshp) output, outshp = sp.max_pool(input, imval.shape[1:], maxpoolshp)
......
...@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division ...@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division
import unittest import unittest
import theano import theano
import numpy import numpy as np
import scipy.sparse as sp import scipy.sparse as sp
from theano import sparse from theano import sparse
......
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
import numpy import numpy as np
try: try:
import scipy.sparse as sp import scipy.sparse as sp
import scipy.sparse import scipy.sparse
...@@ -157,14 +157,14 @@ def test_local_dense_from_sparse_sparse_from_dense(): ...@@ -157,14 +157,14 @@ def test_local_dense_from_sparse_sparse_from_dense():
def test_sd_csc(): def test_sd_csc():
A = sp.rand(4, 5, density=0.60, format='csc', dtype=numpy.float32) A = sp.rand(4, 5, density=0.60, format='csc', dtype=np.float32)
b = numpy.random.rand(5,2).astype(numpy.float32) b = np.random.rand(5,2).astype(np.float32)
target = A*b target = A*b
a_val = theano.tensor.as_tensor_variable(A.data) a_val = theano.tensor.as_tensor_variable(A.data)
a_ind = theano.tensor.as_tensor_variable(A.indices) a_ind = theano.tensor.as_tensor_variable(A.indices)
a_ptr = theano.tensor.as_tensor_variable(A.indptr) a_ptr = theano.tensor.as_tensor_variable(A.indptr)
nrows = theano.tensor.as_tensor_variable(numpy.int32(A.shape[0])) nrows = theano.tensor.as_tensor_variable(np.int32(A.shape[0]))
b = theano.tensor.as_tensor_variable(b) b = theano.tensor.as_tensor_variable(b)
res = theano.sparse.opt.sd_csc(a_val, a_ind, a_ptr, nrows, b).eval() res = theano.sparse.opt.sd_csc(a_val, a_ind, a_ptr, nrows, b).eval()
......
...@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division ...@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division
import unittest import unittest
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
import numpy import numpy as np
try: try:
import scipy.sparse as sp import scipy.sparse as sp
except ImportError: except ImportError:
...@@ -30,7 +30,7 @@ class PoissonTester(utt.InferShapeTester): ...@@ -30,7 +30,7 @@ class PoissonTester(utt.InferShapeTester):
for format in sparse.sparse_formats: for format in sparse.sparse_formats:
variable = getattr(theano.sparse, format + '_matrix') variable = getattr(theano.sparse, format + '_matrix')
rand = numpy.array(numpy.random.randint(1, 4, size=(3, 4)) - 1, rand = np.array(np.random.randint(1, 4, size=(3, 4)) - 1,
dtype=theano.config.floatX) dtype=theano.config.floatX)
x[format] = variable() x[format] = variable()
...@@ -50,7 +50,7 @@ class PoissonTester(utt.InferShapeTester): ...@@ -50,7 +50,7 @@ class PoissonTester(utt.InferShapeTester):
assert tested.format == format assert tested.format == format
assert tested.dtype == self.a[format].dtype assert tested.dtype == self.a[format].dtype
assert numpy.allclose(numpy.floor(tested.data), tested.data) assert np.allclose(np.floor(tested.data), tested.data)
assert tested.shape == self.a[format].shape assert tested.shape == self.a[format].shape
def test_infer_shape(self): def test_infer_shape(self):
...@@ -67,7 +67,7 @@ class BinomialTester(utt.InferShapeTester): ...@@ -67,7 +67,7 @@ class BinomialTester(utt.InferShapeTester):
shape = tensor.lvector() shape = tensor.lvector()
_n = 5 _n = 5
_p = .25 _p = .25
_shape = numpy.asarray([3, 5], dtype='int64') _shape = np.asarray([3, 5], dtype='int64')
inputs = [n, p, shape] inputs = [n, p, shape]
_inputs = [_n, _p, _shape] _inputs = [_n, _p, _shape]
...@@ -88,7 +88,7 @@ class BinomialTester(utt.InferShapeTester): ...@@ -88,7 +88,7 @@ class BinomialTester(utt.InferShapeTester):
assert tested.shape == tuple(self._shape) assert tested.shape == tuple(self._shape)
assert tested.format == sp_format assert tested.format == sp_format
assert tested.dtype == o_type assert tested.dtype == o_type
assert numpy.allclose(numpy.floor(tested.todense()), assert np.allclose(np.floor(tested.todense()),
tested.todense()) tested.todense())
def test_infer_shape(self): def test_infer_shape(self):
...@@ -103,7 +103,7 @@ class BinomialTester(utt.InferShapeTester): ...@@ -103,7 +103,7 @@ class BinomialTester(utt.InferShapeTester):
class MultinomialTester(utt.InferShapeTester): class MultinomialTester(utt.InferShapeTester):
p = sparse.csr_matrix() p = sparse.csr_matrix()
_p = sp.csr_matrix(numpy.asarray([[0.0, 0.5, 0.0, 0.5], _p = sp.csr_matrix(np.asarray([[0.0, 0.5, 0.0, 0.5],
[0.1, 0.2, 0.3, 0.4], [0.1, 0.2, 0.3, 0.4],
[0.0, 1.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0],
[0.3, 0.3, 0.0, 0.4]], [0.3, 0.3, 0.0, 0.4]],
...@@ -120,16 +120,16 @@ class MultinomialTester(utt.InferShapeTester): ...@@ -120,16 +120,16 @@ class MultinomialTester(utt.InferShapeTester):
_n = 5 _n = 5
tested = f(self._p, _n) tested = f(self._p, _n)
assert tested.shape == self._p.shape assert tested.shape == self._p.shape
assert numpy.allclose(numpy.floor(tested.todense()), tested.todense()) assert np.allclose(np.floor(tested.todense()), tested.todense())
assert tested[2, 1] == _n assert tested[2, 1] == _n
n = tensor.lvector() n = tensor.lvector()
f = theano.function([self.p, n], multinomial(n, self.p)) f = theano.function([self.p, n], multinomial(n, self.p))
_n = numpy.asarray([1, 2, 3, 4], dtype='int64') _n = np.asarray([1, 2, 3, 4], dtype='int64')
tested = f(self._p, _n) tested = f(self._p, _n)
assert tested.shape == self._p.shape assert tested.shape == self._p.shape
assert numpy.allclose(numpy.floor(tested.todense()), tested.todense()) assert np.allclose(np.floor(tested.todense()), tested.todense())
assert tested[2, 1] == _n[2] assert tested[2, 1] == _n[2]
def test_infer_shape(self): def test_infer_shape(self):
......
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
import numpy import numpy as np
import theano.sparse import theano.sparse
if not theano.sparse.enable_sparse: if not theano.sparse.enable_sparse:
raise SkipTest('Optional package sparse disabled') raise SkipTest('Optional package sparse disabled')
...@@ -11,21 +11,21 @@ from theano.sparse.tests.test_basic import as_sparse_format ...@@ -11,21 +11,21 @@ from theano.sparse.tests.test_basic import as_sparse_format
def test_hash_from_sparse(): def test_hash_from_sparse():
hashs = [] hashs = []
rng = numpy.random.rand(5, 5) rng = np.random.rand(5, 5)
for format in ['csc', 'csr']: for format in ['csc', 'csr']:
rng = as_sparse_format(rng, format) rng = as_sparse_format(rng, format)
for data in [[[-2]], [[-1]], [[0]], [[1]], [[2]], for data in [[[-2]], [[-1]], [[0]], [[1]], [[2]],
numpy.zeros((1, 5)), numpy.zeros((1, 6)), np.zeros((1, 5)), np.zeros((1, 6)),
# Data buffer empty but different shapes # Data buffer empty but different shapes
# numpy.zeros((1, 0)), numpy.zeros((2, 0)), # np.zeros((1, 0)), np.zeros((2, 0)),
# Same data buffer and shapes but different strides # Same data buffer and shapes but different strides
numpy.arange(25).reshape(5, 5), np.arange(25).reshape(5, 5),
numpy.arange(25).reshape(5, 5).T, np.arange(25).reshape(5, 5).T,
# Same data buffer, shapes and strides # Same data buffer, shapes and strides
# but different dtypes # but different dtypes
numpy.zeros((5, 5), dtype="uint32"), np.zeros((5, 5), dtype="uint32"),
numpy.zeros((5, 5), dtype="int32"), np.zeros((5, 5), dtype="int32"),
# Test slice # Test slice
rng, rng[1:], rng[:4], rng[1:3], rng, rng[1:], rng[:4], rng[1:3],
# Don't test step as they are not supported by sparse # Don't test step as they are not supported by sparse
......
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
import numpy import numpy as np
try: try:
import scipy.sparse import scipy.sparse
imported_scipy = True imported_scipy = True
...@@ -20,7 +20,7 @@ def _is_sparse(x): ...@@ -20,7 +20,7 @@ def _is_sparse(x):
True iff x is a L{scipy.sparse.spmatrix} (and not a L{numpy.ndarray}). True iff x is a L{scipy.sparse.spmatrix} (and not a L{numpy.ndarray}).
""" """
if not isinstance(x, (scipy.sparse.spmatrix, numpy.ndarray, tuple, list)): if not isinstance(x, (scipy.sparse.spmatrix, np.ndarray, tuple, list)):
raise NotImplementedError("this function should only be called on " raise NotImplementedError("this function should only be called on "
"sparse.scipy.sparse.spmatrix or " "sparse.scipy.sparse.spmatrix or "
"numpy.ndarray, not,", x) "numpy.ndarray, not,", x)
...@@ -107,12 +107,12 @@ class SparseType(gof.Type): ...@@ -107,12 +107,12 @@ class SparseType(gof.Type):
return (SparseType.may_share_memory(a, b.data) or return (SparseType.may_share_memory(a, b.data) or
SparseType.may_share_memory(a, b.indices) or SparseType.may_share_memory(a, b.indices) or
SparseType.may_share_memory(a, b.indptr)) SparseType.may_share_memory(a, b.indptr))
if _is_sparse(b) and isinstance(a, numpy.ndarray): if _is_sparse(b) and isinstance(a, np.ndarray):
a, b = b, a a, b = b, a
if _is_sparse(a) and isinstance(b, numpy.ndarray): if _is_sparse(a) and isinstance(b, np.ndarray):
if (numpy.may_share_memory(a.data, b) or if (np.may_share_memory(a.data, b) or
numpy.may_share_memory(a.indices, b) or np.may_share_memory(a.indices, b) or
numpy.may_share_memory(a.indptr, b)): np.may_share_memory(a.indptr, b)):
# currently we can't share memory with a.shape as it is a tuple # currently we can't share memory with a.shape as it is a tuple
return True return True
return False return False
...@@ -168,8 +168,8 @@ class SparseType(gof.Type): ...@@ -168,8 +168,8 @@ class SparseType(gof.Type):
obj.indices.size, obj.indptr.size, obj.nnz) obj.indices.size, obj.indptr.size, obj.nnz)
def get_size(self, shape_info): def get_size(self, shape_info):
return (shape_info[1] * numpy.dtype(self.dtype).itemsize + return (shape_info[1] * np.dtype(self.dtype).itemsize +
(shape_info[2] + shape_info[3]) * numpy.dtype('int32').itemsize) (shape_info[2] + shape_info[3]) * np.dtype('int32').itemsize)
# Register SparseType's C code for ViewOp. # Register SparseType's C code for ViewOp.
theano.compile.register_view_op_c_code( theano.compile.register_view_op_c_code(
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论