3

연구 논문에서 cnn을 다시 만들려고 시도 중이지만 나는 여전히 깊은 학습에 익숙하지 않습니다.컨볼 루션 층의 텐서 흐름 크기

크기가 32x32x7 인 3D 패치가 제공됩니다. 먼저 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) 

고마워요!

+0

보고있는 오류가 무엇인가요? – Engineero

답변

1

처음으로 conv3d 이후에는 [None, 16, 16, 4, 32] 모양의 텐서가 있으므로 두 번째 conv3d_s1에 모양이 [3, 3, 4, 32, 64] 인 커널을 사용해야합니다.