首页 > 解决方案 > 如何以更少的图像在 CNN 上获得更高的准确性

问题描述

目前我正在研究只有 210 张图像的 kaggle 花卉分类数据集,这组图像在验证集上的准确率仅为 11%。

enter code here

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

import cv2
#from tqdm import tqdm
import os
import warnings
warnings.filterwarnings('ignore')

flower_img = r'C:\Users\asus\Downloads\flower_images\flower_images'

data = pd.read_csv(r'C:\Users\asus\Downloads\flower_images\flower_labels.csv')
img = os.listdir(flower_img)[1]
image_name = [img.split('.')[-2] for img in os.listdir(flower_img)]
label_array = np.array(data['label'])
label_unique = np.unique(label_array)
names = [' phlox','rose','calendula','iris','leucanthemum maximum','bellflower','viola','rudbeckia laciniata','peony','aquilegia']


Flower_names = {}
for i in range(10):
    Flower_names[i] = names[i]
print(Flower_names)
Flower_names.get(8)
x = data['label'][2]
Flower_names.get(x)

i=0
for img in os.listdir(flower_img):
    #print(img)

    path = os.path.join(flower_img,img)
    #img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
    img = cv2.imread(path)
    #print(img.shape)
    img = cv2.resize(img,(128,128))
    data['file'][i] = np.array(img)
    i+=1
data['file'][0].shape

plt.imshow(data['file'][0])
plt.show()

import keras
from keras.models import Sequential
from keras.layers import Dense,Conv2D,Activation,MaxPool2D,Dropout,Flatten

model = Sequential()
model.add(Conv2D(32,kernel_size=3,activation='relu',input_shape=(128,128,3)))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(64,kernel_size=3,activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(128,kernel_size=3,activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

#model.add(Conv2D(512,kernel_size=3,activation='relu'))
#model.add(MaxPool2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dense(10,activation='softmax'))
model.add(Dropout(0.25))

from keras.optimizers import Adam
model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.002),metrics=['accuracy'])
model.summary()

x = np.array([i for i in data['file']]).reshape(-1,128,128,3)
y = np.array([i for i in data['label']])

from keras.utils import to_categorical
y = to_categorical(y)

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y)

model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=10)

model.evaluate(x_test,y_test)

model.evaluate(x_train,y_train)

如何仅使用此数据集来提高准确性,以及如何预测任何输入图像的类别。

花色图像数据集链接:https ://www.kaggle.com/olgabelitskaya/flower-color-images

标签: machine-learningkerasconv-neural-network

解决方案


你可以做的事情:

老实说,可以使用越来越多的技术来提高使用数据的有效性。尝试搜索有关此主题的内容。这些是我在一分钟内记住的。我给出的这些链接只是主要的示例。您可以通过专门的研究更好地挖掘。


推荐阅读