zoukankan      html  css  js  c++  java
  • ubuntu之路——day18 用pytorch完成CNN

    本次作业:Andrew Ng的CNN的搭建卷积神经网络模型以及应用(1&2)作业目录参考这位博主的整理:https://blog.csdn.net/u013733326/article/details/79827273

    今天要实现的是识别手势姿势表达的数字

    我的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)

    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有什么影响。

  • 相关阅读:
    POJ Problem 1363 Rails 【栈】
    POJ Problem 3040 Allowance 【贪心】
    ACM 程序对拍
    HDU Problem
    POJ
    HDU Problem
    HDU Problem—2124 Repair the Wall 【贪心】
    HDU Problem 1052 Tian Ji -- The Horse Racing 【贪心】
    POJ Problem Radar Installation 【贪心】
    Beyond Compare和输出文件比较的方法
  • 原文地址:https://www.cnblogs.com/NWNU-LHY/p/11260198.html
Copyright © 2011-2022 走看看