识别数字0和1的简单网络

《深度学习的数学》给予了我极大的启发,作者阐述的神经网络的思想和数学基础令我受益颇多,但是由于书中使用Excel作为示例向读者展示神经网络,这对我这样一个不精通Excel的人来说很头疼,因此我打算使用Python来实现书中的一个简单网络模型,即识别数字0和1的模型。
这个网络模型极其简单,比号称机器学习中的“Hello World”的手写数字识别模型更简单,它基本没有实用价值,但是我之所以推崇它,只因为它褪去了神经网络的复杂性,展示了神经网络中最基本、最根本的东西。
模型总共分为三层,第一层为输入层,第二层为隐藏层,第三层为输出层。输入层包括12个输入输出变量 x i ( i = 1 , 2 , . . . , 12 ) x_i (i=1,2,...,12) xi(i=1,2,...,12),隐藏层包括三个神经单元,输出层包括两个神经单元。
下面是涉及到的数学知识。
神经网络的参数是通过将代价函数(损失函数)最小化来确定的,本文所使用的的最小化方法是梯度下降法,但是直接计算梯度是很困难的,因此引入了误差反向传播法,通过计算出输出层的误差,然后通过误差的递推公式计算出隐藏层的误差。
<隐藏层>
z 1 2 z_1^2 z12= ∑ i = 1 12 w 1 i 2 x i + b 1 2 \sum_{i=1}^{12}w_{1i}^2x_i+b_1^2 i=112w1i2xi+b12
z 2 2 z_2^2 z22= ∑ i = 1 12 w 2 i 2 x i + b 2 2 \sum_{i=1}^{12}w_{2i}^2x_i+b_2^2 i=112w2i2xi+b22
z 3 2 z_3^2 z32= ∑ i = 1 12 w 3 i 2 x i + b 3 2 \sum_{i=1}^{12}w_{3i}^2x_i+b_3^2 i=112w3i2xi+b32
a i 2 = a ( z i 2 ) ( i = 1 , 2 , 3 ) a_i^2=a(z_i^2) (i=1,2,3) ai2=a(zi2)(i=1,2,3)
<输出层>
z 1 3 z_1^3 z13= ∑ i = 1 3 w 1 i 3 a i 2 + b 1 3 \sum_{i=1}^{3}w_{1i}^3a_i^2+b_1^3 i=13w1i3ai2+b13
z 2 3 z_2^3 z23= ∑ i = 1 3 w 2 i 3 a i 2 + b 2 3 \sum_{i=1}^{3}w_{2i}^3a_i^2+b_2^3 i=13w2i3ai2+b23
a i 3 = a ( z i 3 ) ( i = 1 , 2 ) a_i^3=a(z_i^3) (i=1,2) ai3=a(zi3)(i=1,2)
C = 1 / 2 ∗ ( ( t 1 − a 1 3 ) 2 + ( t 2 − a 2 3 ) 2 ) C=1/2*((t_1-a_1^3)^2+(t_2-a_2^3)^2) C=1/2((t1a13)2+(t2a23)2),其中 z j l z_j^l zjl为层l的第j个神经单元的加权输入的值, w i j l + 1 w_{ij}^{l+1} wijl+1为层l的第j个神经单元指向层l+1的第i个神经单元的箭头的权重, b j l b_j^l bjl表示层l的第j个神经单元的偏置, a j l a_j^l ajl为层l的第j个神经单元的输出,a(z)为激活函数,C为平均误差,

含义 图像为0 图像为1
t 1 t_1 t1 0的正解变量 1 0
t 2 t_2 t2 1的正解变量 0 1
图像为0 图像为1
a 1 3 a_1^3 a13 接近1的值 接近0的值
a 2 3 a_2^3 a23 接近0的值 接近1的值

输出层L的误差公式
δ j L = ∂ C ∂ a j L a ′ ( z j L ) δ_j^L= \frac{\partial C}{\partial a_j^L}a'(z_j^L) δj

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手写数字识别是一个常见的机器学习任务,以下是一个简单的代码和步骤示例: 步骤 1: 数据准备 - 从公开数据集(例如MNIST)中获取手写数字图像数据集。 - 将图像数据集拆分为训练集和测试集。 步骤 2: 特征提取和预处理 - 将图像数据转换为特征向量表示,可以使用像素值作为特征。 - 对特征进行预处理,例如归一化或标准化,以提高模型性能。 步骤 3: 模型选择 - 选择一个适合手写数字识别任务的机器学习模型,例如支持向量机(SVM)、K近邻(KNN)、决策树、随机森林等。 - 也可以选择深度学习模型,例如卷积神经网络(CNN)。对于简单的手写数字识别任务,传统机器学习模型已经足够。 步骤 4: 模型训练 - 使用训练集对选定的模型进行训练。 - 根据选择的模型类型和库,调整模型的参数和超参数。 步骤 5: 模型评估 - 使用测试集评估模型的性能。 - 常见的评估指标包括准确率、精确率、召回率和F1分数等。 步骤 6: 模型优化和调参 - 根据评估结果进行模型优化和调参,以提高模型的性能。 - 可以尝试不同的特征表示、模型架构或超参数组合。 步骤 7: 预测和应用 - 使用经过训练和优化的模型对新的手写数字图像进行预测。 - 可以将模型部署为一个应用程序或服务,以便实时进行手写数字识别。 以上仅是一个简单的示例,实际手写数字识别任务可能还需要更多的步骤和优化策略。具体的代码实现取决于您选择的模型和编程语言/库。您可以参考相关的机器学习教程和文档,以获取更详细的代码示例和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值