[英]Keras Conv2D input Shape
我正在将 Keras 用于我的 CNN 模型。 在那个模型中,我使用图像来训练它。 我的图像形状为 256*256。 但是我将其训练为 64*64。 当我将图像大小调整为 64*64 并再次训练时,我的准确率急剧下降。 我错过了什么?
当我将 Convolution2D 输入形状排列为
classifier.add(Convolution2D(32,3,3,input_shape = (256,256), activation ='relu'))
这需要很多时间。 因此,我将我的 Convolution2D 安排为classifier.add(Convolution2D(32,3,3,input_shape = (64,64), activation ='relu'))
并训练了我的第一个模型。 它预测得很好。
当我将输入图像的大小调整为 64*64 并使用 Convolution2D 进行训练时
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)
您的模型定义似乎不完整,似乎至少缺少一个最终的Dense()
层来执行实际分类。 但是,在 2 维中将输入分辨率降低 4 将使您的“原始信息”输入减少 16 (4^2),这最终会对您的预测准确性产生负面影响。
鉴于信息少得多,您的模型无法像以前那样准确地预测类别是合乎逻辑的。
何时预处理:这可能是预处理的图像。 我们只在需要时预处理数据,因为当我们预处理数据时,我们会丢失一些信息。 如果我们在某些情况下不预处理我们的数据,那么算法可能需要时间来处理大值(不是预处理数据)。
但我们不会预处理每个数据。 您首先了解数据的性质,然后对其进行预处理。
您的解决方案:现在您正在通过调整图像大小来预处理数据。 现在,通过将图像从 ((256,256)) 转换为 ((64,64)),当您拥有大尺寸图像时,图像中的像素值会更多,并且每个像素都会向我们提供一些信息。 现在,当您调整图像大小时,像素较少,因此模型可用于分类的信息较少。 但是当您不调整数据大小时,您的机器需要时间来处理您的图像。 现在通过实验找到一些中间方法,即您选择的尺寸将为您的模型提供足够的信息,而机器将减少处理这些信息的工作量。 尝试 (180*180) (164 *164) 继续下降,直到根据数据达到所需的精度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.