Softmax回归识别验证码(手写数字)

本文介绍了softmax回归作为逻辑回归在多分类问题中的扩展,详细阐述了softmax损失函数及其优化过程。同时,讲解了离散特征处理中的one-hot编码技术,解释了为何使用它来消除分类之间的不合理距离。通过MNIST手写数字数据集为例,展示了数据预处理和模型训练的过程,最后模型在验证集上达到了约78.8%的准确率。

我们首先来学习softmax regression和one-hot encoding。这次本次实验需要学习和机器学习相关的两个重要概念。
我们之前学过逻辑回归。由于Logistic Regression算法复杂度低、容易实现等特点,在工业界中得到广泛使用,如计算广告中的点击率预估等。但是,Logistic Regression算法主要是用于处理二分类问题,若需要处理的是多分类问题,如手写字识别,即识别是{0,1,…,9}中的数字,此时,需要使用能够处理多分类问题的算法。Softmax Regression算法是Logistic Regression算法在多分类问题上的推广,主要用于处理多分类问题,其中,任意两个类之间是线性可分的。
我们知道,在Logistic回归中比较重要的有两个公式,一个是阶跃函数:
在这里插入图片描述

另一个是对应的损失函数:
在这里插入图片描述

最终,Logistic回归需要求出的是两个概率:
在这里插入图片描述

在Logistic回归需要求解的是两个概率,而在Softmax Regression中将不是两个概率,而是k个概率,k表示的是分类的个数。我们需要求出以下的概率值:
在这里插入图片描述

此时的损失函数为:
在这里插入图片描述

其中I{}是一个指示性函数,意思是大括号里的值为真时,该函数的结果为1,否则为0。下面就这几个公式做个解释:
先来看看损失函数的由来
概率函数可以表示为:
在这里插入图片描述

其似然函数为:
在这里插入图片描述

log似然为:
在这里插入图片描述

我们要最大化似然函数,即求max
在这里插入图片描述

转化成损失函数。

接着对log似然(或者是损失函数)求偏导

为了简单,我们仅取一个样本,则可简单表示为:

ReactReact Native 中,`setState` 的调用会触发一系列内部机制来更新组件的状态和视图。尽管两者在机制上有很多相似之处,但也存在一些关键差异。 ### 更新状态对象 当调用 `setState` 方法时,ReactReact Native 都会将传入的新状态对象与当前的状态对象进行合并,生成一个新的状态对象。如果新的状态对象与旧的状态对象在浅比较下是相等的,那么框架会认为状态没有发生变化,并跳过后续的更新操作。如果状态确实发生了变化,那么新的状态对象会替换掉旧的状态对象,并触发组件的更新过程[^2]。 ### 虚拟 DOM 与 Diff 算法 在 React 中,状态更新后会触发组件的重新渲染,React 会根据新的状态重新计算组件的虚拟 DOM 树。然后,React 使用高效的 diff 算法将新的虚拟 DOM 树与旧的虚拟 DOM 树进行比较,找出两者之间的差异。这些差异会被高效地应用到真实的 DOM 上,实现最小化的 DOM 操作,从而提高性能[^2]。 React Native 的情况略有不同,因为它并不直接操作真实的 DOM,而是将更新应用到原生组件上。React Native 使用虚拟 DOM 来跟踪 UI 的变化,并通过 JavaScript 到原生的桥接机制将这些变化传递给平台相关的原生组件,如 Android 上的 View 或 iOS 上的 UIView。这种机制允许 React Native 在不同平台上提供一致的用户体验[^1]。 ### 异步更新与批量处理 ReactReact Native 都支持 `setState` 的异步更新,这意味着 `setState` 调用不会立即更新状态,而是将更新操作排队等待执行。这样的设计可以提高性能,因为它允许框架将多个状态更新合并成一次性的更新操作。如果在一次事件循环中多次调用 `setState`,后面的调用可能会覆盖前面的调用,因为它们会在同一批处理中被集中处理[^3]。 ### 获取更新后的状态 由于 `setState` 是异步的,因此不建议在调用 `setState` 后立即访问 `this.state` 来获取更新后的状态。如果需要在状态更新后执行某些操作,应该将这些操作放在 `setState` 方法的第二个参数中,这是一个可选的回调函数,在状态更新完成后会被调用。 ### 示例代码 下面是一个简单的示例,展示了如何在 `setState` 后执行回调函数: ```javascript this.setState({ count: this.state.count + 1 }, () => { console.log('State has been updated to:', this.state.count); }); ``` 在这个例子中,当状态 `count` 更新完成后,提供的回调函数会被执行,并打印出最新的状态值。 通过上述机制,ReactReact Native 提供了一种高效且灵活的方式来管理组件的状态和视图更新。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值