Python 为什么我们要写“plt.imshow(生成的_图像[0,:,:,0])”,结尾是零?

Python 为什么我们要写“plt.imshow(生成的_图像[0,:,:,0])”,结尾是零?,python,Python,当存储一个表示一个具有3个通道的图像的数组时,在这里生成_图像为什么我们要在末尾写一个0 generate_image.shape # im is a numpy array # output: (1, 28, 28, 3) plt.imshow(generated_image[0, :, :, 0]) 而不是a:。大概是这样的: plt.imshow(generated_image[0, :, :, :]) 生成的_图像阵列由生成模型生成。此数组的某些行如下所示: tf.Tensor(

当存储一个表示一个具有3个通道的图像的数组时,在这里生成_图像为什么我们要在末尾写一个0

generate_image.shape  # im is a numpy array
# output: (1, 28, 28, 3)
plt.imshow(generated_image[0, :, :, 0])
而不是a:。大概是这样的:

plt.imshow(generated_image[0, :, :, :])
生成的_图像阵列由生成模型生成。此数组的某些行如下所示:

tf.Tensor(
[[[[ 0.00453683 -0.00352695  0.00080534]
   [-0.00027692 -0.00395737  0.0022669 ]...
要删除规范化,请执行以下操作:

plt.imshow(generated_image[0, :, :, 0] * 127.5 + 127.5)
其中:

tf.Tensor(
[[[126.38482  126.80347  127.29859 ]
  [128.39748  128.35097  128.0462  ]...
尝试 plt.imshow生成的_映像[0]*127.5+127.5或plt.imshow生成的_映像[0,:,:,:,:]*127.5+127.5 发出警告:

Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).

并输出白色图像

从第二行的注释来看,图像有三个通道

因此,当您使用im[:,:,0]时,它将写入第一个通道。因此,您将获得灰度图像

另外,这不是一种合适的颜色转换方法,因为您忽略了其他通道

如果您使用im[:,:,:],它相当于i,它将写入所有三个通道,您将得到一个彩色图像

更新:

您反转规范化的方式是错误的。结帐
虽然它适用于PyTorch,但也适用于tensorflow。

我正在尝试显示形状为1、28、28、3的数组。使用plt.imshowgenerated_image[0,:,:,0]可以生成一个彩色图像。plt.imshowgenerated_image[0,:,:,:,:]发出警告:-将输入数据剪裁到imshow的有效范围,其中RGB数据[0..1]用于浮点或[0..255]用于整数。并输出完全白色的图像…matplotlib将显示彩色图像,即使您传递灰度图像,因为默认颜色贴图为颜色。如果需要在matplotlib中显示灰度图像,则需要将cmap值设置为灰度,需要将1、28、28、3解释为rgb数组。因此,当您将其索引为生成的_图像[0]时,您将获得第一幅彩色图像。您需要将1、28、28、3解释为rgb数组。如何做到这一点?只需使用im[0]