CS231n Assignment

CS231n课程作业,记录自己弄懂和没弄懂的地方。第一个作业难度不大,感觉都是在练习numpy的使用(相关函数的总结可以看 Frequently-used-Numpy-functions),特别是矩阵运算(广播等)。

因为在代码中相应部分都有注释(基本就相当于在代码里直接进行讲解了),感觉这里没有必要写个博客详细讲解,所以这里只是随便记录一些感觉还算重要的东西,以便日后复习。

具体代码可以见githubCS231n

CS231n Assignment 1

Q1: k-Nearest Neighbor classifier

  1. 与大多数分类器一样,KNN分为两个步骤:trainpredict。但不同的是,严格来说KNN没有train的过程(KNNtrain过程就是“记住”所有的数据),在实际代码中通常按照下面的做(在 knn.ipynb 的第6cell中也有提到):

    • train过程:载入所有的训练数据和测试数据,由于需要全部保存在内存中(比较消耗内存),所以称为“记住”。

    • predict过程:首先,计算每个测试数据与所有训练数据的距离矩阵;然后,返回每个测试数据对应距离矩阵中前k小的训练数据的label(有点绕,可以看代码);最后,把这klabel中出现次数最多的label,作为这个测试数据的label

  2. 上面的predict过程适用于分类任务,如果是回归,在得出前k小的训练数据(这里不再是label,直接就是训练数据)后,进行求平均或者其它方式求得这个测试数据的回归(预测)值。

  3. 可以用cross-validation选择合适的k值,具体做法可以参考 knn.ipynb 的第14cell

  4. 注意validation setcross validation是不同的。前者是固定一个dataset,一般是整个training dataset20%(这个比例根据算法中有多少hyperparameter,以及这些hyperparameter对于算法的预期影响来决定);后者是为了解决数据集太小的问题,一般是通过把数据集平均分的方法,只留一个做validation dataset,其它的做training dataset

  5. hyperparameter的确定是通过validation dataset搜索得到的,当数量较少时就使用cross validation

Q2: Training a Support Vector Machine

  1. 思路比较简单,同样分为下面两个过程。

    • train过程:计算lossgradient,根据gradient更新权重W

    • predict过程:用训练好的权重W对测试数据进行预测。

  2. 所有的数据集都要减去X_train的图片的平均值(可见 svm.ipynb的第7cell)?

注意:

  • 要注意是要减去X_train的平均值

  • 这里减去的是channel的平均值:np.mean(X_train, axis=0),而不是每个图片减去各自的平均值(VGGNet中也是这么做的)。

  • AlexNet中减去的是各自的平均值:np.mean(X_train, axis=1)

  • 可见 Lecture 5 的35分钟处。

Q3: Implement a Softmax classifier

  1. 同上面,两者只是lossgradient计算不一样。

Q4: Two-Layer Neural Network

  1. gradient的计算没弄懂。

  2. batch进行训练:

1
2
3
indices = np.random.choice(num_train, batch_size)
X_batch = X[indices]
y_batch = y[indices]

Q5: Higher Level Representations: Image Features

  1. 没有太多代码要写,就是说明feature extraction对提高模型的性能能起到很好的作用。

CS231n Assignment 2

Q1: Fully-connected Neural Network

  1. 的代码不是很好,耦合度比较高,这里对其进行解耦,把代码模块化。整个作业的代码都很规范,可以直接拿来用,也很值得学习。

Q2: Batch Normalization

  1. BatchNormalization.ipynb 的最后一个问题怎么回答?

Q3: Dropout

  1. BatchNormalizationDropouttraintest的过程中都是不同的。

  2. BatchNormalizationReLU的前面,DropoutReLU的后面:BatchNormalization --> ReLU --> Dropout

  3. Dropout

    • 让激活值(就是WX + b的结果)以一定的概率随机失活(就是设置成0),目的是降低不同神经元之间的联系,从而减轻overfitting现象的程度。
  4. Maxout

    Maxout 简单理解

Q4: ConvNet on CIFAR-10

CS231n Assignment 3

Q1: Image Captioning with Vanilla RNNs

  1. rnn_forward(x, h0, wx, wh, b)中batch为什么是(N, T, D)

    因为取N个example训练,每个都有T个长度的时间维度,每个维度都是D。比如取N个句子,每个句子都有T个单词(不够长度的填充),每个单词的word embedding维度都是D

  2. 为什么rnn_forward(x, h0, wx, wh, b)的计算方式与temporal_affine_forward(x, w, b)的不一样,后者可以reshape后相乘?

Q2: Image Captioning with LSTMs

Q3: Image Gradients: Saliency maps and Fooling Images

Q4: Image Generation: Classes, Inversion, DeepDream