Python 二维输入形状
我正在使用Keras作为我的CNN模型。在该模型中,我使用图像对其进行训练。我的图像是256*256的形状。但是我把它训练成64*64。当我将图像调整为64*64并再次训练时,我的准确率急剧下降。我错过了什么 当我将卷积2D输入形状排列为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,
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),这最终会对预测精度产生负面影响
由于提供的信息少了很多,所以逻辑上,您的模型无法像以前那样准确地预测类。何时进行预处理: 这可能是预处理的图像。我们只在需要时预处理数据,因为当我们预处理数据时,我们会丢失一些信息。如果我们在某些情况下不预处理数据,那么算法可能需要时间来处理较大的值(而不是预处理的数据)
(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作为输入形状。这样做我错过了什么?谢谢你的回答。