用了Keras来构建一个卷积神经网络对MNIST数据集进行分类

首先导入所需库和模块,然后加载MNIST手写数字数据集并对数据进行预处理。接着定义了一个基于卷积神经网络(CNN)的模型,该模型包含多个卷积层、最大池化层以及Dropout层作为正则化手段。模型最后接一个全连接层作为输出层,使用softmax激活函数处理多分类任务。

模型编译阶段设置了损失函数为"categorical_crossentropy",优化器为Adam,评估指标为准确率。之后使用训练数据对模型进行训练,并在测试集上评估模型的性能,最终输出测试集上的准确率。

python 复制代码
from __future__ import absolute_import  # 绝对导入,确保导入的模块是绝对路径下的
from __future__ import division         # 导入除法运算的未来版本特性
from __future__ import print_function   # 导入打印函数的未来版本特性

import numpy as np
from keras.models import Sequential
from keras.optimizers import RMSprop
from keras.layers import Activation, Dense, Dropout
from keras.layers import Conv2D, MaxPooling2D, Flatten
from keras.utils import to_categorical, plot_model
from tensorflow.keras.datasets import mnist

# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 计算标签的数量
num_labels = len(np.unique(y_train))

# 将标签转换为 one-hot 向量
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# 图像输入尺寸
image_size = x_train.shape[1]
# 调整尺寸并进行归一化
x_train = np.reshape(x_train, [-1, image_size, image_size, 1])
x_test = np.reshape(x_test, [-1, image_size, image_size, 1])
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# 网络参数
# 图像按原样处理(方形灰度图)
input_shape = (image_size, image_size, 1)
batch_size = 128
kernel_size = 3
pool_size = 2
filters = 64
dropout = 0.2

# 模型是CNN-ReLU-MaxPooling的堆叠
model = Sequential()
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu'))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu'))
model.add(Flatten())
# 添加 dropout 作为正则化器
model.add(Dropout(dropout))
# 输出层是10维的 one-hot 向量
model.add(Dense(num_labels))
model.add(Activation('softmax'))
model.summary()

# 如果可以安装 pydot,则启用此功能
# pip install pydot
#plot_model(model, to_file='cnn-mnist.png', show_shapes=True)

# 用于 one-hot 向量的损失函数
# 使用 Adam 优化器
# 精度是分类任务的好指标
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
# 训练网络
model.fit(x_train, y_train, epochs=10, batch_size=batch_size)

_, acc = model.evaluate(x_test,
                        y_test,
                        batch_size=batch_size,
                        verbose=0)
print("\nTest accuracy: %.1f%%" % (100.0 * acc))

这段代码的主要步骤包括:

  1. 导入所需的模块。
  2. 加载MNIST数据集并进行预处理,包括将标签转换为 one-hot 向量,并将图像像素值归一化到 [0, 1] 区间。
  3. 定义了网络的参数,包括输入图像的尺寸、批处理大小、卷积核大小、池化大小等。
  4. 构建了一个简单的卷积神经网络模型,包括卷积层、ReLU激活函数、池化层、Dropout正则化层以及输出层。
  5. 编译模型,指定损失函数、优化器和评估指标。
  6. 使用训练集训练模型。
  7. 使用测试集评估模型性能,并打印出测试准确率。
相关推荐
停停的茶31 分钟前
深度学习(目标检测)
人工智能·深度学习·目标检测
Y2003091644 分钟前
基于 CIFAR10 数据集的卷积神经网络(CNN)模型训练与集成学习
人工智能·cnn·集成学习
老兵发新帖1 小时前
主流神经网络快速应用指南
人工智能·深度学习·神经网络
AI量化投资实验室1 小时前
15年122倍,年化43.58%,回撤才20%,Optuna机器学习多目标调参backtrader,附python代码
人工智能·python·机器学习
java_logo1 小时前
vllm-openai Docker 部署手册
运维·人工智能·docker·ai·容器
倔强青铜三2 小时前
苦练Python第67天:光速读取任意行,linecache模块解锁文件处理新姿势
人工智能·python·面试
算家计算2 小时前
重磅突破!全球首个真实物理环境机器人基准测试正式发布,具身智能迎来 “ImageNet 时刻”
人工智能·资讯
新智元2 小时前
苹果 M5「夜袭」高通英特尔!AI 算力狂飙 400%,Pro 三剑客火速上新
人工智能·openai
GoppViper2 小时前
什么是GEO生成式引擎优化?GEO科普:定义、原理与应用指南
人工智能·搜索引擎
新智元2 小时前
谷歌 × 耶鲁联手发布抗癌神器!AI 推理精准狙击「隐身」癌细胞
人工智能·openai