machine-learning - 如何以更少的图像在 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
解决方案
推荐阅读
- android - Android:对材质轮廓下拉菜单进行样式设置的问题
- c - STM32 32 位 ARM 架构上的 System Tick 翻转
- node.js - TypeError:Discord.MessageAttachment 不是构造函数
- javascript - React 中的映射数组给出 .map 不是函数
- listview - QML:当元素超过 40 个元素时,ListView 的行为很奇怪
- google-cloud-platform - 我们如何在通过 EventARc 触发器创建的云发布订阅中启用排序?
- javascript - DFS + memo:如何分析时间和空间复杂度
- python - Ariflow can't seem to use Jinja templating correctly
- python-3.x - 在 Python 中通过 ARM 模板部署 Azure 数据工厂的问题
- join - 如何在 Kusto 数据库的连接条件下将列转换为小写