CS231n作业(二)SVM分类

本文详细介绍了在CS231n课程中,使用SVM实现CIFAR-10数据集的多类分类任务。涵盖了损失函数、梯度计算、超参数选择(如正则项系数和学习率)以及权重可视化。通过交叉验证找到最佳参数,训练过程中损失函数逐渐降低,最终模型在测试集上达到35.44%的准确率。
摘要由CSDN通过智能技术生成

一、作业说明

CS231n的第二次作业,要求写一个基于svm的多分类程序,实现cifar10的多分类功能,程序中应当体现损失函数计算、梯度计算、交叉验证选择参数、权重可视化等功能。

二、背景知识

损失函数

                                                       L=\frac{1}{N} \sum_{i=1}^{N}\sum_{j\neq y_{i}}^{ }max(0,s_{j}-s_{y_{i}}+1)+\alpha R(W)

损失函数分为两部分,前半部分的误差项\frac{1}{N} \sum_{i=1}^{N}\sum_{j\neq y_{i}}^{ }max(0,s_{j}-s_{y_{i}}+1)和后半部分的正则项\alpha R(W)。前半部分的误差由正确类别的socre减去模型对每一类别输出的socre和一个“boundary”(这里设为1)得到。后半部分的正则项提升了模型的泛化性能,\alpha是正则项系数,本模型中,R(W)我们选用的是权重矩阵W的F范数。

梯度计算

我们使用分析梯度计算方法。对于属于第y_{i}类的输入样本x_{i},不考虑正则项,模型的loss关于W求梯度为

\bigtriangledown_{w_{y_{i}}} L_{i}=-\left ( \sum_{j\neq y_{i}}^{ }max(0,s_{j}-s_{y_{i}}+1)\right )x_{i}

\bigtriangledown_{w_{j}} L_{i}=-\left ( \sum_{j\neq y_{i}}^{ }max(0,s_{j}-s_{y_{i}}+1)\right )x_{i}

R(W)W的F范数,\bigtriangledown_W R(W)=W

超参数选择

模型中的超参数有两个。一个是正则项系数\alpha,一个是学习率learning rate。为确定两个参数合适的取值,我们使用交叉验证法。

权重可视化

计算socre的过程中,权重矩阵W的每一行与输入的特征向量做卷积。考虑到特征向量是由输入图片拉伸得到的。我们可以认为权重矩阵的每一行也是由一张图片拉伸得到的。通过对权重矩阵每一行做可视化,我们可以观察到权重矩阵的部分性质。

三、程序源码

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 13 09:52:31 2018

@author: wjp_ctt
"""

import numpy as np
import random
from matplotlib import pylab as plt


#读取cifar10数据
def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

def sample_training_da
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值