Python 二维输入形状

Python 二维输入形状,python,machine-learning,keras,Python,Machine Learning,Keras,我正在使用Keras作为我的CNN模型。在该模型中,我使用图像对其进行训练。我的图像是256*256的形状。但是我把它训练成64*64。当我将图像调整为64*64并再次训练时,我的准确率急剧下降。我错过了什么 当我将卷积2D输入形状排列为 classifier.add(Convolution2D(32,3,3,input_shape = (256,256), activation ='relu')) 这需要很多时间。因此,我将卷积2D安排为classifier.add(卷积2D(32,3,3,

我正在使用Keras作为我的CNN模型。在该模型中,我使用图像对其进行训练。我的图像是256*256的形状。但是我把它训练成64*64。当我将图像调整为64*64并再次训练时,我的准确率急剧下降。我错过了什么

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

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

当我将输入图像的大小调整为64*64,并使用卷积2D进行训练时

classifier.add(Convolution2D(32,3,3,input_shape = (64,64) 
我的准确率降低了。有什么问题

这是密码

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)

您的模型定义似乎不完整,它似乎至少错过了执行实际分类的最后一层。但是,将输入分辨率降低4/2会将“原始信息”输入降低16(4ˆ2),这最终会对预测精度产生负面影响


由于提供的信息少了很多,所以逻辑上,您的模型无法像以前那样准确地预测类。

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

  • 当我们有更少的资源来训练我们的模型时,我们将预处理数据
  • 我们对数据进行预处理,因为它们在我们的数据中是非常大和非常小的值。然后我们将其标准化,使其标准化,并在一定范围内获取数据。like(0,1)
  • 还有许多其他原因需要进行预处理 但我们并不是对所有数据都进行预处理。您首先了解数据的性质,然后对其进行预处理

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

    请说明如何调整图像大小?你用什么打开它们?枕头?在这种情况下,它是opencv别忘了它使用的是BGR颜色格式,而不是RGB格式。我很困惑。你的两个训练过程有什么不同?不同之处只是输入图像的形状。在我的第一个模型中,输入图像的形状是256*256。这个模型运行得很好。在我的第二个模型中,我将输入图像重塑为64*64,模型的准确率非常低。我不明白为什么会发生这种情况。@const我添加了重塑代码。还有一个问题,当把256*256个图形训练成64*64个输入图形时,会发生什么?这会影响训练还是CNN会做出一些安排?@Ghostede,你想预测的目标变量是什么?从您发布的顺序模型定义来看,不太清楚您解决的问题是什么。你学过图像嵌入之类的吗?我想如果你能把所有的代码都发布在这里会很有帮助。实际上我有稠密的()层,只是没有放在这里。我想知道,当ı调用classifier.add(卷积2d(32,3,3,input_shape=(64,64),activation='relu')函数时,即使输入图像的形状为256*256,它也能很好地预测。即使我的图像是256*256形状,当应用con2d时会发生什么。谢谢事实上我已经照你说的做了。但ı不理解的部分是,即使我的图像是256*256形状,ı也会将2D 64*64作为输入形状。这样做我错过了什么?谢谢你的回答。