• 【CSDN21天学习挑战赛】第一天,配置环境外加实现mnist手写数字识别


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

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
    想系统/深入学习某技术知识点…
    一个人摸索学习很难坚持,想组团高效学习…
    想写博客但无从下手,急需写作干货注入能量…
    热爱写作,愿意让自己成为更好的人…

    我跟着“K同学啊”学习的,大家可以一起来哦!
    https://blog.csdn.net/qq_38251616/article/details/116920825
    上面链接有源代码哦~

    学习日记-第一天

    1、学习知识点

    (1)安装使用 jupyter notebook

    (2)配置tf2的GPU环境

    (3)实现mnist手写数字识别的相关步骤

      一、前期工作
      	1. 设置GPU(如果使用的是CPU可以忽略这步)
      	2. 导入数据
      	3. 归一化
      	4. 可视化图片
      	5. 调整图片格式
      二、构建CNN网络模型
      三、编译模型
      四、训练模型
      五、预测
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2、实操

    (1)配置环境

    1.新建一个虚拟环境

    conda create -n jupyter-tf2 python=3.6.5
    在这里插入图片描述

    2.安装 jupyter notebook

    Anaconda 自带有jupyter notebook,直接用了。
    
    • 1

    (1)在jupyter notebook中加载conda创建的虚拟环境

    1.激活conda虚拟环境
    conda activate jupyter-tf2
    2.安装ipykernel
    conda install ipykernel
    3.将环境写入kernel中
    python -m ipykernel install --user --name jupyter-tf2 --display-name tf2
    在这里插入图片描述

    3.安装 GPU版本tf2环境

    我已经有CUDA了,所以直接安装tf2-gpu
    
    • 1

    pip install tensorflow-gpu -i https://pypi.mirrors.ustc.edu.cn/simple/
    在这里插入图片描述
    在这里插入图片描述

    (2)前期准备工作

    1.设置GPU

        照着博主的代码没有问题
    
    • 1

    在这里插入图片描述

    2.导入数据

      遇到如下问题,缺了matplotlib库:
    
    • 1

    在这里插入图片描述
    使用如下命令安装matplotlib:
    conda install matplotlib

    然后就可以运行了在这里插入图片描述

    3.归一化

    这里我的理解是:RGB颜色值是0-255,那么我们除以最大值(也就是255)就可以将图片的每一个像素的颜色值转换到0-1之间。(矩阵除以常数,就是矩阵的每个元素分别除以这个常数)
    
    • 1

    在这里插入图片描述

    4.可视化图片

    这一步也没有遇到问题
    
    • 1

    在这里插入图片描述
    5.调整图片格式

       这里的60000和10000应该是训练集和测试集的图片数量,
       28,28是图片的宽和高,
       上面两个是原本图片的格式,这一步操作加了一个维度:1
       这个1我的理解是通道数,初始是1,后面进行卷积的时候根据滤波器数会进行调整
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (3)构建CNN网络模型

    在这里插入图片描述

    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))中,
    32是滤波器数(卷积核数),(3,3)是卷积核大小,
    activation=“relu"意为使用relu作为激活函数“,
    (28,28,1)是输入图片的shape
    
    因为layers.Conv2D默认是边缘不填充的,所以28*28的矩阵一行过去只能划分出26个3*3的矩阵,
    同理,一列也只能有26个3*3的矩阵,所以输出的shape是(26*26)
    
    param(参数)=卷积核大小*通道数*卷积核数量+卷积核数量=3*3*1*32+32=320
    param(参数)=卷积核大小*通道数*卷积核数量+卷积核数量=3*3*32*64+64=18496
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    layers.MaxPooling2D((2, 2)),池化层,池化核为2*2,
    默认步长是池化核的大小,即:2
    所以26*26经过这个池化层后变成13*13
    
    • 1
    • 2
    • 3

    在这里插入图片描述 在这里插入图片描述在这里插入图片描述

    layers.Flatten(),Flatten层,将输入的数据变成一维
    这里的结果1600就是:5*5*64,即宽*高*通道数 	 
    
    
    
    layers.Dense(64, activation='relu'),全连接层,进行重新拟合,减少特征信息的损失
    64是神经元数,relu是激活函数
    layers.dense(64)会在内部自动生成一个权矩阵kernel和偏移项bias,各变量具体尺寸如下:
    tf.layers.dense()会生成:尺寸为[1600, 64]的权矩阵kernel,和尺寸为[1, 64]的偏移项bias。
    内部的计算过程为y = input * kernel + bias,输出值y的尺寸为[1,64]。
    
    Param = (输入数据的Feature个数+1)*神经元的个数 = (1600+1)*64 = 102464
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (4)编译模型

    没有遇到问题
    
    • 1

    在这里插入图片描述

    (5)训练模型

    顺利进行中
    
    • 1

    在这里插入图片描述

    (6)预测

    在这里插入图片描述

    plt.imshow()展示第一张图片
    从第一张图片的预测结果上看(数组里分别是0~9十个类别的信度),
    我们可以看到是类别2的信度有12.079804,最高,因此可以判定图片上的数字是2,
    说明预测结果准确。
    
    • 1
    • 2
    • 3
    • 4

    3.总结

    我不是科班的,之前因缘际会应用过yolov3模型,但是对其网络结构只有浅层的了解,没有深入学习,对于深度学习也没有系统的学习,只是学习了如何应用yolov3的模型.

    这次借着CSDN的活动,跟着”K同学啊“学习,
    在这里学到的一些知识和之前一知半解的知识相互呼应,切切实实得感受到有所收获~

  • 相关阅读:
    C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
    Linux学习笔记(10)----静态库与共享库
    030:vue中使用md5进行数据加密示例
    【云原生】springcloud09——但愿发长久,空手撕Ribbon
    模拟实现【二叉搜索树】
    电子元器件的结温壳温与环境温度经验总结
    MHA高可用
    Flet教程之 13 ListView最常用的滚动控件 基础入门(教程含源码)
    18、Flink的SQL 支持的操作和语法
    【kafka】kafka常见的面试题总结及对应答案
  • 原文地址:https://blog.csdn.net/qq_46319397/article/details/126112652