提交 9982dc5c authored 作者: Frederic Bastien's avatar Frederic Bastien

fix test TestConvOp.test_convolution. We only support 4d images and kernels.

上级 26fe6416
...@@ -158,6 +158,9 @@ def exec_multilayer_conv_nnet(conv_mode, ss, bsize, imshp, kshps, nkerns, unroll ...@@ -158,6 +158,9 @@ def exec_multilayer_conv_nnet(conv_mode, ss, bsize, imshp, kshps, nkerns, unroll
class TestConvOp(unittest.TestCase): class TestConvOp(unittest.TestCase):
"""NOTE: we test only when we pass 4d tensor.
"""
def setUp(self): def setUp(self):
utt.seed_rng() utt.seed_rng()
...@@ -170,7 +173,7 @@ class TestConvOp(unittest.TestCase): ...@@ -170,7 +173,7 @@ class TestConvOp(unittest.TestCase):
if 0: if 0:
# fixed parameters # fixed parameters
bsize = 10 # batch size bsize = 10 # batch size
imshp = (28,28)# image shape imshp = (1,28,28)# image shape
kshps = [(5,5),(6,7),(12,8)] # kernel shaped kshps = [(5,5),(6,7),(12,8)] # kernel shaped
nkern = 5 # nb kernel nkern = 5 # nb kernel
ssizes = ((1,1),(2,2),(3,3),(4,4))#step size ssizes = ((1,1),(2,2),(3,3),(4,4))#step size
...@@ -178,7 +181,7 @@ class TestConvOp(unittest.TestCase): ...@@ -178,7 +181,7 @@ class TestConvOp(unittest.TestCase):
elif 0: elif 0:
# fixed parameters # fixed parameters
bsize = 10 # batch size bsize = 10 # batch size
imshp = (50,50)# image shape imshp = (1,50,50)# image shape
print >> sys.stderr, "WARNING: only square shape tested" print >> sys.stderr, "WARNING: only square shape tested"
kshps = [(12,12), (12,12)] kshps = [(12,12), (12,12)]
nkern = 20 # nb kernel nkern = 20 # nb kernel
...@@ -187,7 +190,7 @@ class TestConvOp(unittest.TestCase): ...@@ -187,7 +190,7 @@ class TestConvOp(unittest.TestCase):
elif 0: elif 0:
# fixed parameters # fixed parameters
bsize = 7 # batch size bsize = 7 # batch size
imshp = (5,4)# image shape imshp = (1,5,4)# image shape
kshps = [(2,3)] kshps = [(2,3)]
nkern = 6 # nb kernel nkern = 6 # nb kernel
ssizes = [(1,1)] #step size ssizes = [(1,1)] #step size
...@@ -195,7 +198,7 @@ class TestConvOp(unittest.TestCase): ...@@ -195,7 +198,7 @@ class TestConvOp(unittest.TestCase):
else: else:
# fixed parameters # fixed parameters
bsize = 7 # batch size bsize = 7 # batch size
imshp = (5,4)# image shape imshp = (1,5,4)# image shape
kshps = [(2,3)] kshps = [(2,3)]
nkern = 6 # nb kernel nkern = 6 # nb kernel
ssizes = [(1,1)] #step size ssizes = [(1,1)] #step size
...@@ -204,13 +207,13 @@ class TestConvOp(unittest.TestCase): ...@@ -204,13 +207,13 @@ class TestConvOp(unittest.TestCase):
# TODO: ask Fred about this # TODO: ask Fred about this
# this combination trigered a bug. # this combination trigered a bug.
# bsize=1 # bsize=1
# imshp=(9,9)#fail with 9,9 # imshp=(1,9,9)#fail with 9,9
# kshp=(2,2) # kshp=(2,2)
# nkern=5 # nkern=5
# ssizes=((1,1),) # ssizes=((1,1),)
# this combination trigered a bug. # this combination trigered a bug.
# bsize = 1 # batch size # bsize = 1 # batch size
# imshp = (3,3)# image shape # imshp = (1,3,3)# image shape
# kshp = (2,3)#(5,5) # kernel shaped # kshp = (2,3)#(5,5) # kernel shaped
# nkern = 1 # nb kernel # nkern = 1 # nb kernel
# ssizes = ((1,1),)#(2,2),(3,3),(4,4))#step size # ssizes = ((1,1),)#(2,2),(3,3),(4,4))#step size
...@@ -257,34 +260,34 @@ class TestConvOp(unittest.TestCase): ...@@ -257,34 +260,34 @@ class TestConvOp(unittest.TestCase):
# compute with ConvOp # compute with ConvOp
dmatrix3=T.TensorType('float64', (False, False, False)) dmatrix3=T.TensorType('float64', (False, False, False))
inputs=dmatrix3() inputs4=dmatrix4()
kerns3=dmatrix3() kerns4=dmatrix4()
bia=T.dscalar() bia=T.dscalar()
conv_op = ConvOp(imshp, kshp, nkern, bsize, ss[0],ss[1], conv_mode)(inputs, kerns3) conv_op = ConvOp(imshp, kshp, nkern, bsize, ss[0],ss[1], conv_mode)(inputs4, kerns4)
f2 = function([inputs, kerns3], conv_op, mode=Mode(linker="c")) f2 = function([inputs4, kerns4], conv_op, mode=Mode(linker="c"))
f3 = function([inputs, kerns3], conv_op, mode=Mode(linker="py")) f3 = function([inputs4, kerns4], conv_op, mode=Mode(linker="py"))
ttime1 = time.time() ttime1 = time.time()
out2_ = f2(img2d, filtersflipped) out2_ = f2(img2d, filtersflipped.reshape(nkern,1,*kshp))
out2__ = out2_#[:,:,0::ss[0],0::ss[1]] out2__ = out2_
tconvop += [time.time() - ttime1] tconvop += [time.time() - ttime1]
out2___ = out2__.copy() out2___ = out2__.copy()
out2 = out2___ + biasvals.reshape(1,nkern,1,1) out2 = out2___ + biasvals.reshape(1,nkern,1,1)
out3_ = f3(img2d, filtersflipped) out3_ = f3(img2d, filtersflipped.reshape(nkern,1,*kshp))
out3__ = out3_#[:,:,0::ss[0],0::ss[1]] out3__ = out3_
out3___ = out3__.copy() out3___ = out3__.copy()
out3 = out3___ + biasvals.reshape(1,nkern,1,1) out3 = out3___ + biasvals.reshape(1,nkern,1,1)
assert (N.abs(out2_-out3_)<1e-5).all() assert (N.abs(out2_-out3_)<1e-5).all()
# REFERENCE IMPLEMENTATION: compute output with convolve2d # REFERENCE IMPLEMENTATION: compute output with convolve2d
fulloutshp = N.array(imshp) - N.array(kshp) + 1 if conv_mode=='valid'\ fulloutshp = N.array(imshp[1:]) - N.array(kshp) + 1 if conv_mode=='valid'\
else N.array(imshp) + N.array(kshp) - 1 else N.array(imshp[1:]) + N.array(kshp) - 1
ntime1 = time.time() ntime1 = time.time()
refout = N.zeros((bsize,)+tuple(fulloutshp)+(nkern,)) refout = N.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(\ refout[b,...,n] = convolve2d(\
img2d[b,:,:], filtersflipped[n,...],conv_mode) img2d[b,0,:,:], filtersflipped[n,...],conv_mode)
tscipy += [time.time() - ntime1] tscipy += [time.time() - ntime1]
# need to flatten images # need to flatten images
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论