import os# 训练集和测试集文件夹路径data_dir = rCUsers24423DesktopCourse Design for Deep Learningimagetrain_dir = ospathjoindata_dir traintest_dir = ospathjoindata_dir test写一个基于卷积神经网络的家具分类的代码包括 导入所需库 数据集收集、读
导入所需库
import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout from tensorflow.keras.optimizers import Adam from sklearn.preprocessing import LabelBinarizer
数据集收集、读取
data_dir = r"C:\Users\24423\Desktop\Course Design for Deep Learning\image" train_dir = os.path.join(data_dir, 'train') test_dir = os.path.join(data_dir, 'test')
加载数据集并进行数据可视化
batch_size = 32 train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) train_generator = train_datagen.flow_from_directory(train_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical') test_datagen = ImageDataGenerator(rescale=1./255) test_generator = test_datagen.flow_from_directory(test_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical')
将标签进行one-hot编码
label_binarizer = LabelBinarizer() train_labels = label_binarizer.fit_transform(train_generator.classes) test_labels = label_binarizer.fit_transform(test_generator.classes)
将数据集划分为训练集和验证集
train_size = train_generator.samples test_size = test_generator.samples train_steps = np.ceil(train_size / batch_size) test_steps = np.ceil(test_size / batch_size)
搭建卷积神经网络模型
model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(256, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(3, activation='softmax'))
参数优化
lr = 0.0001 epochs = 20 optimizer = Adam(lr) model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
训练模型
history = model.fit(train_generator, steps_per_epoch=train_steps, epochs=epochs, validation_data=test_generator, validation_steps=test_steps)
显示模型结构
model.summary()
绘制准确率及Loss曲线图
plt.plot(history.history['accuracy'], label='accuracy') plt.plot(history.history['val_accuracy'], label='val_accuracy') plt.plot(history.history['loss'], label='loss') plt.plot(history.history['val_loss'], label='val_loss') plt.legend() plt.show()
图像识别展示
test_images, test_labels = next(test_generator) predictions = model.predict(test_images) for i in range(batch_size): image = test_images[i] true_label = test_labels[i] predicted_label = predictions[i] plt.imshow(image) plt.title("True: {0}, Predicted: {1}".format(np.argmax(true_label), np.argmax(predicted_label))) plt.show(
原文地址: https://www.cveoy.top/t/topic/gU4b 著作权归作者所有。请勿转载和采集!