Convolutional neural network architecture calculation question I'm attempting to understand the neural network architecture used in this paper: Visualizing and Understanding Convolutional Networks.
Here's an image of the network achitecture from the paper that is bothering me:

So in the first layer, a (224 x 224 x 3) image is convolved by 96 (7 x 7) kernels with a stride of 2. There is no mention of padding in the architecture description. Plugging these parameter values in the algorithm for the spatial size of the output volume from the Wikipedia article on CONVs, I have: 

*

*W = 224

*K = 7

*P = 0

*S = 2
This gives (W - K + 2P) / S + 1 = 109.5  According to commenters from a StackOverflow question, we simply round down to 109 when the output of the formula is not an integer. I tested this out in Tensorflow and confirmed this. However, in this paper, the output size is not 109, but 110. So I guess they rounded up, but I don't understand why. This method of rounding up repeats itself throughout the network architecture.  
Am I incorrectly applying this formula, were things done differently back in 2014 when the paper came out? Can anybody explain why they round up as opposed to down, and perhaps how I can do the same in Tensorflow?


You're correctly applying the formula (with a typo in +1 in your post), and it's typically rounded down in many libraries. Some lower level libraries provide an option to round down or up, but I didn't see this in tensorflow or pytorch.
The paper is from 2014, where there was no tensorflow nor pytorch publicly available. So, everything was a bit less standard (not saying they're right now, but comparatively).
For this reason, I believe the paper used their own implementation according to their understanding and assumptions. The formula given does not hold for subsequent layers as well, where 13 x 13 matrices are turned into 13 x 13 matrices with 3 x 3 conv. operations.
It's hard to understand what exactly they did, but except the pooling from 55 to 26, every dimension seems to hold with padding = 1. The rounding up trick does not work for 13x13 kernels.
