1.获取数据集
有两种方式可以得到数据集,第一是直接通过mnist = input_data.read_data_sets('MNIST_data',one_hot = True)进行联网下载,但这个方法可能很慢或者连接不到服务器,所以推荐使用第二个,在MNIST 直接下载数据,然后放在当前路径下的‘MNIST_data’文件夹中,下载以后不需要解压,直接压缩包放进去就好,它会自动解压获取数据的。
这个数据集是包含了0-9这10个数字的很多图片,我们要做的就是给出一张图片上面有数字,分析出这个数字是0-9中的哪一个。
one-hot的意思就是,输出值y应该是一个这样的形式【0,1,2,3,4,5,6,7,8,9】,每一个位置对应一个数字,得到的预测值只有一位为1,其他都是0,也就是说,如果预测值是【1,0,0,0,0,0,0,0,0,0】代表这个数字为0。预测值和给定的y值都是这种形式
2.softmax
softmax是一个激活函数,用在多分类问题的最后一层,最后一层使用这个函数以后得到的yhat并不是最终的预测值,以数据集分类例子来说,他是由10个小数组成的向量,并且这10个数的和为1,这10个数分别代表了最后这张图片是哪个数字的几率。选择最大的一项作为1,其他项都为0,最终得到预测值。
3.关于数据维度的问题
上面在讲向量的时候我都说的比较模糊,没有说明到底是行向量还是列向量,在之前吴恩达老师深度学习的课程中,神经网络中各层数据和参数的维度是这样定义的:(这是简化示例图,为了方便说明w和b的维度,下面代码展示的并没有隐藏层)
但这个数据集获取到的数据定义形式,也就是X和Y正好是反着来的,如果想要按照这个模型来,把获取到的数据转置即可,但这里为了以后增加改进方便,用了数据原始的格式。
注意数据的格式会引起两个问题,第一是参数值的维度,第二是向前传播是矩阵乘法的顺序