Devin Haslam
Devin Haslam

Reputation: 759

tensorflow size of convolution layers

I am attempting to recreate a cnn from a research paper, but I am still new to deep learning.

I am given a 3d patch of size 32x32x7. I first want to perform a convolution of size 3x3 with 32 features and a stride of 2. Then from that result, I need to perform a 3x3x4 convolution with 64 features and a stride of 1. I do not want to pool or have an activation function between the two convolutions. Why can't I just feed the results of my first convolution into the second one?

   import tensorflow as tf
   sess = tf.InteractiveSession()

   def conv3d(tempX, tempW):
     return tf.nn.conv3d(tempX, tempW, strides=[2, 2, 2, 2, 2], 
     padding='SAME')

   def conv3d_s1(tempX, tempW):
      return tf.nn.conv3d(tempX, tempW, strides=[1, 1, 1, 1, 1], 
      padding='SAME')

   def weight_variable(shape):
      initial = tf.truncated_normal(shape, stddev=0.1)
      return tf.Variable(initial)

   x = tf.placeholder(tf.float32, shape=[None, 7168])
   y_ = tf.placeholder(tf.float32, shape=[None, 3])
   W = tf.Variable(tf.zeros([7168,3]))

   #first convolution
   W_conv1 = weight_variable([3, 3, 1, 1, 32])
   x_image = tf.reshape(x, [-1, 32, 32, 7, 1])
   h_conv1 = conv3d(x_image, W_conv1)

   #second convolution
   W_conv2 = weight_variable([3, 3, 4, 1, 64])
   h_conv2 = conv3d_s1(h_conv1, W_conv2)

Thank you!

Upvotes: 3

Views: 192

Answers (1)

Vladimir Bystricky
Vladimir Bystricky

Reputation: 1330

After first conv3d you have tensor with shape [None, 16, 16, 4, 32], therefore you have to use kernel with shape [3, 3, 4, 32, 64] in the second conv3d_s1.

Upvotes: 1

Related Questions