TensorFlow卷积层大小

3

我尝试从一篇研究论文中重现一个卷积神经网络,但是我对深度学习还很陌生。

我有一个32x32x7的三维块。我首先想用32个特征和2个步长进行3x3的卷积。然后从那个结果中,我需要使用64个特征和1个步长进行3x3x4的卷积。在这两个卷积之间,我不想进行池化或者激活函数的处理。为什么不能直接把第一个卷积的结果输入到第二个卷积中?

   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)

谢谢你!

你看到的错误是什么? - Engineero
1个回答

1
在第一个 conv3d 之后,您将获得形状为 [None, 16, 16, 4, 32] 的张量,因此您必须在第二个 conv3d_s1 中使用形状为 [3, 3, 4, 32, 64] 的内核。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接