[英]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.