繁体   English   中英

我如何解释这个 TensorFlow tf.nn.conv2d() 层形状?

[英]How do I explain this TensorFlow tf.nn.conv2d() layer shape?

我的 Tensorflow 卷积层有一个我没想到的形状,我没有看到错误。

我是 TensorFlow 的新手,想使用这个函数来创建一个卷积层:

def new_conv_layer(input,              # The previous layer.
                   num_input_channels, # Num. channels in prev. layer.
                   filter_size,        # Width and height of each filter.
                   num_filters,        # Number of filters.
                   use_pooling=True):  # Use 2x2 max-pooling.

    shape = [filter_size, filter_size, num_input_channels, num_filters]

    weights = new_weights(shape=shape)

    biases = new_biases(length=num_filters)

    layer = tf.nn.conv2d(input=input_,
                         filters=weights,
                         strides=[1, 1, 1, 1],
                         padding='SAME')

    layer += biases

    if use_pooling:

        layer = tf.nn.max_pool(input=layer,
                               ksize=[1, 2, 2, 1],
                               strides=[1, 2, 2, 1],
                               padding='SAME')


    layer = tf.nn.relu(layer)


    return layer, weights

但是当我使用它时

num_channels = 1
img_size = 28

x_image = tf.reshape(x, [-1, img_size, img_size, num_channels])

# Convolutional Layer 1.
filter_size1 = 5          # Convolution filters are 5 x 5 pixels.
num_filters1 = 16         # There are 16 of these filters.

layer_conv1, weights_conv1 = new_conv_layer(input=x_image,
                                           num_input_channels=num_channels,
                                           filter_size=filter_size1,
                                           num_filters=num_filters1,
                                           use_pooling=True)

layer_conv1

我得到这个输出:

<tf.Tensor 'Relu:0' shape=(None, 392, 392, 16) dtype=float32>

因为我的图像是方形 28x28 形状并且我应用了 2x2 池化,所以我希望这个形状是 (None, 14, 14, 16)。

为什么不是这种情况,我该如何解决?

在我的情况下,这一行x = tf.compat.v1.placeholder(tf.float32, shape=[None, img_size_flat], name='x')不正确!

特别是img_size_flat不是每个“拉伸”图像的长度,因为它应该是。

img_size_flat = df.drop('label', axis=1).shape[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM