手写识别(MNIST)

 

MNIST手写体识别,利用神经网络解决的过程:

1、前向传播模块

首先将前向传播过程抽象出来,作为一个可以作为训练测试共享的模块,取名为mnist_inference_5_5.py,将这个过程抽象出来的好处是,一是可以保证在训练或者测试的过程中前向传播的一致性,提高代码的复用性。还有一点是我们可以更好地将其与滑动平均模型与模型持久化功能结合,更加灵活的来检验新的模型。

mnist_inference_5_5.py

# -*- coding:utf-8 -*-
import tensorflow as tf
INPUT_NODE=784
OUTPUT_NODE=10
LAYER1_NODE=500
def get_weight_variable(shape,regularizer):
    weights=tf.get_variable(
        "weights",shape,
        initializer=tf.truncated_normal_initializer(stddev=0.1)
    )
    if regularizer!=None:
        tf.add_to_collection('losses',regularizer(weights))
    return weights
def inference(input_tensor,regularizer):
    with tf.variable_scope('layer1'):
        weights=get_weight_variable(
            [INPUT_NODE,LAYER1_NODE],regularizer
        )
        biases=tf.get_variable(
            "biases",[LAYER1_NODE],
            initializer=tf.constant_initializer(0.0)
        )
        layer1=tf.nn.relu(tf.matmul(input_tensor,weights)+biases)

    with tf.variable_scope('layer2'):
        weights=get_weight_variable(
            [LAYER1_NODE,OUTPUT_NODE],regularizer
        )
        biases=tf.get_vari
### 使用朴素贝叶斯算法实现手写数字识别 对于手写数字识别的任务,通常采用的是像卷积神经网络这样的复杂模型。然而,也可以尝试更简单的分类器来理解基本原理。朴素贝叶斯是一种基于概率论的方法,在某些情况下可以提供令人惊讶的结果。 #### 数据预处理 为了应用朴素贝叶斯到MNIST数据集上,首先要加载并准备数据。这涉及到下载MNIST图像及其标签,并将这些图片转换成适合输入给定算法的形式。由于朴素贝叶斯假设特征之间相互独立,因此不需要复杂的结构化表示;可以直接使用像素强度作为特性向量[^1]。 ```python from sklearn.datasets import fetch_openml import numpy as np mnist = fetch_openml('mnist_784', version=1, cache=True) X = mnist["data"] y = mnist["target"].astype(np.int8) ``` #### 训练模型 接下来就是训练过程本身。这里选择了`sklearn.naive_bayes.GaussianNB()`类来进行高斯分布下的参数估计。尽管原始论文可能讨论了其他类型的朴素贝叶斯变体(如多项式型),但对于连续值的灰度级而言,Gaussian Naïve Bayes更为合适。 ```python from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # Split the data into a training set and test set. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) gnb = GaussianNB() gnb.fit(X_train, y_train) predicted_labels = gnb.predict(X_test) print(f'Accuracy: {accuracy_score(y_test, predicted_labels)}') ``` 上述代码展示了如何利用Python库Scikit-Learn快速构建一个简易的手写数字识别系统。虽然性能未必能超越专门设计用于此类任务的深层架构,但它确实能够很好地展示朴素贝叶斯的工作方式以及其在特定条件下的有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值