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


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

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

    1. from __future__ import absolute_import # 绝对导入,确保导入的模块是绝对路径下的
    2. from __future__ import division # 导入除法运算的未来版本特性
    3. from __future__ import print_function # 导入打印函数的未来版本特性
    4. import numpy as np
    5. from keras.models import Sequential
    6. from keras.optimizers import RMSprop
    7. from keras.layers import Activation, Dense, Dropout
    8. from keras.layers import Conv2D, MaxPooling2D, Flatten
    9. from keras.utils import to_categorical, plot_model
    10. from tensorflow.keras.datasets import mnist
    11. # 加载MNIST数据集
    12. (x_train, y_train), (x_test, y_test) = mnist.load_data()
    13. # 计算标签的数量
    14. num_labels = len(np.unique(y_train))
    15. # 将标签转换为 one-hot 向量
    16. y_train = to_categorical(y_train)
    17. y_test = to_categorical(y_test)
    18. # 图像输入尺寸
    19. image_size = x_train.shape[1]
    20. # 调整尺寸并进行归一化
    21. x_train = np.reshape(x_train, [-1, image_size, image_size, 1])
    22. x_test = np.reshape(x_test, [-1, image_size, image_size, 1])
    23. x_train = x_train.astype('float32') / 255
    24. x_test = x_test.astype('float32') / 255
    25. # 网络参数
    26. # 图像按原样处理(方形灰度图)
    27. input_shape = (image_size, image_size, 1)
    28. batch_size = 128
    29. kernel_size = 3
    30. pool_size = 2
    31. filters = 64
    32. dropout = 0.2
    33. # 模型是CNN-ReLU-MaxPooling的堆叠
    34. model = Sequential()
    35. model.add(Conv2D(filters=filters,
    36. kernel_size=kernel_size,
    37. activation='relu',
    38. input_shape=input_shape))
    39. model.add(MaxPooling2D(pool_size))
    40. model.add(Conv2D(filters=filters,
    41. kernel_size=kernel_size,
    42. activation='relu'))
    43. model.add(MaxPooling2D(pool_size))
    44. model.add(Conv2D(filters=filters,
    45. kernel_size=kernel_size,
    46. activation='relu'))
    47. model.add(Flatten())
    48. # 添加 dropout 作为正则化器
    49. model.add(Dropout(dropout))
    50. # 输出层是10维的 one-hot 向量
    51. model.add(Dense(num_labels))
    52. model.add(Activation('softmax'))
    53. model.summary()
    54. # 如果可以安装 pydot,则启用此功能
    55. # pip install pydot
    56. #plot_model(model, to_file='cnn-mnist.png', show_shapes=True)
    57. # 用于 one-hot 向量的损失函数
    58. # 使用 Adam 优化器
    59. # 精度是分类任务的好指标
    60. model.compile(loss='categorical_crossentropy',
    61. optimizer='adam',
    62. metrics=['accuracy'])
    63. # 训练网络
    64. model.fit(x_train, y_train, epochs=10, batch_size=batch_size)
    65. _, acc = model.evaluate(x_test,
    66. y_test,
    67. batch_size=batch_size,
    68. verbose=0)
    69. print("\nTest accuracy: %.1f%%" % (100.0 * acc))

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

    1. 导入所需的模块。
    2. 加载MNIST数据集并进行预处理,包括将标签转换为 one-hot 向量,并将图像像素值归一化到 [0, 1] 区间。
    3. 定义了网络的参数,包括输入图像的尺寸、批处理大小、卷积核大小、池化大小等。
    4. 构建了一个简单的卷积神经网络模型,包括卷积层、ReLU激活函数、池化层、Dropout正则化层以及输出层。
    5. 编译模型,指定损失函数、优化器和评估指标。
    6. 使用训练集训练模型。
    7. 使用测试集评估模型性能,并打印出测试准确率。
  • 相关阅读:
    Maven - 5 分钟快速通关
    如何解决git clone http/https仓库失败(403错误)
    springboot框架中生成一个md5文件校验类,md5文件校验类必须包括传入的一个key值秘钥,还有上传内容是byte[]类型
    VMware Workstation环境下,DHCP服务的安装配置,用ubuntu来测试
    金融信息化研究所与YashanDB等单位启动金融多主数据库应用行动计划
    SpringBoot @Scheduled注解(cron、fixedRate、fixedDelay、initialDelay)各个参数区别
    首个校园招聘年度盛宴,数百万人关注,牛客2022青年人才招聘峰会来啦!
    第6章Spring与Web-使用 Spring 的监听器 ContextLoaderListener使得将spring容器对象创建一次即可,反复调用...
    【数据结构(三)】单向环形链表和约瑟夫问题(3)
    争议不断的AI绘画,如今成为了顶流?
  • 原文地址:https://blog.csdn.net/lwhsyit/article/details/138170821