Tensorflow 为什么要在CNN之前调整数据集图像的大小,因为它会拉伸它们?

Tensorflow 为什么要在CNN之前调整数据集图像的大小,因为它会拉伸它们?,tensorflow,keras,conv-neural-network,Tensorflow,Keras,Conv Neural Network,我使用以下函数(简化)初始化数据集: 在我观看的教程中,人们将输入图像的大小调整为(宽度、高度)。但这会延伸图像。我不明白为什么我们要这么做,因为在我使用的模型中,输入图像被应用了卷积。因此,我尝试不调整输入图像的大小,但在函数结束时的重塑过程中出错 我遗漏了什么?你不局限于拉伸图像,也许你可以裁剪图像或添加一个颜色一致的缓冲区,尽管如果你能裁剪出更方便的图像,但你仍然可以用固定的颜色填充剩余的空间,模型会毫不在意的。在重塑时你会遇到什么样的错误?如果不重塑图像,很可能以后无法将numpy数组的

我使用以下函数(简化)初始化数据集:

在我观看的教程中,人们将输入图像的大小调整为(宽度、高度)。但这会延伸图像。我不明白为什么我们要这么做,因为在我使用的模型中,输入图像被应用了卷积。因此,我尝试不调整输入图像的大小,但在函数结束时的重塑过程中出错


我遗漏了什么?

你不局限于拉伸图像,也许你可以裁剪图像或添加一个颜色一致的缓冲区,尽管如果你能裁剪出更方便的图像,但你仍然可以用固定的颜色填充剩余的空间,模型会毫不在意的。

在重塑时你会遇到什么样的错误?如果不重塑图像,很可能以后无法将numpy数组的大小调整为“宽度”、“高度”。在这种情况下,必须更改宽度和高度的值。

首先需要使用
PIL
cv2
调整图像大小,然后将其转换为NumPy数组。由于元素数量可能会发生变化,因此重塑NumPy数组的形状将不起作用。
WIDTH = ...
HEIGHT = ...

def load_data(dataset_path):
    images = []
    labels = []
    for all_images:
        image = cv2.imread(pimage_path)
        image = cv2.resize(image, (WIDTH, HEIGHT)) #???
        labels.add(corresponding_label)
    return (np.array(images).reshape(-1, WIDTH, HEIGHT, 3) / 255, np.array(labels))