Machine learning 如何用更少的图像在CNN上获得更高的准确度

Machine learning 如何用更少的图像在CNN上获得更高的准确度,machine-learning,keras,conv-neural-network,Machine Learning,Keras,Conv Neural Network,目前,我正在研究kaggle的花卉分类数据集,该数据集只有210幅图像,使用这组图像,我在验证集上的准确率仅为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_

目前,我正在研究kaggle的花卉分类数据集,该数据集只有210幅图像,使用这组图像,我在验证集上的准确率仅为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)
如何仅使用此数据集提高精度?如何预测任何输入图像的类

花卉彩色图像数据集链接:

您可以做的事情:

  • 渐进式调整尺寸
  • 图像增强
  • 迁移学习
老实说,可以利用越来越多的技术来提高所用数据的有效性。尝试搜索有关此主题的信息。这些就是我一分钟后记得的。我给出的这些链接只是主要的示例。通过专门的研究,你可以挖掘得更好。

你可以做的事情:

  • 渐进式调整尺寸
  • 图像增强
  • 迁移学习

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

您的数据集非常小。当使用非常大的数据集进行训练时,卷积神经网络是最优的。你真的希望在你的数据集中有成千上万的图像(或更多!)

您可以尝试使用各种图像处理技术来增加数据集的大小,从而增强当前数据集。这些技术将获取原始图像,倾斜它们,旋转它们,并进行其他修改以增加训练数据的大小。这些技术可能会有所帮助,但最好增加数据集的自然大小

如果无法增加数据集的大小,则应检查为什么需要使用CNN。当使用较小的数据集进行训练时,还有其他算法可以提供更好的结果。看看或者


如果你必须使用有线电视新闻网,这是一个很好的解决办法。您可以使用经过培训的模型中的特征,并将其应用于您的问题。我在这种方法上取得了巨大成功。

您的数据集非常小。当使用非常大的数据集进行训练时,卷积神经网络是最优的。你真的希望在你的数据集中有成千上万的图像(或更多!)

您可以尝试使用各种图像处理技术来增加数据集的大小,从而增强当前数据集。这些技术将获取原始图像,倾斜它们,旋转它们,并进行其他修改以增加训练数据的大小。这些技术可能会有所帮助,但最好增加数据集的自然大小

如果无法增加数据集的大小,则应检查为什么需要使用CNN。当使用较小的数据集进行训练时,还有其他算法可以提供更好的结果。看看或者

如果你必须使用有线电视新闻网,这是一个很好的解决办法。您可以使用经过培训的模型中的特征,并将其应用于您的问题。我在这方面取得了巨大成功