Thanks @Doug, 
You were right about the stride. I just found that pool_2d() is returning a 
tensor of shape different from what I would expect which I don't know how 
to interpret. Meaning is my fault or theano?

Using again my previous example:
h1 = conv2d(X, w1, image_shape=(64, 1, 28, 28), filter_shape=(32, 1, 1, 1))
print(h1.shape)
>>> (64,32,28,28)
>>>
>>>
>>>
h1p = pool_2d(h1, ds=(2,2), ignore_border=True)
print(h1p.shape)
>>> (64,1,14,14)
>>>
>>>

I should be getting a shape of (64,32,14,14) for h1p right? and not a shape 
of (64,1,14,14). I don't know why pool_2d() is messing with number of 
feature maps?
It shouldn't be doing that right? Or am I wrong?

Thank you for helpful hint.



On Monday, July 25, 2016 at 4:12:38 PM UTC+1, Doug wrote:
>
> I'd recommend compiling a function to see what the actual shape of h1p is, 
> that will help  you understand if the problem is on your end or with 
> theano. In this specific case I think the issue is that you've specified 
> st=(1,1) for the pooling, so you aren't actually doing a traditional 2x2 
> maxpool. You need to either set st=(2,2), or leave it undefined in which 
> case it defaults to whatever ds is set to. 
>
> On Sunday, July 24, 2016 at 7:28:21 PM UTC-4, [email protected] 
> wrote:
>>
>> Hello dear community members.
>> I am facing this weird behavior of 
>> conv2d()
>> function in a convent.
>>
>> I'll try to explain the situation with a simple example of a convent with 
>> only two convolutions.
>> Imagine that I have the following filters and their corresponding size
>> w1 = (32, 1, 1, 1)
>> w2 = (64, 32, 3, 3)
>>
>> Then my convent would be something like the following:
>> h1 = conv2d(X, w1, image_shape=(64, 1, 28, 28), filter_shape=w1.shape)
>> h1p = pool_2d(h1, ds=(2,2), st=(1,1), ignore_border=True)
>> h2 = conv2d(h1p, w2, image_shape=(64, 32, 14, 14), filter_shape=w2.shape)
>> h2p = pool_2d(h2, ds(2,2), st=(1,1), ignore_border=True)
>>
>> In this case I get an error complaining about the image shape as an input 
>> regarding the second convolution. It says that should be 27 instead of 14.
>> This where things start to get a bit unclear for me. By looking at the 
>> conv2d() documentation its says that if you use the valid mode which is the 
>> default
>> in this case then the output image_shape from the convolution is computed 
>> as image_shape - filter_shape + 1.
>> If we consider that then from our first image_shape=(64, 1, 28, 28) as 
>> input to the first convolution operation we would have the following 
>> image_shape dimension:
>> image_height = 28 - 1 (filter_height) + 1 (Constant)
>> new_image_height = 28 (unchanged from the above computations)
>>
>> now if we do a downsampling with filter size = (2,2)
>>
>> final_new_image_height = 28/2 = 14
>>
>> As I have exactly putted in my second convolution. Now why is theano 
>> complaining about that and is asking that the input should be 27 instead 
>> for the image height and width. It seems like the pooling is either being 
>> skipped or never considered by theano in this case. Why is that happening?
>>
>> Any developers of theano who can shed some light on this topic?
>>
>> Thanks!
>>
>>
>>

-- 

--- 
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.

Reply via email to