美文网首页
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