• Tensorflow实现手写数字识别


    模型架构

    • 具有10个神经元,对应10个类别(0-9的数字)。
    • 使用softmax激活函数,对多分类问题进行概率归一化。
    • 输出层 (Dense):
    • 具有64个神经元。
    • 激活函数为ReLU。
    • 全连接层 (Dense):
    • 将二维数据展平成一维,为全连接层做准备。
    • 展平层 (Flatten):
    • 第三层卷积层有64个过滤器。
    • 使用3x3的卷积核。
    • 激活函数为ReLU。
    • 卷积层 (Conv2D):
    • 池化大小为2x2。
    • 最大池化层 (MaxPooling2D):
    • 第二层卷积层有64个过滤器。
    • 使用3x3的卷积核。
    • 激活函数为ReLU。
    • 卷积层 (Conv2D):
    • 池化大小为2x2。
    • 通过池化操作减小特征图的尺寸,同时保留最重要的信息。
    • 最大池化层 (MaxPooling2D):
    • 第一层卷积层有32个过滤器(filters)。
    • 使用3x3的卷积核。
    • 激活函数为ReLU。
    • 输入形状为28x28的单通道图像(黑白图像)。
    • 卷积层 (Conv2D):
    1. import tensorflow as tf
    2. from tensorflow.keras import layers, models
    3. from tensorflow.keras.datasets import mnist
    4. # 载入 MNIST 数据集
    5. (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    6. # 数据预处理
    7. train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
    8. test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
    9. train_labels = tf.keras.utils.to_categorical(train_labels)
    10. test_labels = tf.keras.utils.to_categorical(test_labels)
    11. # 构建神经网络模型
    12. model = models.Sequential([
    13. # 第一层:卷积层
    14. layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    15. # 第二层:最大池化层
    16. layers.MaxPooling2D((2, 2)),
    17. # 第三层:卷积层
    18. layers.Conv2D(64, (3, 3), activation='relu'),
    19. # 第四层:最大池化层
    20. layers.MaxPooling2D((2, 2)),
    21. # 第五层:卷积层
    22. layers.Conv2D(64, (3, 3), activation='relu'),
    23. # 将二维数据展平成一维
    24. layers.Flatten(),
    25. # 第六层:全连接层(密集层),64个神经元,ReLU激活函数
    26. layers.Dense(64, activation='relu'),
    27. # 输出层:全连接层,10个神经元(对应10个类别,0-9的数字),使用softmax激活函数
    28. layers.Dense(10, activation='softmax')
    29. ])
    30. # 编译模型
    31. model.compile(optimizer='adam',
    32. loss='categorical_crossentropy',
    33. metrics=['accuracy'])
    34. # 训练模型
    35. model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.2)
    36. # 在测试集上评估模型
    37. test_loss, test_acc = model.evaluate(test_images, test_labels)
    38. print(f'Test accuracy: {test_acc}')

     编译模型:

    1. model.compile(
    2. optimizer, # 优化器,用于配置模型的学习过程。常见的有 'adam'、'sgd' 等。
    3. loss, # 损失函数,用于衡量模型在训练时的性能。常见的有 'categorical_crossentropy'、'mse' 等。
    4. metrics=None # 评估指标,用于监控训练和测试性能。可以是一个字符串或字符串列表。例如,'accuracy'。
    5. )

    optimizer(优化器):

    优化器决定了模型如何进行参数更新,以最小化损失函数。常见的优化器包括 'adam'、'sgd'、'rmsprop' 等。不同的优化器可能适用于不同类型的问题。

    loss(损失函数):

    损失函数用于衡量模型在训练时的性能,即模型预测与实际标签之间的差异。对于不同的问题,需要选择合适的损失函数。例如,对于分类问题,常见的是 'categorical_crossentropy',而对于回归问题,可能是 'mse'(均方误差)。

    metrics(评估指标):

    评估指标用于监控模型的性能。在训练和测试过程中,会输出这些指标的值。例如,'accuracy' 表示模型的准确性。你可以传递一个字符串或一个字符串列表,以同时监控多个指标。

     

  • 相关阅读:
    绕过UNION&SELECT过滤
    【毕业设计】基于SSM的OA办公管理系统的设计与实现 -java web
    小米4C刷openwrt
    怎么将视频转化为gif?
    AI算法工程师 | 03人工智能基础-Python科学计算和可视化(二)Matplotlib
    题解:ABC320E - Somen Nagashi
    二叉树OJ
    长胜证券:资本市场再迎利好 保险资金入市空间进一步扩大
    全国计算机三级嵌入式 - 题库 - 真题(含答案) - 未来教育 - 视频讲解 - 资料获取
    【java计算机毕设】 留守儿童爱心捐赠管理系统 springboot vue html mysql 送文档ppt
  • 原文地址:https://blog.csdn.net/DengCaixiang2021/article/details/136549609