百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

详解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其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...

Red Hat Enterprise Linux 10 安装 Kubernetes (K8s) 集群及高级管理

一、前言...

Linux下NetworkManager和network的和平共处

简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...

取消回复欢迎 发表评论: