svm.ipynb
- 为SVM实现一个完全矢量化的损失函数
- 为其解析梯度实现完全矢量化表达式
- 使用数值梯度检查您的实现
- 使用验证集调整学习率和正则化
- 使用 SGD 优化损失函数
- 可视化最终学习权重
第一部分
1. 一些配置和库的导入
# Run some setup code for this notebook. import random import numpy as np from cs231n.data_utils import load_CIFAR10 # 该函数用于加载CIFAR-10数据集。 import matplotlib.pyplot as plt # 导入matplotlib.pyplot库,并命名为plt,用于绘图 # This is a bit of magic to make matplotlib figures appear inline in the # notebook rather than in a new window. # 在Jupyter Notebook中将绘制的图形显示在笔记本中而不是弹出新窗口 %matplotlib inline plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots 绘图默认大小 plt.rcParams['image.interpolation'] = 'nearest' # 设置了图像的插值方式为最近邻插值 plt.rcParams['image.cmap'] = 'gray' # 颜色映射为灰度
2. 导入数据集路径,删除之前冗余的训练集和测试集并重新载入,输出例如Training data shape: (50000, 32, 32, 3),代表训练数据集包含50,000个样本,每个样本的维度是32x32像素,具有3个通道(RGB颜色通道)。
3. 为部分样本的可视化。
4. 训练集、验证集和测试集的划分,并创建了一个小的dev集作为训练数据的子集
mask = range(num_training, num_training + num_validation) X_val = X_train[mask] y_val = y_train[mask] # 选择train中num_training到num_training + num_validation范围的样本作验证集 mask = range(num_training) X_train = X_train[mask] y_train = y_train[mask] # 选择train中的前num_training个样本作训练集 mask = np.random.choice(num_training, num_dev, replace=False) X_dev = X_train[mask] y_dev = y_train[mask] # 从train中随机选择了num_dev个样本作为dev集 # np.random.choice函数用于从num_training个样本中选择num_dev个样本 # replace=False表示不允许重复选择。 mask = range(num_test) X_test = X_test[mask] y_test = y_test[mask] # 从原始test中选择了前num_test个样本作为测试集
5. 将图像数据转化为行向量
X_train = np.reshape(X_train, (X_train.shape[0], -1)) # (X_train.shape[0], -1)表示将数组的第一个维度保持不变(即样本数量),而将后面的维度展平为一维。 # -1的使用是为了自动计算展平后的维度,以保持总元素数量不变。 # 即每个样本的图像数据展为一个长度为32*32*3的行向量
6. 减去图像平均值,注意train,val,test,dev数据集减去的都是train的平均值
并为train、val、test、dev集分别添加一列1向量作为SVM的偏置
# third: append the bias dimension of ones (i.e. bias trick) so that our SVM # only has to worry about optimizing a single weight matrix W. X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))]) X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))]) X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))]) X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])
标签:SVM,CS231N,train,mask,num,np,Assignment1,dev,test From: https://www.cnblogs.com/sihangao/p/17738924.html