python + numpy 学习笔记 cs213n KK assignment

版权声明:本文系作者原创,未经允许,禁止转载。 https://blog.csdn.net/qq_27261889/article/details/84790760

python 函数 enumerate:遍历数据对象,返回索引,同时给出数据和数据下标
classes = [‘plane’, ‘car’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’]
for y, cls in enumerate(classes)
print(y)
print(cls)
在这里插入图片描述

np.flatnonzero: 返回非0下标,下标全部以一维下标进行索引
idxs = np.flatnonzero(y_train == y)
在这里插入图片描述

range + list 结合创建连续的索引:创建一个0到10的下标,再用这个下标去索引另一个数据
num_training = 10
mask = list(range(num_training))
print(mask)
X_train = X_train[mask]
在这里插入图片描述

对一个(距离)矩阵进行可视化,来判断某些关系
import matplotlib.pyplot as plt
plt.imshow(dists, interpolation=‘none’)

除了用format输出数据以外,还可以使用%的方法
print('Got %d / %d correct => accuracy: %f ’ % (num_correct, num_test, accuracy))
需要有两个百分号,一个在引号里面,一个接着引号后面

加法:
np.sum, axis=0, axis=1 分别表示按行、按列进行加法;
keepdims在于保持维度不变,因为无论按照行还是按照列相加,都会默认损失一个维度
注意到axis的设置是仅对一个数据进行操作
比如,假设data是一个mn的矩阵,我们可以np.sum(data, axis=0),表示按照列相加,得到1n的数据,准确的说是(n, )的数据。因此需要特别注意运算后数据维度的变化。
在这里插入图片描述

普通的加法,直接使用+: 也可以进行broadcast,多个数据也是可以的,以维度最高为标准。
ab = np.dot(X, self.X_train.T) # num_test * num_train
a2 = np.sum(np.square(X), axis=1).reshape(-1, 1) # num_test * 1
b2 = np.sum(np.square(self.X_train.T), axis=0).reshape(1, -1) # 1 * num_train
dists = -2 * ab + a2 + b2
可以看到这里ab维度 是 num_test * num_train, a2维度是num_test 1, b2维度是1num_train, 把这三者相加起来,会自动进行broadcast。 也就是把a2和ab的每一列对应元素进行相加,再将b2和上述结果的每一行对应元素相加。

确保数据是(n, )的维度: np.ravel()
这个函数确保将输入的数据拉平,变成(n,)的数据。
有时可能因为数据维度不一致而导致错误,这一点需要十分注意。

将数据平均分成若干份(需要对应好原数据及其标签),和随机分配不一样
np.array_split(数据, 份数)函数,将数据从中间切开,分成数据,保证数据是连续的,如将100个数据分成5份,则第一份的下标就是0到19,保证了下标的连续性。

python字典中setdefault方法
可以利用setdefault 来对键及其对应的值做一个初始化
dict.setdefault(key, default=None)
如果某个键不存在,则将其设置为这个值

如何画出超参数的设置曲线?
可以对每一个超参数进行多次试验,可以设置多组,然后利用键值对来存储试验结果数据。然后结合散点图和折线图来画出趋势图,既可以看出趋势,也可以看出每个超参数时的变化幅度。如下图
在这里插入图片描述

如何划分训练集成为训练集和交叉验证集?
例子:可以将训练集划分为5等份,然后选取其中一个子集作为验证集,除了这个子集之外的4等份作为训练集。这样共有五个验证集的结果。

猜你喜欢

转载自blog.csdn.net/qq_27261889/article/details/84790760