请给出基于卷积神经网络的二分类识别玫瑰花和向日葵的python代码要使accuracy和val_accuracy的值变换足够平缓。使用如下如下代码进行数据划分:import numpy as npimport tensorflow as tffrom keraspreprocessingimage import ImageDataGeneratorimport osfrom PIL import
下面是基于卷积神经网络的二分类识别玫瑰花和向日葵的Python代码示例:
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, Dropout
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)
# 将标签转换为整数形式
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(128, activation='relu'))
model.add(Dropout(0.5))
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,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
# 训练模型
model.fit(datagen.flow(x_train, y_train, batch_size=32), epochs=50, validation_data=(x_test, y_test))
# 评估模型
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
这个代码示例中使用了卷积神经网络模型,包括两个卷积层和一个全连接层,以及数据增强技术用于增加训练样本的多样性。训练过程中使用了ImageDataGenerator类来进行数据增强,通过调整各种参数可以实现不同程度的变换,从而使得accuracy和val_accuracy的值变换足够平缓。训练完成后,使用测试集评估模型的性能,并打印出测试集的loss和accuracy值
原文地址: https://www.cveoy.top/t/topic/h32N 著作权归作者所有。请勿转载和采集!