用了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. 使用测试集评估模型性能,并打印出测试准确率。
相关推荐
创意锦囊13 分钟前
ChatGPT推出Canvas功能
人工智能·chatgpt
知来者逆22 分钟前
V3D——从单一图像生成 3D 物体
人工智能·计算机视觉·3d·图像生成
碳苯1 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
whaosoft-1431 小时前
51c视觉~CV~合集3
人工智能
网络研究院3 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
凭栏落花侧3 小时前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析
xiandong206 小时前
240929-CGAN条件生成对抗网络
图像处理·人工智能·深度学习·神经网络·生成对抗网络·计算机视觉
innutritious7 小时前
车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
人工智能·深度学习·计算机视觉
醒了就刷牙8 小时前
56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
pytorch·深度学习·gru
橙子小哥的代码世界8 小时前
【深度学习】05-RNN循环神经网络-02- RNN循环神经网络的发展历史与演化趋势/LSTM/GRU/Transformer
人工智能·pytorch·rnn·深度学习·神经网络·lstm·transformer