首页 文章

CNN - 将Conv层的输出重新整形为致密层

提问于
浏览
2

我的conv层的输出形状为(64,3,3,80),其中64是批量大小 . 下一层是致密的形状层(3920,4096) . 如何重塑我的conv层的输出以适应我的密集层的形状?我在tensorflow中实现:)这是密集层之前的层 .

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 回答

  • 2

    conv3 =>重塑=> FC1(720-> 4096)

    [64,3,3,80] => [64,720] => [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
    

相关问题