详解SoftMax多分类器(多分类svm代码)
ztj100 2025-06-13 18:13 50 浏览 0 评论
常见的逻辑回归、SVM等常用于解决二分类问题,对于多个选项的分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM(只是需要多个二分类来组成多分类)。对于多分类的实现,我们还可以使用Softmax函数,它是逻辑回归在 N 个可能不同的值上的推广。
Softmax作用
神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权(*w+b)和与非线性处理之后的一个值而已,那么如何将这个输出变为概率分布?这就是Softmax 激活的作用(在某个隐藏层设置激活函数为 softmax)
说明:
- softmax要求每个样本必须属于某个类别,且所有可能的样本均被覆盖;
- softmax 要求每个样本必须属于某个类别,并且所有可能的样本均被覆盖;
- softmax个样本分量之和为 1
当只有两个类别时,与逻辑回归完全相同。为了方便理解Softmax的作用,举个例子来说明。如下图所示,神经网络中包含了输入层(x1---x6),然后通过两个隐藏层处理,最后通过softmax分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到y=0、y=1、y=2的概率值。
继续看下面的图,三个输入通过softmax后得到一个数组[0.05 , 0.10 , 0.85],这就是softmax的功能。
计算过程直接看下图,其中即为,三个输入的值分别为3、1、-3,的值为20、2.7、0.05,再分别除以累加和得到最终的概率值,0.88,0.12,0。
可以看到它有多个值,所有值加起来刚好等于1,每个输出都映射到了0到1区间,可以看成是概率问题。
SoftMax代码示例
通过Fashion MNIST 数据集 训练一个Softmax分类器,实现分类功能。Fashion MNIST 数据集是经典 MNIST 数据集的简易替换,MNIST 数据集包含手写数字(0、1、2 等)的图像,这些图像的格式与本文使用的服饰图像的格式相同。Fashion MNIST 比常规 MNIST手写数据集更具挑战性。这两个数据集都相对较小,用于验证某个算法能否如期正常运行。它们都是测试和调试代码的良好起点。
Fashion MNIST 数据集包含 70000 张灰度图像,涵盖 10 个类别。我们将使用 60000 张图像训练网络,并使用 10000 张图像评估经过学习的网络分类图像的准确率。它可以直接从 TensorFlow 直接访问,只需导入和加载数据即可。
训练一个衣物鞋包的分类模型,要求把模型分为10个类别,然后预测某个物体属于某个类别的概率。
step1 添加库引用
#添加库引用
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
step2 加载数据
# 下载数据集并划分为训练集和测试集
(train_images,train_lables),(test_images,test_labels) = tf.keras.datasets.fashion_mnist.load_data()
print('train_images.shape',train_images.shape)
print('train_labels',train_lables)
print('train_labels.shape',train_lables.shape)
print('test_images.shape',test_images.shape)
print('test_labels.shape',test_labels.shape)
print('test_labels',test_labels)
###########################################
step3 查看数据
plt.imshow(train_images[0]) # 通过切片取出测试集第一张图片查看
plt.show() #如下图所示
np.max(train_images[0]) #查看最大值得出取值范围0-255
print(train_lables[0]) # 查看对应的分类 9代表鞋子
step4 归一化
# 数组中的每个元素都除以255,归一化到0-1
train_image=train_images/255
test_image=test_images/255
step5 建立模型
#全连接模型
model = tf.keras.Sequential()
# 28*28 dense 是 张量为1的数据 映射到另一个张量为1 的数据,不能将2维数据直接进行运算 扁平化操作到1维
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation="relu"))
# 最后一层 用softmax 激活 softmax转换10个类别的概率
model.add(tf.keras.layers.Dense(10,activation="softmax"))
step6 查看模型结构
print(model.summary())
参数计算:
100480 = 128*(784+1)
1290 = 10*(128+1)
step7 编译模型
#编译模型 给模型设置优化器,损失函数,度量参数等信息。在tf.keras里,对于多分类问题我们使用categorical_crossentropy(独热编码) 和
sparse_categorical_crossentropy来计算softmax交叉熵,(使用交叉熵来计算两个概率分布的损失)
#############损失函数
##########leable 使用数字编码(1,2,3,4,5....)sparse_categorical_crossentropy (使用读热编码)
##########lable categorical_crossentropy
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["acc"]#度量参数
)
step8 训练模型
model.fit(train_image,train_lables,epochs=100)
step9 模型评估
# 使用测试集进行评价
model.evaluate(test_image,test_labels)
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统...
- systemd是什么如何使用_systemd/system
-
systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
-
Linux系统日常巡检脚本,巡检内容包含了,磁盘,...
- 7,MySQL管理员用户管理_mysql 管理员用户
-
一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
-
1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
-
设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...
- linux系统启动流程和服务管理,带你进去系统的世界
-
Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...
- CentOS7系统如何修改主机名_centos更改主机名称
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
-
为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...
- Kubernetes 高可用(HA)集群部署指南
-
Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介...
- Linux系统systemd服务管理工具使用技巧
-
简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...
- Linux下NetworkManager和network的和平共处
-
简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
这一次,彻底搞懂Java并发包中的Atomic原子类
-
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- systemd是什么如何使用_systemd/system
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
- 7,MySQL管理员用户管理_mysql 管理员用户
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
- linux系统启动流程和服务管理,带你进去系统的世界
- CentOS7系统如何修改主机名_centos更改主机名称
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)