【问题标题】:How do I explain this TensorFlow tf.nn.conv2d() layer shape?如何解释这个 TensorFlow tf.nn.conv2d() 层形状?
【发布时间】:2020-07-11 05:10:30
【问题描述】:

我的 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)。

为什么不是这样,我该如何解决?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    在我的情况下,这行 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]

    【讨论】:

    • 说不正确并不能回答您自己的问题。还请说明你做了什么来修复它。
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多