Logo
Section 1 / 5

在 Python 中实现用于图像分类的 CNN

探索如何使用Python编程中的卷积神经网络(CNN)实现图像分类。

导入

在 Python 中实现用于图像分类的 CNN

探索如何使用Python编程中的卷积神经网络(CNN)实现图像分类。

导入必要的库

import keras from keras.models import Sequential # 导入用于构建序列模型的库 from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from keras.datasets import mnist # 导入MNIST手写数字数据集 from keras.optimizers import Adam import numpy as np

加载MNIST数据集

(x_train, y_train), (x_test, y_test) = mnist.load_data()

定义训练和测试数据所占比例

train_percentage = 0.25 # 训练数据:15,000张图像 test_percentage = 0.2 # 测试数据:2,000张图像

根据比例计算样本数量

total_train_samples = len(x_train) total_test_samples = len(x_test) train_samples = int(train_percentage * total_train_samples) test_samples = int(test_percentage * total_test_samples)

按照比例划分数据

x_train = x_train[:train_samples] y_train = y_train[:train_samples] x_test = x_test[:test_samples] y_test = y_test[:test_samples]

将训练和测试数据调整为CNN可接受的输入格式

x_train = np.expand_dims(x_train, axis=-1) x_test = np.expand_dims(x_test, axis=-1)

归一化数据

x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0

构建CNN模型

model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), MaxPooling2D((2, 2)), Flatten(), Dense(128, activation='relu'), Dense(10, activation='softmax') ])

编译模型

model.compile(optimizer=Adam(0.005), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

打印模型结构摘要

model.summary()

训练模型

model.fit(x_train, y_train, epochs=5, batch_size=64, verbose=2, validation_data=(x_test, y_test))

在干净的测试数据上评估模型

clean_test_loss, clean_test_accuracy = model.evaluate(x_test, y_test, verbose=2) print(f"干净测试准确率: {clean_test_accuracy:.4f}")

导入必要的库

import keras import numpy as np from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from keras.optimizers import Adam

加载MNIST数据集

(x_train, y_train), (x_test, y_test) = mnist.load_data()

定义训练和测试数据所占比例

train_percentage = 0.25 # 训练数据:15,000张图像 test_percentage = 0.2 # 测试数据:2,000张图像

根据比例计算样本数量

total_train_samples = len(x_train) total_test_samples = len(x_test) train_samples = int(train_percentage * total_train_samples) test_samples = int(test_percentage * total_test_samples)

按照比例划分数据

x_train = x_train[:train_samples] y_train = y_train[:train_samples] x_test = x_test[:test_samples] y_test = y_test[:test_samples]

将像素值归一化到0到1之间

x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0

调整数据形状以适配CNN输入要求

x_train = np.expand_dims(x_train, axis=-1) x_test = np.expand_dims(x_test, axis=-1)

构建CNN模型

model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), MaxPooling2D((2, 2)), Flatten(), Dense(128, activation='relu'), Dense(10, activation='softmax') ])

打印模型结构摘要

model.summary()

编译模型

model.compile(optimizer=Adam(0.005), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

在干净数据上训练模型

model.fit(x_train, y_train, epochs=5, batch_size=64, verbose=2, validation_data=(x_test, y_test))

在干净的测试数据上评估模型

test_loss, test_accuracy = model.evaluate(x_test, y_test, verbose=2) print(f"测试准确率: {test_accuracy:.4f}")

开始学习

随机(无偏)错误标注的生成与比较