我刚开始接触GAN领域,尝试了几种教程,但大多数都使用了Cifar或mnist数据集。所以大多数是这种内置格式形状(xxxx, 28, 28)。
最近,我想尝试使用其他图片。例如,
from scipy import miscdata = misc.imread("1.PNG") #这可以是任何JPEG或其他格式的图片print(data.shape)
我的输出:
(842, 1116, 4) # 说实话,我不明白这是什么意思。842是指842个文件吗?我以为我只加载了一张图片。
我期望的输出:
由于我是新手,我真的很想问一下是否应该变成(1, 28, 28)或者其他什么?这样我就可以适应GAN,因为教程中使用了784
通常,在mnist数据集中,我们有(60000, 28, 28),这意味着6万张图片,每张图片的形状为28×28。那我的上述输出呢?(842, 1116, 4)并不意味着842张图片,形状为1116 x 4,对吗?我只加载了一张图片。有人能帮我转换并理解它吗?谢谢
回答:
imread使用PIL或Pillow来读取图像,它返回的图像格式为:高度 x 宽度 x 通道,其中通道通常是3个通道(红色,绿色,蓝色[RGB]的普通彩色图像)或有时是4个通道(红色,绿色,蓝色,透明度[RGBA])。
所以你读取了一张大小为842x1116
像素的图像,具有4个颜色通道。你说你使用形状为(xxxx, 28, 28)的训练数据,所以你使用的是灰度而不是彩色图像。第一步是将彩色图像转换为灰度图像。Pillow
(作为PIL的替代品)是一个很好的图像操作库。或者你可以只使用一个通道
gray_data = data[:,:,0]
要将其用作训练数据,你现在可以将其调整大小至28×28,或者从中提取28×28大小的较小图像块。
small_data = gray_data[:28,:28]
这将导致(28,28)。大多数学习算法期望不止一张而是多张图像,大多数情况下格式为(#images, height, width)。所以你需要重塑它:
final_data = small_data.reshape(1,28,28)
这样应该可以了。然而,适当的RGB(A)到灰度转换和调整大小将是更好的解决方案。请查看Pillow文档以获取详细信息。