【发布时间】:2022-01-07 15:25:15
【问题描述】:
我的问题听起来很抽象,但我在其他讨论中找不到我的问题的解决方案。
我创建了自己的图片数据集 (128*128) 以拥有一个识别限速标志的 cnn 模型。所以我拍了大约 2000 张照片,大约分为 8 类。所以每个标志我有大约 200 张或更多的图片。
我已经测试了不同的模型,简单的模型,困难的模型,进行了数据增强以避免过度拟合,但结果始终相同,如图所示,我得到了“相当糟糕”或“嘈杂”的结果。
如您所见,我用不同的参数测试了两个不同的模型(图片大小不同,激活 = elu,内核大小不同,从 8 和 16 开始)。
所以我或多或少对我的工作深信不疑,因为当它来自我的相机的实时识别时,它不能很好地工作,或者预测并不总是正确的(尽管准确度为 0.9)。也许它来自我不正确的数据集?我的模型?我想对这个棘手的问题稍微了解一下:)。
我会给你我的模型和我的 20 公里/小时标志数据集示例。
此型号代码对应第二张图和结果:
no_Of_Filters = 8
size_of_Filter = (3, 3) # THIS IS THE KERNEL THAT MOVE AROUND THE IMAGE TO GET THE FEATURES.
# THIS WOULD REMOVE 2 PIXELS FROM EACH BORDER WHEN USING 100 100 IMAGE
size_of_pool = (2, 2) # SCALE DOWN ALL FEATURE MAP TO GENERALIZE MORE, TO REDUCE OVERFITTING
no_Of_Nodes = 100 # NO. OF NODES IN HIDDEN LAYERS
model = Sequential()
# ADDING MORE CONVOLUTION LAYERS = LESS FEATURES BUT CAN CAUSE ACCURACY TO INCREASE
model.add((layers.Conv2D(no_Of_Filters, size_of_Filter, input_shape=(imageDimensions[0], imageDimensions[1], 1),
activation='elu')))
model.add((layers.Conv2D(no_Of_Filters * 2, size_of_Filter, activation='elu')))
model.add(layers.MaxPooling2D(pool_size=size_of_pool))
model.add((layers.Conv2D(no_Of_Filters * 4, size_of_Filter, activation='elu')))
model.add((layers.Conv2D(no_Of_Filters * 8, size_of_Filter, activation='elu')))
model.add(layers.MaxPooling2D(pool_size=size_of_pool))
model.add(Flatten())
model.add(Dense(no_Of_Nodes, activation='relu'))
# model.add(Dropout(0.2)) # INPUTS NODES TO DROP WITH EACH UPDATE 1 ALL 0 NONE
model.add(Dense(noOfClasses, activation='softmax')) # OUTPUT LAYER
# COMPILE MODEL
model.compile(Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
【问题讨论】:
-
也许您可以尝试在您的
Conv2D或MaxPooling2D之后添加layers.Dropout。它可能有助于过度拟合。
标签: python tensorflow keras conv-neural-network image-recognition