Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 在CNN中使用图像时,尺寸意味着什么?_Tensorflow_Image Processing_Conv Neural Network - Fatal编程技术网

Tensorflow 在CNN中使用图像时,尺寸意味着什么?

Tensorflow 在CNN中使用图像时,尺寸意味着什么?,tensorflow,image-processing,conv-neural-network,Tensorflow,Image Processing,Conv Neural Network,请通读下面的代码。图像大小为(32、256、256、6)。我认为没有必要知道什么是网络,它做什么。我的问题纯粹是分析性的 net = slim.conv2d(input_images, 64, [5, 5], stride=1, scope='conv1') net = slim.max_pool2d(net, [2, 2], scope='pool1') # image size is (batch_size, 256 , 256 , 6) net =

请通读下面的代码。图像大小为(32、256、256、6)。我认为没有必要知道什么是网络,它做什么。我的问题纯粹是分析性的

      net = slim.conv2d(input_images, 64, [5, 5], stride=1, scope='conv1') 
      net = slim.max_pool2d(net, [2, 2], scope='pool1') # image size is (batch_size, 256 , 256 , 6)

      net = slim.conv2d(net, 128, [5, 5], stride=1, scope='conv2')
      net = slim.max_pool2d(net, [2, 2], scope='pool2')

      net = slim.conv2d(net, 256, [3, 3], stride=1, scope='conv3')
      net = slim.max_pool2d(net, [2, 2], scope='pool3')

      net = tf.image.resize_bilinear(net, [64,64])
      net = slim.conv2d(net, 256, [3, 3], stride=1, scope='conv4')
      
      net = tf.image.resize_bilinear(net, [128,128])
      net = slim.conv2d(net, 128, [3, 3], stride=1, scope='conv5')

      net = tf.image.resize_bilinear(net, [256,256]) #(32 , 256 , 256 , 3)

      
      net = slim.conv2d(net, 64, [5, 5], stride=1, scope='conv6')

net = slim.conv2d(net, 3, [5, 5], stride=1, activation_fn=tf.tanh,
normalizer_fn=None, scope='conv7') #  32*248*248*3
根据我的说法,网络的尺寸是(322482483)。但显然,根据这篇论文,它应该是(32,256,256,3)

问题1)我哪里出错了

问题2)在slim.conv2d中,64和[5,5]到底是什么?我认为它们是过滤器的数量,5*5是内核的维度。但既然我得到了错误的维度,我在这里也错了吗

问题3)当你说(32256256,3)时,是否意味着有32个样本,256*256是像素强度,3是通道数

问题4)我知道这可能很难回答,但有人能告诉我,需要先减小尺寸,然后再增大尺寸吗?非常感谢与该概念的链接

  • 我认为您之所以使用[322482483],而不是您想要的[32256,256,3],是因为填充。简单地说,当你进行卷积运算时,卷积窗口a.k.a.内核并不一定完全适合图像,因此图像的外部填充了零以使其适合。根据您的代码,填充未指定,因此,请尝试将padding='same'添加到conv2d层中

  • 关于64和[5,5]的含义,您在这里是正确的。过滤器的数量与此无关。如果我在(1)中的回答是正确的,内核与您正在经历的维度差距有关,尽管不是原因。但是,理想情况下,您应该能够将其设置为3、5或任何值,而不会出现问题。参见第(1)节

  • 正如你所说,32对应于样本。换句话说,就是批量大小。图像大小本身为256 x 256像素(高度和宽度)。3个通道对应于每个像素的红色、蓝色和绿色强度。如果图像为灰度,则只有一个通道。在Tensorflow中,约定为(N,H,W,C),表示样本数量、高度、宽度和通道。请注意,通道在输入和输出时通常为3,但它在隐藏层中会根据您使用的过滤器数量而变化

  • 减少然后增加图像的高度和宽度对于某些任务是有好处的,比如图像分割,在这里你可以减少图像中的信息。我们称网络的前半部分为编码阶段,后半部分为解码阶段。我认为它在前半部分通过缩小图像尺寸来消除不必要的信息,然后在后半部分将其恢复到原始大小。不过这只是我的解释。一个著名的模型就是U-net