一周学习疑难点总结:

其实做一个周总结,一方面是对自己过去一周学习过程的回顾,另一方面说出自己困惑的地方和疑难点也是一种反馈的过程,希望这一丢丢的反馈能让飞桨团队的课程讲解,课程设置更加易懂。一起为国产深度学习框架出力吧!

下面讲一讲学习过程中遇到的一些问题:

一. '‘数据处理’'到底该怎么处理?
我这里所说的数据处理并不单单指的是,搭建一个深度学习模型第一步数据处理的步骤,而主要指的是整个模型搭建和使用过程中涉及到的数据格式转换的地方。

就以手写数字识别这一案例来说,

在使用全连接神经网络的时候,我们将图片数据变成了[1,784],为什么呢? 这个其实还比较好理解,因为是全连接的网络,看图可知他的输入其实就是一些列的值即可,所以直接把数据展开全部展开成一维即可,因为图像的28x28的数据,所以展开后变成了[1,784] (28x28=784) ,同样的,因为全连接网络把数据展开,损失了图像的位置信息,这也是导致该网络在数字识别的时候准确率比较低原因。

飞浆api java_深度学习


现在我们来看使用卷积神经网络时候的数据方式:

飞浆api java_神经网络_02


这里将图片数据变成了[1,28,28]的数据格式,备注写了将数据处理成期望的格式? 我当时就在想什么是期望的格式? 是谁期望的?

我们再看网络设计中,前向计算的时候又进行了一次数据格式的转换,如下

飞浆api java_神经网络_03


这里又把数据展开成了一维(准确说是除了第0维后的数据全部展开,也就是将之前的[1,28,28]展开成[1,784]),我们发现这在和使用全连接网络的时候的数据格式一样,为什么?

作为初学者,这系列的数据格式的转换都让我非常懵逼,心里一万个为什么?

于是我咨询了我们的助教哥哥,哥哥耐心的给我讲解了,我豁然开朗。
因为卷积神经网络所要求的输入格式,就是[C,H,W], C代表了图片的通道数,H,W分别代表图片高和宽,所以在使用卷积神经网络的时候,很自然的需要把图像数据转换成[1,28,28]的格式。
卷积过后,输入全连接层,就需要将数据摊开成[1,784],因为全连接层顾名思义,连接到每一个具体的数值

综上:回到之前的问题,数据处理应到底应该怎么处理? 我的理解是, 根据网络的需求决定,这就要求我们要清楚地知道,进入每一个流程前和流程结束后数据的格式变成了什么样,这样我们才能根据流程的需求,进行相应的格式转换!

二. 这个部分留给学习过程涉及到的一些API

到目前为止,涉及的的飞桨的API函数并不太多,我总认为,这些东西,慢慢的就熟悉了,忘记了,就去查,所以我并没有刻意的去记,但是我也没有练习,直到昨天的实践作业发下来说要测试模型再训练集的准确率, 我才发现,我完全用不来这些API,后面才翻看以前的程序,看老师是怎么用的(语法方面)。

所以。。。emmmm 还是得多多练习才行,
也希望在涉及到新的API的时候老师能多讲清楚一些,尤其是语法方面,自己查API,上面给的例子也不太看得懂,我枯了。。。。