本次做业:Andrew Ng的CNN的搭建卷积神经网络模型以及应用(1&2)做业目录参考这位博主的整理:https://blog.csdn.net/u013733326/article/details/79827273git
今天要实现的是识别手势姿式表达的数字github
个人Git传送门:https://github.com/VVV-LHY/deeplearning.ai/tree/master/CNN/RecognizeGestureNum编程
原本是接着day17用了numpy编了一个卷积层和池化层的前向传播,而后后向传播更麻烦了,Andrew Ng的课上也开始用tensorflow和kears了。因此我开始用pytorch完成CNN的编程做业,可是由于Andrew的例子和里面加载数据全用的tensorflow,我决定发挥主观能动性,本身转化pytorch框架。(史前巨坑,由于没用过pytorch,昨天到今天碰见好多天坑)数组
1.pytorch的默认图片处理顺序网络
NxCxHxW 意思是通道C在前面,咱们之前的作法是numpy和其余默认读法channel在最后面,因此须要下面的方法:数据结构
np的array数组有一个transpose方法,好比:架构
原来的通道是a = (N,H,W,C)框架
转化 a = a.transpose(0, 3, 1, 2)意思是N不变,C从第三个换到第二个,W和C分别后移一位函数
新的 a = (N, C, H, W)url
2.torchvision包里面的dataset和dataloader
前者是把数据和标签合为dataset而且能够返回长度、还能够在方法里面转换Tensor,还能够压缩(0,255)为(0,1)用torchvision.transfroms,能够看官方文档有不少方法
dataloader能够加载dataset而且作mini batch的处理 shuffle洗牌等等
可是dataset须要本身重构类里面的方法,具体能够自行搜索。
3.损失函数报错的问题
multi-target not supported at /opt/conda/conda-bld/pytorch_1556653114079/wor
缘由是你loss_func的标签label的维度不对,须要的是tensor的行向量
yourlabel.squeeze(1)
注意必定要是1,0就变成列向量了。
plus:差很少新手错误全是在数据结构上面,由于神经网络的架构只要一层一层算好(n+2p-kernel_size / s) + 1是绝对不会出错的,再难再大的网络画张图写好参数也不可能错
可是对于没有用过张量的直接从numpy转来的新手可能会由于一些方法的不一样在数据结构上屡屡出错,因此从载入数据开始就要清楚每一次操做对于数据自己的shape或者size有什么影响。