请给出基于卷积神经网络的二分类识别玫瑰花和向日葵的python代码必须使得最终模型的评估得分不低于095。使用如下如下代码进行数据划分:import numpy as npimport tensorflow as tffrom keraspreprocessingimage import ImageDataGeneratorimport osfrom PIL import Imagefrom ke
import numpy as np import tensorflow as tf from keras.preprocessing.image import ImageDataGenerator import os from PIL import Image from keras.utils import to_categorical from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
img_x = 64 img_y = 64
对读取图片进行预处理
读取图片
def read_image(imageName): img = Image.open(imageName) # 读取为64*64 img = img.resize((img_x, img_y), Image.ANTIALIAS) number_data = img.getdata() # 归一化处理 number_data_array = np.array(number_data) number_data_array = number_data_array.astype(float) number_data_normalize = number_data_array / 255
return number_data_normalize
images = [] labels = []
文件路径
path = os.listdir("./mgh")
读取路径下各文件夹对应的图片
遍历文件路径下包含的所有文件夹
for textPath in path: print(textPath) # 将文件路径下各文件夹名与文件路径结合变为图片的路径 for fn in os.listdir(os.path.join('mgh', textPath)): # 读取所有路径下的图片 if fn.endswith('.jpg'): fd = os.path.join('./mgh', textPath, fn) images.append(read_image(fd)) labels.append(textPath) X = np.array(images) y = np.array(labels)
将标签转换为整数形式0
label_mapping = {label: i for i, label in enumerate(np.unique(y))} y = np.array([label_mapping[label] for label in y])
划分训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=30)
转换为one-hot编码
y_train = to_categorical(y_train) y_test = to_categorical(y_test)
构建卷积神经网络模型
model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(img_x, img_y, 3))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(64, activation='relu')) model.add(Dense(2, activation='softmax'))
编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
数据增强
datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True ) datagen.fit(x_train)
训练模型
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32), steps_per_epoch=len(x_train) / 32, epochs=10)
评估模型
score = model.evaluate(x_test, y_test) print("Model evaluation score:", score[1]
原文地址: https://www.cveoy.top/t/topic/h30g 著作权归作者所有。请勿转载和采集!