熟悉环境
parse_mnist(image_filename, label_filename)
参数1 image.gz,参数2 label.gz
gz文件的格式要参照 http://yann.lecun.com/exdb/mnist/, 用 gzip
工具将 gz 文件以二进制形式读取, 得到一个字节对象, 然后根据格式进行逐字节解析.
将解析的内容, 按照返回格式要求, 填充到创建好的 numpy 数组中. 注意: 不要使用循环, 效率很低, 使用 numpy 提供的工具和内置函数, 经测试使用 numpy 比使用循环效率快了近一倍.
Softmax loss 公式为:
batch_size * num_classes
,
softmax_loss
要求的返回值是对于一个 batch 的平均损失, 因此除以 batch_size 即可.
题目要求实现小批量随机梯度下降:
-
对于每个 batch
$B$ , 都有$X\in \mathbb{R}^{B\times n}, y\in \lbrace 1, \ldots, k \rbrace ^B$ ,$n$ 代表input_dim
,这里是 28 * 28. 以 batch 为步长,对训练集进行随机梯度下降 -
更新参数
$\theta \in \mathbb{R}^{n\times k}$ , ($k$ 代表类别数, 这里是 10.):$\theta = \theta - \dfrac{\alpha}{\beta}X^{T}(Z - I_y)$
实现公式时, 要理解清楚每个变量代表的含义.
与 Question 4 类似, 要求对一个两层的神经网络做小批量梯度下降:
令
确定每个变量的含义后, 仿照 Question 4 即可.
将问题4中的python代码翻译成C++版本, 前提不能使用任何库. 在实现矩阵乘法时, 用嵌套循环代替 numpy 中的 dot 操作.