Keras Conv2D 输入形状

2024-10-02 00:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Keras作为我的CNN模型。在那个模型中,我用图像来训练它。我的图像是256*256的形状。但是我把它训练成64*64。当我调整图像大小为64*64并再次训练时,我的准确率急剧下降。我错过了什么?在

当我将卷积2D输入形状排列为

classifier.add(Convolution2D(32,3,3,input_shape = (256,256), activation ='relu'))

这需要很多时间。因此,我将卷积2d安排为classifier.add(Convolution2D(32,3,3,input_shape = (64,64), activation ='relu')),并训练了我的第一个模型。它预测得很好。在

当我将输入图像的大小调整为64*64并使用卷积2d训练为

^{pr2}$

我的准确率下降了。有什么问题吗?在

这是密码

classifier = Sequential()
classifier.add(Convolution2D(32,3,3,input_shape = (64,64,3), activation ='relu'))
classifier.add(MaxPooling2D(pool_size=(2,2)))
classifier.add(Flatten())
classifier.fit_generator(
        training_set,
        steps_per_epoch=8000,
        epochs=10,
        validation_data=test_set,
        validation_steps=800)

这是我的重塑代码

from PIL import Image
import os
path = 'TestForTrain2'
for file in os.listdir('TestForTrain2'):
    img = Image.open(os.path.join('TestForTrain2', file))
    width, height = img.size
    stringName = str(file)
    print(width," === ",height)
    print(stringName)
    f, e = os.path.splitext(path + file)
    imResize = img.resize((64, 64), Image.ANTIALIAS)
    imResize.save( stringName + '.jpg', 'JPEG', quality=90)

Tags: path模型图像imageaddinputosactivation
2条回答

您的模型定义似乎并不完整,它似乎至少错过了最后一个Dense()层来执行实际的分类。然而,将输入分辨率降低4英寸2维度将使“原始信息”输入减少16(4ˆ2),这将最终对预测精度产生负面影响。在

由于给定的信息少了很多,所以您的模型无法像以前那样准确地预测类。在

预处理时间: 这可能是预处理的图像。我们只在需要时预处理数据,因为在预处理数据时,我们会丢失一些信息。如果我们在某些情况下不预处理数据,那么算法可能需要时间来处理较大的值(而不是预处理的数据)。在

  1. 当我们训练模型的资源较少时,我们将对数据进行预处理
  2. 我们对数据进行预处理,因为它们在我们的数据中都是非常大和非常小的值。然后我们对它进行标准化并在一定范围内得到我们的数据。像(0,1)
  3. 它们还有许多其他原因需要进行预处理。在

但我们并不是对每一个数据都进行预处理。您首先了解数据的性质,然后再对其进行预处理。在

您的解决方案: 现在,通过调整图像大小来预处理数据。通过将图像从(256256)转换为((64,64)),现在当您有大尺寸图像时,它们在图像中的像素值更多,每个像素都会给我们提供一些信息。现在,当你调整图像大小时,你的像素就少了,所以你的模型可以用来分类的信息就少了。但当你不调整数据大小时,你的机器需要时间来处理你的图像。现在,通过实验找到一些中间的方法,你选择的尺寸可以为你的模型提供足够的信息,而机器处理这些信息的努力就会减少。试试(180*180) (164*164)继续往下走,直到数据显示达到要求的精度。在

相关问题 更多 >

    热门问题