3 votes

tensorflow taille des couches de convolution

Je tente de recréer un CNN à partir d'un document de recherche, mais je suis encore novice en matière d'apprentissage profond.

On me donne un patch 3d de taille 32x32x7. Je veux d'abord effectuer une convolution de taille 3x3 avec 32 caractéristiques et un stride de 2. Ensuite, à partir de ce résultat, je dois effectuer une convolution 3x3x4 avec 64 caractéristiques et un stride de 1. Je ne veux pas faire de pool ou avoir une fonction d'activation entre les deux convolutions. Pourquoi ne puis-je pas simplement introduire les résultats de ma première convolution dans la seconde ?

   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)

Merci !

1voto

Vladimir Bystricky Points 1179

Après la première conv3d vous avez un tenseur avec la forme [None, 16, 16, 4, 32] vous devez donc utiliser le noyau avec la forme [3, 3, 4, 32, 64] dans la seconde conv3d_s1 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X