• 【深度学习实践(二)】上手手写数字识别


    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
    热爱写作,愿意让自己成为更好的人…

    【深度学习实践(二)】上手手写数字识别

    1 设置运行设备

    tf.config.set_visible_devices([gpu0],"GPU")
    
    • 1

    2 加载数据集

    先得到训练数据集,这里使用MNIST手写数字数据集,该数据集来源于美国国家标准与技术研究所,是著名的公开数据集之一。数据集中的数字图片是由250个不同职业的人纯手写绘制,如下图所示:

    datasets.mnist.load_data()
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    • 打印出一部分训练数据查看
      在这里插入图片描述

    3 构建神经网络模型并进行训练

    图片识别的原理就是 每张图可以看成是含有28*28的像素,然后转化为向量的形式就是 (1,784),数据训练集中一共含有60000张图片,那么向量组可以表示为(60000,784)

    然后构建神经网络模型,通过卷积层将数据进行压缩**,池化层**进行数据(图像特征)的进一步抽样,以达到减少训练量的目的,最后全连接层 起到“特征提取器”的作用,输出层进行输出

    将构建好的模型 通过优化,损失函数,性能评估,然后进行训练,通过反馈自行调整模型
    在这里插入图片描述

    #调整数据到我们需要的格式
    train_images = train_images.reshape((60000, 28, 28, 1))
    test_images = test_images.reshape((10000, 28, 28, 1))
    
    train_images.shape,test_images.shape,train_labels.shape,test_labels.shape
    """
    输出:((60000, 28, 28, 1), (10000, 28, 28, 1), (60000,), (10000,))
    """
    model = models.Sequential([
        layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 卷积层1,卷积核3*3
        layers.MaxPooling2D((2, 2)),  # 池化层1,2*2采样
        layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3
        layers.MaxPooling2D((2, 2)),  # 池化层2,2*2采样
    
        layers.Flatten(),  # Flatten层
        layers.Dense(64, activation='relu'),  # 全连接层
        layers.Dense(10)  # 输出层
    ])
    # 打印网络结构
    model.summary()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 编译与训练模型
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])
    
    history = model.fit(train_images, train_labels, epochs=10,
                        validation_data=(test_images, test_labels))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    在这里插入图片描述

    4 预测结果

    将训练好的模型 进行预测,输入一张图片,这里选择image[3],预测后得到图像特征结果(1,10)的一个向量

    plt.imshow(test_images[3])
    plt.show()
    newT=test_images[3].reshape(1,784)
    print('Test图片向量化为:'+str(newT))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    print('预测ing...')
    resT=test_images[3].reshape(1,28,28,1)
    pre=model.predict(resT)
    print('即得到预测结果'+str(pre))
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    学习随笔

    1,学习的收货

    动手实践深度学习,搭建神经网络,预测模型结果,体验炼丹入门的快乐

    2,学习遇到的问题

    提示:关于在Pycharm上想要通过qt窗口出图时,需要将设置plt.show(block=True)此时程序会在此被阻塞,当绘图窗口关闭后才会继续往下运行

  • 相关阅读:
    mysql面试题36:MySQL的binlog有几种录入格式?分别有什么区别
    每日OJ题_DFS回溯剪枝①_力扣46. 全排列(回溯算法简介)
    华为云实验 -- 对云硬盘数据盘进行备份
    亚马逊的这个Bug居然要花两个月时间来解决?
    Scala 初学者编程完整指南
    合并excel方法汇总
    基于webapi的websocket聊天室(番外二)
    数据结构 - 双向链表
    技术分享 | 接口自动化测试如何处理 Header cookie
    【Java】不一样的图书管理系统
  • 原文地址:https://blog.csdn.net/runofsun/article/details/126148662