提交 6f48f330 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Remove accesses to .value property, use .get_value and .set_value

上级 f12e987c
...@@ -32,7 +32,9 @@ class DummyConv3D: ...@@ -32,7 +32,9 @@ class DummyConv3D:
""" """
self.V, self.W, self.b = VWbVals self.V, self.W, self.b = VWbVals
self.dV, self.dW, self.db = shared(rng.uniform(-1,1,self.V.value.shape)), shared(rng.uniform(-1,1,self.W.value.shape)), shared(rng.uniform(-1,1,self.b.value.shape)) self.dV = shared(rng.uniform(-1,1,self.V.get_value(borrow=True).shape))
self.dW = shared(rng.uniform(-1,1,self.W.get_value(borrow=True).shape))
self.db = shared(rng.uniform(-1,1,self.b.get_value(borrow=True).shape))
self.d = d self.d = d
...@@ -50,7 +52,8 @@ class DummyConvGrad3D: ...@@ -50,7 +52,8 @@ class DummyConvGrad3D:
""" """
self.V, self.dCdH = VdHvals self.V, self.dCdH = VdHvals
self.dV, self.ddCdH = shared(rng.uniform(-1,1,self.V.value.shape)), shared(rng.uniform(-1,1,self.dCdH.value.shape)) self.dV = shared(rng.uniform(-1,1,self.V.get_value(borrow=True).shape))
self.ddCdH = shared(rng.uniform(-1,1,self.dCdH.get_value(borrow=True).shape))
self.d = d self.d = d
self.WShape = WShape self.WShape = WShape
...@@ -70,9 +73,9 @@ class DummyConvTransp3D: ...@@ -70,9 +73,9 @@ class DummyConvTransp3D:
""" """
self.W, self.b, self.H = WbHvals self.W, self.b, self.H = WbHvals
self.dW = rng.uniform(-1,1,self.W.value.shape) self.dW = rng.uniform(-1,1,self.W.get_value(borrow=True).shape)
self.db = rng.uniform(-1,1,self.b.value.shape) self.db = rng.uniform(-1,1,self.b.get_value(borrow=True).shape)
self.dH = rng.uniform(-1,1,self.H.value.shape) self.dH = rng.uniform(-1,1,self.H.get_value(borrow=True).shape)
self.dW, self.db, self.dH = shared(self.dW), shared(self.db), shared(self.dH) self.dW, self.db, self.dH = shared(self.dW), shared(self.db), shared(self.dH)
...@@ -147,24 +150,28 @@ class TestConv3D(unittest.TestCase): ...@@ -147,24 +150,28 @@ class TestConv3D(unittest.TestCase):
numFilters = self.rng.randint(1,3) numFilters = self.rng.randint(1,3)
inputChannels = self.rng.randint(1,3) inputChannels = self.rng.randint(1,3)
self.d.value[0] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[0] = self.rng.randint(1,15)
self.d.value[1] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[1] = self.rng.randint(1,15)
self.d.value[2] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[2] = self.rng.randint(1,15)
outputHeight = int( (videoHeight - filterHeight) / self.d.value[0] )+1 outputHeight = int( (videoHeight - filterHeight) / self.d.get_value(borrow=True)[0] )+1
outputWidth = int( (videoWidth - filterWidth) / self.d.value[1] )+1 outputWidth = int( (videoWidth - filterWidth) / self.d.get_value(borrow=True)[1] )+1
outputDur = int( (videoDur - filterDur) / self.d.value[2] ) +1 outputDur = int( (videoDur - filterDur) / self.d.get_value(borrow=True)[2] ) +1
self.W.value = self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels) self.W.set_value(
self.b.value = self.random_tensor(numFilters) self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels),
self.rb.value = self.random_tensor(inputChannels) borrow=True)
self.b.set_value(self.random_tensor(numFilters), borrow=True)
self.rb.set_value(self.random_tensor(inputChannels), borrow=True)
self.V.value = self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels) self.V.set_value(
self.rb.value = self.random_tensor(inputChannels) self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels),
borrow=True)
self.rb.set_value(self.random_tensor(inputChannels), borrow=True)
def test_c_against_python(self): def test_c_against_python(self):
self.randomize() self.randomize()
self.check_c_against_python(self.V.value.shape[1:4]) self.check_c_against_python(self.V.get_value(borrow=True).shape[1:4])
def test_c_against_mat_mul(self): def test_c_against_mat_mul(self):
#Use a filter of the same size as the image, so the convolution is just a dense matrix multiply #Use a filter of the same size as the image, so the convolution is just a dense matrix multiply
...@@ -181,17 +188,23 @@ class TestConv3D(unittest.TestCase): ...@@ -181,17 +188,23 @@ class TestConv3D(unittest.TestCase):
numFilters = self.rng.randint(1,3) numFilters = self.rng.randint(1,3)
inputChannels = self.rng.randint(1,4) inputChannels = self.rng.randint(1,4)
self.d.value[0] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[0] = self.rng.randint(1,15)
self.d.value[1] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[1] = self.rng.randint(1,15)
self.d.value[2] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[2] = self.rng.randint(1,15)
self.W.value = self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels) self.W.set_value(
self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels),
borrow=True)
self.W.value *= (self.W.value < 1e-5) self.W.set_value(
self.W.get_value(borrow=True) * (self.W.get_value(borrow=True) < 1e-5),
borrow=True)
self.b.value = self.random_tensor(numFilters) self.b.set_value(self.random_tensor(numFilters), borrow=True)
self.V.value = self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels) self.V.set_value(
self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels),
borrow=True)
Hv = self.H_func() Hv = self.H_func()
...@@ -204,12 +217,12 @@ class TestConv3D(unittest.TestCase): ...@@ -204,12 +217,12 @@ class TestConv3D(unittest.TestCase):
V_mat = N.zeros((batchSize,n)) V_mat = N.zeros((batchSize,n))
Hv_mat = N.zeros((batchSize, numFilters)) Hv_mat = N.zeros((batchSize, numFilters))
for qi in xrange(0,numFilters): for qi in xrange(0,numFilters):
W_mat[:,qi] = self.W.value[qi,:,:,:,:].reshape((n)) W_mat[:,qi] = self.W.get_value(borrow=True)[qi,:,:,:,:].reshape((n))
Hv_mat[:,qi] = Hv[:,0,0,0,qi] Hv_mat[:,qi] = Hv[:,0,0,0,qi]
for qi in xrange(0,batchSize): for qi in xrange(0,batchSize):
V_mat[qi,:] = self.V.value[qi,:,:,:,:].reshape((n)) V_mat[qi,:] = self.V.get_value(borrow=True)[qi,:,:,:,:].reshape((n))
H_mat = N.dot(V_mat,W_mat) + self.b.value H_mat = N.dot(V_mat,W_mat) + self.b.get_value(borrow=True)
tol = 1e-5 tol = 1e-5
if floatX == 'float32': if floatX == 'float32':
...@@ -219,8 +232,8 @@ class TestConv3D(unittest.TestCase): ...@@ -219,8 +232,8 @@ class TestConv3D(unittest.TestCase):
print H_mat print H_mat
print Hv_mat print Hv_mat
print 'max error: '+str(N.abs(H_mat-Hv_mat).max()) print 'max error: '+str(N.abs(H_mat-Hv_mat).max())
W.value[W.value != 0] += 1.0 W.get_value(borrow=True)[W.get_value(borrow=True) != 0] += 1.0
print 'min non-zero kernel mag: '+str(N.abs(W.value).min()) print 'min non-zero kernel mag: '+str(N.abs(W.get_value(borrow=True)).min())
assert False assert False
...@@ -238,18 +251,22 @@ class TestConv3D(unittest.TestCase): ...@@ -238,18 +251,22 @@ class TestConv3D(unittest.TestCase):
filterDur = videoDur filterDur = videoDur
numFilters = self.rng.randint(1,15) numFilters = self.rng.randint(1,15)
inputChannels = self.rng.randint(1,15) inputChannels = self.rng.randint(1,15)
self.d.value[0] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[0] = self.rng.randint(1,15)
self.d.value[1] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[1] = self.rng.randint(1,15)
self.d.value[2] = self.rng.randint(1,15) self.d.get_value(borrow=True, return_internal_type=True)[2] = self.rng.randint(1,15)
self.W.value = self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels) self.W.set_value(
self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels),
borrow=True)
self.b.value = self.random_tensor(numFilters) self.b.set_value(self.random_tensor(numFilters), borrow=True)
self.V.value = self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels) self.V.set_value(
self.rb.value = self.random_tensor(inputChannels) self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels),
borrow=True)
self.rb.set_value(self.random_tensor(inputChannels), borrow=True)
H_shape = self.H_shape_func() H_shape = self.H_shape_func()
...@@ -264,13 +281,13 @@ class TestConv3D(unittest.TestCase): ...@@ -264,13 +281,13 @@ class TestConv3D(unittest.TestCase):
n = inputChannels * videoHeight * videoWidth * videoDur n = inputChannels * videoHeight * videoWidth * videoDur
rbim = N.zeros((videoHeight,videoWidth,videoDur,inputChannels)) rbim = N.zeros((videoHeight,videoWidth,videoDur,inputChannels))
for qi in xrange(0,inputChannels): for qi in xrange(0,inputChannels):
rbim[:,:,:,qi] = self.rb.value[qi] rbim[:,:,:,qi] = self.rb.get_value(borrow=True)[qi]
rbv = rbim.reshape((n)) rbv = rbim.reshape((n))
W_mat = N.zeros((numFilters, n)) W_mat = N.zeros((numFilters, n))
Vv_mat = N.zeros((n, batchSize)) Vv_mat = N.zeros((n, batchSize))
Hv_mat = N.zeros((numFilters,batchSize)) Hv_mat = N.zeros((numFilters,batchSize))
for qi in xrange(0,numFilters): for qi in xrange(0,numFilters):
W_mat[qi,:] = self.W.value[qi,:,:,:,:].reshape((n)) W_mat[qi,:] = self.W.get_value(borrow=True)[qi,:,:,:,:].reshape((n))
Hv_mat[qi,:] = Hv[:,0,0,0,qi] Hv_mat[qi,:] = Hv[:,0,0,0,qi]
for qi in xrange(0,batchSize): for qi in xrange(0,batchSize):
Vv_mat[:,qi] = Vv[qi,:,:,:,:].reshape((n)) Vv_mat[:,qi] = Vv[qi,:,:,:,:].reshape((n))
...@@ -296,13 +313,13 @@ class TestConv3D(unittest.TestCase): ...@@ -296,13 +313,13 @@ class TestConv3D(unittest.TestCase):
filterHeight = self.rng.randint(1,8) filterHeight = self.rng.randint(1,8)
filterDur = self.rng.randint(1,8) filterDur = self.rng.randint(1,8)
self.d.value[0] = self.rng.randint(1,3) self.d.get_value(borrow=True, return_internal_type=True)[0] = self.rng.randint(1,15)
self.d.value[1] = self.rng.randint(1,3) self.d.get_value(borrow=True, return_internal_type=True)[1] = self.rng.randint(1,15)
self.d.value[2] = self.rng.randint(1,3) self.d.get_value(borrow=True, return_internal_type=True)[2] = self.rng.randint(1,15)
dr = self.d.value[0] dr = self.d.get_value(borrow=True)[0]
dc = self.d.value[1] dc = self.d.get_value(borrow=True)[1]
dt = self.d.value[2] dt = self.d.get_value(borrow=True)[2]
numFilters = self.rng.randint(1,3) numFilters = self.rng.randint(1,3)
...@@ -319,11 +336,15 @@ class TestConv3D(unittest.TestCase): ...@@ -319,11 +336,15 @@ class TestConv3D(unittest.TestCase):
inputChannels = self.rng.randint(1,15) inputChannels = self.rng.randint(1,15)
self.W.value = self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels) self.W.set_value(
self.b.value = self.random_tensor(numFilters) self.random_tensor(numFilters,filterHeight,filterWidth,filterDur,inputChannels),
borrow=True)
self.b.set_value(self.random_tensor(numFilters), borrow=True)
#just needed so H_shape works #just needed so H_shape works
self.V.value = self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels) self.V.set_value(
self.rb.value = self.random_tensor(inputChannels) self.random_tensor(batchSize,videoHeight,videoWidth,videoDur,inputChannels),
borrow=True)
self.rb.set_value(self.random_tensor(inputChannels), borrow=True)
H_shape = self.H_shape_func() H_shape = self.H_shape_func()
...@@ -357,7 +378,7 @@ class TestConv3D(unittest.TestCase): ...@@ -357,7 +378,7 @@ class TestConv3D(unittest.TestCase):
n = inputChannels * videoHeight * videoWidth * videoDur n = inputChannels * videoHeight * videoWidth * videoDur
rbim = N.zeros((videoHeight,videoWidth,videoDur,inputChannels)) rbim = N.zeros((videoHeight,videoWidth,videoDur,inputChannels))
for qi in xrange(0,inputChannels): for qi in xrange(0,inputChannels):
rbim[:,:,:,qi] = self.rb.value[qi] rbim[:,:,:,qi] = self.rb.get_value(borrow=True)[qi]
rbv = rbim.reshape((n)) rbv = rbim.reshape((n))
W_mat = N.zeros((hn,n)) W_mat = N.zeros((hn,n))
...@@ -369,9 +390,13 @@ class TestConv3D(unittest.TestCase): ...@@ -369,9 +390,13 @@ class TestConv3D(unittest.TestCase):
ci = c[qi] ci = c[qi]
ti = t[qi] ti = t[qi]
placed_filter = N.zeros(self.V.value.shape[1:]) placed_filter = N.zeros(self.V.get_value(borrow=True).shape[1:])
placed_filter[ri*dr:ri*dr+self.W.value.shape[1],ci*dc:ci*dc+self.W.value.shape[2],ti*dt:ti*dt+self.W.value.shape[3],:] = self.W.value[hi,:,:,:,:] placed_filter[
ri*dr:ri*dr+self.W.get_value(borrow=True).shape[1],
ci*dc:ci*dc+self.W.get_value(borrow=True).shape[2],
ti*dt:ti*dt+self.W.get_value(borrow=True).shape[3],
:] = self.W.get_value(borrow=True)[hi,:,:,:,:]
W_mat[qi,:] = placed_filter.reshape((n)) W_mat[qi,:] = placed_filter.reshape((n))
Hv_mat[qi,:] = Hv[:,ri,ci,ti,hi] Hv_mat[qi,:] = Hv[:,ri,ci,ti,hi]
...@@ -402,14 +427,14 @@ class TestConv3D(unittest.TestCase): ...@@ -402,14 +427,14 @@ class TestConv3D(unittest.TestCase):
H_shape = self.H_shape_func() H_shape = self.H_shape_func()
assert N.all(Hv.shape == H_shape) assert N.all(Hv.shape == H_shape)
gradients = self.gradientsFunc(self.V.value.shape[1:4]) gradients = self.gradientsFunc(self.V.get_value(borrow=True).shape[1:4])
dCdWv = gradients[0] dCdWv = gradients[0]
dCdW_shape = self.dCdW_shape_func(self.V.value.shape[1:4]) dCdW_shape = self.dCdW_shape_func(self.V.get_value(borrow=True).shape[1:4])
assert N.all(dCdWv.shape == dCdW_shape) assert N.all(dCdWv.shape == dCdW_shape)
Rv = self.R_func(self.V.value.shape[1:4]) Rv = self.R_func(self.V.get_value(borrow=True).shape[1:4])
R_shape = self.R_shape_func(self.V.value.shape[1:4]) R_shape = self.R_shape_func(self.V.get_value(borrow=True).shape[1:4])
assert N.all(Rv.shape == R_shape) assert N.all(Rv.shape == R_shape)
...@@ -420,5 +445,5 @@ class TestConv3D(unittest.TestCase): ...@@ -420,5 +445,5 @@ class TestConv3D(unittest.TestCase):
dCdH = shared(self.random_tensor( *self.H_shape_func() )) dCdH = shared(self.random_tensor( *self.H_shape_func() ))
testsPerDir = 2 testsPerDir = 2
theano.tests.unittest_tools.verify_grad(DummyConv3D(rng, (V,W,b), d), [0.0], n_tests=testsPerDir) theano.tests.unittest_tools.verify_grad(DummyConv3D(rng, (V,W,b), d), [0.0], n_tests=testsPerDir)
theano.tests.unittest_tools.verify_grad(DummyConvTransp3D(rng, (W,rb,dCdH), d,V.value.shape[1:4]), [0.0], n_tests=testsPerDir) theano.tests.unittest_tools.verify_grad(DummyConvTransp3D(rng, (W,rb,dCdH), d,V.get_value(borrow=True).shape[1:4]), [0.0], n_tests=testsPerDir)
theano.tests.unittest_tools.verify_grad(DummyConvGrad3D(rng, (V,dCdH), d, W.value.shape), [0.0], n_tests=testsPerDir) theano.tests.unittest_tools.verify_grad(DummyConvGrad3D(rng, (V,dCdH), d, W.get_value(borrow=True).shape), [0.0], n_tests=testsPerDir)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论