cs231n作业1——SVM

参考文章:cs231n assignment1——SVM

SVM

训练阶段,我们的目的是为了得到合适的 𝑊 和 𝑏 ,为实现这一目的,我们需要引进损失函数,然后再通过梯度下降来训练模型。
在这里插入图片描述
在这里插入图片描述

def svm_loss_naive(W, X, y, reg):  #梯度矩阵初始化dW = np.zeros(W.shape)  # initialize the gradient as zero# compute the loss and the gradient#计算损失和梯度num_classes = W.shape[1]num_train = X.shape[0]loss = 0.0for i in range(num_train):#W*Xiscore = X[i].dot(W)correct_score = score[y[i]]for j in range(num_classes):#预测正确if j == y[i]:continue#W*Xi-Wyi*Xi+1margin = score[j] - correct_score + 1  # 拉格朗日if margin > 0:loss += margin#平均损失loss /= num_train#加上正则化λ||W||²# Add regularization to the loss.loss += reg * np.sum(W * W)		dW /= num_traindW += reg * W	return loss, dW

向量形式计算损失函数
在这里插入图片描述

def svm_loss_vectorized(W, X, y, reg):loss = 0.0dW = np.zeros(W.shape)num_train=X.shape[0]classes_num=X.shape[1]score = X.dot(W)#矩阵大小变化,大小不同的矩阵不可以加减correct_scores = score[range(num_train), list(y)].reshape(-1, 1) #[N, 1]margin = np.maximum(0, score - correct_scores + 1)margin[range(num_train), list(y)] = 0#正则化loss = np.sum(margin) / num_trainloss += 0.5 * reg * np.sum(W * W)#大于0的置1,其余为0margin[margin>0] = 1margin[range(num_train),list(y)] = 0margin[range(num_train),y] -= np.sum(margin,1)dW=X.T.dot(margin)dW=dW/num_traindW=dW+reg*Wreturn loss, dW

SGD优化损失函数
使用批量随机梯度下降法来更新参数,每次随机选取batchsize个样本用于更新参数 𝑊 和 𝑏 。

 for it in range(num_iters):X_batch = Noney_batch = Noidxs = np.random.choice(num_train, batch_size, replace=True)X_batch = X[idxs]y_batch = y[idxloss, grad = self.loss(X_batch, y_batch, reg)loss_history.append(losself.W -= learning_rate * grif verbose and it % 100 == 0:print("iteration %d / %d: loss %f" % (it, num_iters, loss))return loss_history

交叉验证调整超参数
为了获取最优的超参数,我们可以将整个训练集划分为训练集和验证集,然后选取在验证集上准确率最高的一组超参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】Qt概述

目录 一. 什么是Qt 二. Qt的优势 三. Qt的应用场景 四. Qt行业发展方向 一. 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架,为应用程序开发者提供了建立艺术级图形界面所需的所有功能。 Qt是完全面向对象的,很容易扩展,同时Qt为开发…

从打印到监测:纳米生物墨水助力3D生物打印与组织监测平台?

从打印到监测:纳米生物墨水助力3D生物打印与组织监测平台? 在 3D 组织工程中,纳米生物墨水是将纳米材料与 ECM 水凝胶结合,以提高其打印性和功能性的重要策略。纳米生物墨水可以增强水凝胶的机械性能、导电性、生物活性&#xff…

汽车报价资讯app小程序模板源码

蓝色实用的汽车报价,汽车新闻资讯,最新上市汽车资讯类小程序前端模板。包含:选车、资讯列表、榜单、我的主页、报价详情、资讯详情、询底价、登录、注册、车贷,油耗、意见反馈、关于我们等等。这是一款非常全的汽车报价小程序模板…

Ubuntu 20版本安装Redis教程,以及登陆

第一步 切换到root用户,使用su命令,进行切换。 输入: su - 第二步 使用apt命令来搜索redis的软件包,输入命令:apt search redis 第三步 选择需要的redis版本进行安装,本次选择默认版本,redis5.…

mac如何安装nvm

​ vue项目开发,热更新,webpack,前辈造的轮子:各类的工具,库,像axios,qs,cookie等轮子在npm上可以拿来直接用,需要node作为环境支撑。 开发时同时有好几个项目,每个项目的需求不同…

威纶通创建项目创建(输入,输出,画面切换使用)

创建一个项目 1,打开软件 2,创建项目,设置系统参数 增加设备,选择好对应型号(有市面上80%设备) 3,修改页面,选择参数 4,创建新页面 不能在已经编辑的页面进行新增 5&a…

【HTML入门】第三课 - 标题、段落、空格

这一小节,我们说一些比较零散的知识,HTML课程中呢,其实就是一些标签,正是这些标签组成了前端网页的各种元素,所以你也可以叫他们标签元素。 像前两节我们说的,html head body title meta style 。这些都是…

算法刷题笔记 滑动窗口(C++实现,非常详细)

文章目录 题目描述基本思路实现代码 题目描述 给定一个大小为n ≤ 10^6的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7]&…

用HttpURLConnection复现http响应码405

目录 使用GET方法,访问GET接口,服务端返回405使用GET方法,访问POST接口,服务端返回405使用POST方法,访问GET接口,服务端返回405 使用GET方法,访问GET接口,服务端返回405 发生场景&a…

Linux shell编程学习笔记63:free命令 获取内存使用信息

0 前言 在系统安全检查中,内存使用情况也是一块可以关注的内容。Linux提供了多个获取内存信息的命令很多。今天我们先研究free命令。 1 free命令的功能、用法和选项说明 1.1 free命令的功能 free 命令可以显示系统内存的使用情况,包括物理内存、交换…

Java多语言跨境电商外贸商城源码 tiktok商城系统源码 跨境电商源码

Java多语言跨境电商外贸商城源码 tiktok商城系统源码 跨境电商源码 技术栈 PC端使用:vueelementui 用户端使用:uniapp 管理端使用:vueelementui 后台服务使用:springbootmybatisplusmysql 功能描述: 对接PayPal…

vue3+electron项目搭建,遇到的坑

我主要是写后端,所以对前端的vue啊vue-cli只是知其然,不知其所以然 这样也导致了我在开发前端时候遇到了很多的坑 第一个坑, vue2升级vue3始终升级不成功 第二个坑, vue add electron-builder一直卡进度,进度条走完就是不出提示succes 第一个坑的解决办法: 按照网上说的升级v…

Ubuntu 20.04下多版本CUDA的安装与切换 超详细教程

目录 前言一、安装 CUDA1.找到所需版本对应命令2.下载 .run 文件3.安装 CUDA4.配置环境变量4.1 写入环境变量4.2 软连接 5.验证安装 二、安装 cudnn1.下载 cudnn2.解压文件3.替换文件4.验证安装 三、切换 CUDA 版本1.切换版本2.检查版本 前言 当我们复现代码时,总会…

深入分析SSL/TLS服务器的证书(C/C++代码实现)

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全领域的重要协议,它们在保护网络通信中发挥着至关重要的作用。这些协议通过加密和身份验证机制,确保数据在传输过程中的机密性和完整性…

初见:AntDB智能运维“三剑客“之ACC

前情回顾 在前两个章节中,我们介绍了 AntDB 智能运维"三剑客"的 ADC 和 MTK。 初见:AntDB智能运维"三剑客"之ADC 初见:AntDB智能运维"三剑客"之MTK 本文将继续介绍 AntDB 数据库智能运维平台 ACC。 AntDB 介绍…

minist数据集分类模型的训练

minist数据集训练 训练方法:利用pytorch来实现minist数据集的分类模型训练 训练模型如下图所示 模型代码: import torch from torch import nn from torch.nn import Flattenclass Net(nn.Module):def __init__(self):super().__init__()self.module …

ChatGPT对话:Scratch编程中一个单词,如balloon,每个字母行为一致,如何优化编程

【编者按】balloon 7个字母具有相同的行为,根据ChatGPT提供的方法,优化了代码,方便代码维护与复用。初学者可以使用7个字母精灵,复制代码到不同精灵,也能完成这个功能,但不是优化方法,也没有提高…

FairJob:促进在线广告系统公平性研究

在人工智能(AI)与人类动态的交汇处,既存在机遇也存在挑战,特别是在人工智能领域。尽管取得了进步,但根植于历史不平等中的持续偏见仍然渗透在我们的数据驱动系统中,这些偏见不仅延续了不公平现象&#xff0…

Centos新手问题——yum无法下载软件

起因:最近在学习centos7,在VM上成功安装后,用Secure进行远程登陆。然后准备下载一个C编译器,看网络上的教程,都是用yum来下载,于是我也输入了命令: yum -y install gcc* 本以为会自动下载&…

docker部署redis/mongodb/

一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…