0

我的conv-layer的輸出形狀爲(64,3,3,80),其中64是批量大小。下一層是一個緻密的形狀層(3920,4096)。如何重塑我的conv-layer的輸出以適合我的密集圖層的形狀?我在tensorflow中實施:) 這是密集層之前的圖層。CNN - 將輸出從Conv層重新整形爲緻密層

stride_conv = [1,1,1,1] 
    padding='SAME' 
    filter_3 = tf.Variable(initial_value=tf.random_normal([3,3,112,80])) 
    conv_3 = tf.nn.conv2d(conv_2,filter_3,stride_conv,padding) 

謝謝!

回答

1

conv3 =>整形=> FC1(720-1> 4096)

[64,3,3,80] => [64720] => [64,4096]

繼代碼執行Conv to FC如上圖所示:

shape = int(np.prod(conv_3.get_shape()[1:])) 
conv_3_flat = tf.reshape(conv_3, [-1, shape]) 

fc1w = tf.Variable(tf.truncated_normal([shape, 4096],dtype=tf.float32,stddev=1e-1), name='weights') 
fc1b = tf.Variable(tf.constant(1.0, shape=[4096], dtype=tf.float32), 
           trainable=True, name='biases') 

fc1 = tf.nn.bias_add(tf.matmul(conv_3_flat, fc1w), fc1b) 
fc1 = tf.nn.relu(fc1) 

希望這會有所幫助。

而且,簡單的模型MNIST(從這裏取:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py

def conv_net(x, weights, biases, dropout): 
    # Reshape input picture 
    x = tf.reshape(x, shape=[-1, 28, 28, 1]) 

    # Convolution Layer 
    conv1 = conv2d(x, weights['wc1'], biases['bc1']) 
    # Max Pooling (down-sampling) 
    conv1 = maxpool2d(conv1, k=2) 

    # Convolution Layer 
    conv2 = conv2d(conv1, weights['wc2'], biases['bc2']) 
    # Max Pooling (down-sampling) 
    conv2 = maxpool2d(conv2, k=2) 

    # Fully connected layer 
    # Reshape conv2 output to fit fully connected layer input 
    fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]]) 
    fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1']) 
    fc1 = tf.nn.relu(fc1) 
    # Apply Dropout 
    fc1 = tf.nn.dropout(fc1, dropout) 

    # Output, class prediction 
    out = tf.add(tf.matmul(fc1, weights['out']), biases['out']) 
    return out 
+0

謝謝!魔法 –