提交 86d21acd authored 作者: kvmanohar22's avatar kvmanohar22

modified numpy imports to one common form

上级 f06f537a
...@@ -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
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论