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]

请给出基于卷积神经网络的二分类识别玫瑰花和向日葵的python代码必须使得最终模型的评估得分不低于095。使用如下如下代码进行数据划分:import numpy as npimport tensorflow as tffrom keraspreprocessingimage import ImageDataGeneratorimport osfrom PIL import Imagefrom ke

原文地址: https://www.cveoy.top/t/topic/h30g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录