美文网首页
基于MNIST实现字符识别

基于MNIST实现字符识别

作者: 府学路十八吖 | 来源:发表于2021-10-15 21:04 被阅读0次

    说明

    1. 这是一个关于TensorFlow的基础教程
    2. 本任务主要是基于TensorFlow实现对于MNIST数据集的处理
    3. 通过本任务,希望大家能够了解TensorFlow构建神经网络的大致过程
    4. MNIST数据集展示 mnist数据集

    训练过程

    1. 导入相关包以及载入数据 导入数据
    2. 查看样本数据 数据查验
    3. 查看多个数据 多样本查验
    4. 数据归一化(深度学习模型处理 0 至 1 之间的数字时更加得心应手(后面会有详细介绍),所以我们会取全部像素值,并用每个值除以 255。我们将此过程称为归一化。) 特征归一化
    5. 标签序列化(将标量转换成向量): 标签序列化
    6. 搭建模型 搭建模型
    7. 模型编译 模型编译
    8. 模型训练 模型训练

    完整代码

    # ===========导入数据集==========
    from tensorflow.keras.datasets import mnist
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    
    # ==========查看数据=========
    import matplotlib.pyplot as plt
    image = x_train[0]
    label = y_train[0]
    plt.imshow(image, cmap="gray")
    plt.title(label, fontdict={'fontsize': 30})
    
    # ==========数据预处理(归一化)==========
    ## 以下两种方式等价(第一个是具体公式,第二个是简便写法)
    x_train = (x_train - x_train.min()) / (x_train.max() - x_train.min())
    x_test = x_test / 255
    
    # ==========对标签进行多分类编码(变量转向量)==========
    import tensorflow.keras as keras
    print("format y_train[0] is ", y_train[0])
    num_categories = 10   # 0~9一共有10个数字
    # 将标量转换成向量
    y_train = keras.utils.to_categorical(y_train, num_categories)
    y_test = keras.utils.to_categorical(y_test, num_categories)
    print("after encoding, y_train[0] is ", y_train[0])
    
    # ===============创建模型==================
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    model = Sequential()
    # 输入层
    """
    units参数指定该层中神经元的数量。 这里使用512,这是一个很好的起始值。也可以稍后修改此值来查看它如何影响训练结果。
    activation:激活函数,这里将使用relu激励函数,它将帮助我们的网络做出比使用线性激励函数更为复杂的预测
    input_shape值指定输入数据的形状/维度。
    """
    model.add(Dense(units=512, activation='relu', input_shape=(784,)))  # 输入变量有784维
    # 隐藏层
    model.add(Dense(units = 512, activation='relu'))
    # 输出层
    """
    该层使用softmax激励函数,该函数将使该层的每个输出值是0到1之间的概率值,并且该层的所有输出相加等于1。
    在这种情况下,由于网络要对一个图像属于0到9中的一个进行预测,所以一共有10个输出,每个输出都会给出模型对图像属于某个类的猜测值(概率)
    因此,softmax较适用于需要分类的应用场景。
    """
    model.add(Dense(units = 10, activation='softmax'))     # 输出有10个类别,激活函数使用softmax
    # 模型总结
    model.summary()
    
    # ==========模型编译==========
    """
    在实际使用数据训练模型之前,我们需要做的最后一步是对模型进行编译。
    在这里,我们要指定一个损失函数,模型将用该函数来了解其在训练过程中的表现。我们还要指定在模型训练时我们将要跟踪准确率
    """
    model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
    
    # ==========训练模型==========
    """
    x_train, y_train:分别是训练数据和训练标签;
    epochs:表示在整个训练数据集上进行训练的次数;
    verbose=1:显示训练过程和日志信息
    validation_data:校验数据,每一个训练完模型都会使用校验数据进行检查
    """
    model.fit(x_train, y_train, 
              epochs=5,
              verbose=1,
              validation_data=(x_test, y_test)
             )
    
    

    相关文章

      网友评论

          本文标题:基于MNIST实现字符识别

          本文链接:https://www.haomeiwen.com/subject/ghtvoltx.html