Hi Pascal, Input dimension is 5; problem fixed: I use pool_2d code thanks
On Tuesday, October 11, 2016 at 4:43:58 PM UTC+2, Pascal Lamblin wrote: > > Hi, > > The code throwing the exception is: > > if x.type.ndim != 4: > > raise TypeError() > > What is the number of dimensions of 'input' in your case? > > Usually, the `pool_2d` helper function takes care of reshaping the input > if necessary, and passing correctly ws/ds to the underlying Op. Is there > any reason in particular you are calling Pool directly? > > Also, please note that if you edit your post in the web interface, it > sends a new message to the list each time. > > On Tue, Oct 11, 2016, [email protected] <javascript:> wrote: > > > > Hi Pascal, > > in maxpool3d.py > > I tried op = pool.Pool(ignore_border=False, mode='max', > openmp=None)(input, > > ws=(ds[1],ds[2])) > > instead of op = pool.Pool((ds[1],ds[2]), ignore_border) that worked in > the > > previous Theano version. > > > > > > This is the output : > > > > Python 2.7.12 |Anaconda custom (64-bit)| (default, Jul 2 2016, > 17:42:40) > > [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 > > Type "help", "copyright", "credits" or "license" for more information. > > Anaconda is brought to you by Continuum Analytics. > > Please check out: http://continuum.io/thanks and https://anaconda.org > > >>> runfile('/home/luca/data/ > > > DeepLearningTutorials/Theano-3D-ConvNet-master/convnet3d/core/run_multi_conv_t.py', > > > > > wdir='/home/luca/data/DeepLearningTutorials/Theano-3D-ConvNet-master/convnet3d/core') > > > > Using gpu device 0: GeForce 840M (CNMeM is disabled, cuDNN 5103) > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > File > > > "/home/luca/anaconda2/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", > > > > line 714, in runfile > > execfile(filename, namespace) > > File > > > "/home/luca/anaconda2/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", > > > > line 81, in execfile > > builtins.execfile(filename, *where) > > File > > > "/home/luca/data/DeepLearningTutorials/Theano-3D-ConvNet-master/convnet3d/core/run_multi_conv_t.py", > > > > line 32, in <module> > > run_experiments() > > File > > > "/home/luca/data/DeepLearningTutorials/Theano-3D-ConvNet-master/convnet3d/core/run_multi_conv_t.py", > > > > line 25, in run_experiments > > Learning_rate=0.001 > > File "mpr_convnet_class_t.py", line 176, in __init__ > > self.pool_layer_dim)) > > File "convnet3d.py", line 255, in __init__ > > out = max_pool_3d(input,pool_shape) > > File "maxpool3d.py", line 53, in max_pool_3d > > op = Pool(ignore_border=False, mode='max', openmp=None)(input, > > ws=(ds[1],ds[2])) > > File "/home/luca/data/Theano-master/theano/gof/op.py", line 602, in > > __call__ > > node = self.make_node(*inputs, **kwargs) > > File "/home/luca/data/Theano-master/theano/tensor/signal/pool.py", > line > > 293, in make_node > > raise TypeError() > > TypeError > > > > Many thanks > > Luca > > > > -- > > > > --- > > You received this message because you are subscribed to the Google > Groups "theano-users" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > > > """ Max pooling spatio-temporal inputs for Theano """ > > > > from theano import tensor > > from theano.tensor.signal.downsample import DownsampleFactorMax > > > > > > #it was originally ignore_border=False and then corrected as suggested > by Pascal > > '''Pascal update on ignore_border''' > > def max_pool_3d(input, ds, ignore_border=True): > > """ > > Takes as input a N-D tensor, where N >= 3. It downscales the input > video by > > the specified factor, by keeping only the maximum value of > non-overlapping > > patches of size (ds[0],ds[1],ds[2]) (time, height, width) > > > > :type input: N-D theano tensor of input images. > > :param input: input images. Max pooling will be done over the 3 last > dimensions. > > :type ds: tuple of length 3 > > :param ds: factor by which to downscale. (2,2,2) will halve the > video in each dimension. > > :param ignore_border: boolean value. When True, (5,5,5) input with > ds=(2,2,2) will generate a > > (2,2,2) output. (3,3,3) otherwise. > > """ > > > > if input.ndim < 3: > > raise NotImplementedError('max_pool_3d requires a dimension >= > 3') > > > > # extract nr dimensions > > vid_dim = input.ndim > > # max pool in two different steps, so we can use the 2d > implementation of > > # downsamplefactormax. First maxpool frames as usual. > > # Then maxpool the time dimension. Shift the time dimension to the > third > > # position, so rows and cols are in the back > > > > # extract dimensions > > frame_shape = input.shape[-2:] > > > > # count the number of "leading" dimensions, store as dmatrix > > # tensor.prod: product of every term in x along axis > > batch_size = tensor.prod(input.shape[:-2]) > > # Reshape x by right padding the shape with n_ones 1s. > > batch_size = tensor.shape_padright(batch_size,1) > > > > # store as 4D tensor with shape: (batch_size,1,height,width) > > #tensor.cast > > # Cast any tensor x to a Tensor of the same shape, but with a > different numerical type dtype. > > new_shape = tensor.cast(tensor.join(0, batch_size, > > tensor.as_tensor([1,]), > > frame_shape), 'int32') > > input_4D = tensor.reshape(input, new_shape, ndim=4) > > > > # downsample mini-batch of videos in rows and cols > > op = DownsampleFactorMax((ds[1],ds[2]), ignore_border) > > > > output = op(input_4D) > > # restore to original shape > > outshape = tensor.join(0, input.shape[:-2], output.shape[-2:]) > > out = tensor.reshape(output, outshape, ndim=input.ndim) > > > > # now maxpool time > > > > # output (time, rows, cols), reshape so that time is in the back > > shufl = (list(range(vid_dim-3)) + > [vid_dim-2]+[vid_dim-1]+[vid_dim-3]) > > input_time = out.dimshuffle(shufl) > > # reset dimensions > > vid_shape = input_time.shape[-2:] > > > > # count the number of "leading" dimensions, store as dmatrix > > batch_size = tensor.prod(input_time.shape[:-2]) > > batch_size = tensor.shape_padright(batch_size,1) > > > > # store as 4D tensor with shape: (batch_size,1,width,time) > > new_shape = tensor.cast(tensor.join(0, batch_size, > > tensor.as_tensor([1,]), > > vid_shape), 'int32') > > input_4D_time = tensor.reshape(input_time, new_shape, ndim=4) > > # downsample mini-batch of videos in time > > op = DownsampleFactorMax((1,ds[0]), ignore_border) > > outtime = op(input_4D_time) > > # output > > # restore to original shape (xxx, rows, cols, time) > > outshape = tensor.join(0, input_time.shape[:-2], outtime.shape[-2:]) > > shufl = (list(range(vid_dim-3)) + > [vid_dim-1]+[vid_dim-3]+[vid_dim-2]) > > return tensor.reshape(outtime, outshape, > ndim=input.ndim).dimshuffle(shufl) > > -- > Pascal > -- --- You received this message because you are subscribed to the Google Groups "theano-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
