美文网首页
cs231n Image classification笔记

cs231n Image classification笔记

作者: 瑶瑶_2930 | 来源:发表于2019-08-15 19:48 被阅读0次

代码笔记

  • Xtr, Ytr, Xte, Yte = load_CIFAR10('data/cifar10/') Xtr是训练集的图像矩阵,Ytr是训练集的标签
  • Xtr_rows = Xtr.reshape(Xtr.shape[0], 32 * 32 * 3) X.shape[0]取矩阵第一维的长度
  • min_index = np.argmin(distances) 得到最小的数的下标
  • distances = np.sqrt(np.sum(np.square(self.Xtr - X[i,:]), axis = 1)) 其中,axis = 1 代表将一个矩阵的每一行向量相加。在这个矩阵中,每一行相当于一个图像。
  • Xval_rows = Xtr_rows[:1000, :]取前1000个作为验证集
  • Xtr_rows = Xtr_rows[1000:, :] 取最后的49000个作为训练集

学习笔记

  • 为了避免因为调整超参数而去动用测试集,我们把训练集分出一小部分作为验证集
  • 当训练集很小的时候,采用交叉验证的方式来修改超参数。但通常人们不会这样做,因为这样的计算量会非常大。

优缺点

分割线 以下是作业部分


KNN作业部分

代码解释

%matplotlib inline #让matplotlib的图显示在notebook里而非另外新建一个窗口
plt.rcParams['figure.figsize'] = (8.0, 4.0) # 设置figure_size尺寸
plt.rcParams['image.interpolation'] = 'nearest'# 差值方式
plt.rcParams['image.cmap'] = 'gray'# 灰度空间
del X_train, y_train #删除变量,解除引用
pass #是空语句
for y, cls in enumerate(classes): #enumerate将其组成一个索引序列,利用它可以同时获得索引和值
numpy.flatnonzero() #该函数输入一个矩阵,返回扁平化后矩阵中非零元素的位置(index)
官方文档给出的用法,非常正规,输入一个矩阵,返回了其中非零元素的位置

>>> x = np.arange(-2, 3)
>>> x
 array([-2, -1,  0,  1,  2])
>>> np.flatnonzero(x)
 array([0, 1, 3, 4])

这是在作业中给出的用法:不走寻常路,用来返回某个特定元素的位置

对向量元素的判断d==3返回了一个和向量等长的由0/1组成的矩阵,然后调用函数,返回的位置,就是对应要找的元素的位置。

d = np.array([1,2,3,4,4,3,5,3,6])
haa = np.flatnonzero(d == 3)
print haa
for y, cls in enumerate(classes):
    idxs = np.flatnonzero(y_train == y) #找出标签为某一类型的所有图片下标
    idxs = np.random.choice(idxs, samples_per_class, replace=False) # 在所有的这些下标中,随机抽取samples_per_class个下标
    for i, idx in enumerate(idxs):

plt.subplot(samples_per_class, num_classes, plt_idx) # 说明要画的子图的编号,在作业中,为7行10列,第plt_idx个子图
if i == 0: plt.title(cls) 写上标题,也就是类别名
range + list 结合创建连续的索引:创建一个0到10的下标,再用这个下标去索引另一个数据

mask = list(range(num_training))
print(mask)
X_train = X_train[mask]

X_train = np.reshape(X_train, (X_train.shape[0], -1)) # 数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。即python自动计算出对应的列数

比较好的作业答案可以参考这个网站

疑惑🤔

1.

在这个代码中有一个不太懂的地方,不太明白Counter函数的使用方法,答案中有这么一行代码
y_pred[i] = Counter(closest_y).most_common(1)[0][0]
很疑惑的是为什么Counter里面是closest_y而不是closest_y[i],而且如果换成后者的话,会出现报错
'numpy.int64' object is not iterable
不知道为什么

相关文章

网友评论

      本文标题:cs231n Image classification笔记

      本文链接:https://www.haomeiwen.com/subject/mlcidctx.html