(0)深度学习项目入门(pytorch)

想入门深度学习,感觉无从下手,怎么办?除了理论上的学习之外,最快速的方法就是做项目:包括但不限于别人已经做好的项目,导师布置的项目作业,自己接到的项目。做项目的方法是模仿,也就是抄。抄别人的项目,再自己总结:

  1. 这个模块的作用是什么
  2. 这个模块有哪些重要的类和函数
  3. 这些重要的类和函数在哪里调用的,作用是什么
  4. 数据输入输出的格式,为什么要这么用

从mnist分类开始,到经典的RCNN或者YOLO。抄完一遍基本上已经算是能够自己完成一些小项目了。剩下的就是思考怎么涨点的问题了。项目做多了就会发现,基本所有的深度学习项目都是一个套路,不同的是有一些项目复杂一些,函数比较多或者是引入了其它的代码库。但是总体还是差不多的,举cnn网络为例,一般包括以下3部分:

  1. dataloader(包括预处理)
  2. train
  3. predict

1.dataloader:
最主要是写好继承自dataset的类,写好以后丢到dataloader里面不就OK啦。那这个类最主要的是三个方法:

  1. init():主要是数据格式的转换,还有一部分预处理
  2. getitem():主要就是从数据集里获取数据项的item和label
  3. lens():返回数据项个数

2.train:
网络结构五花八门,但是基本都是那么几个步骤,跟八股文一样。

  1. 定义网络结构 class Net()

  2. 定义损失函数和optimizer

  3. 划分数据集

  4. 定义训练过程(以梯度下降算法为例,基本的流程都是差不多的)

        ### 梯度下降算法 ###
        loss = loss_func(output, input)  # 损失函数,输出和真实标签的loss,二者位置不可颠倒
        optimizer.zero_grad()  # 清除之前学到的梯度的参数
        loss.backward()  # 反向传播,计算梯度
        optimizer.step()  # 应用梯度(权重更新)
        ### 梯度下降算法 ###
    
  5. 保存模型

3.predict:

  1. 加载模型
 model = torchvision.models.resnet50(pretrained=True)
 model.load_state_dict(torch.load("resnet.pt"))
  1. 加载数据
    for images, labels in test_loader:
        images = images.to(device)
        labels = labels.to(device)
        with torch.no_grad():
            outputs = model(images)
            loss = loss_func(outputs, labels)
            
        _, predicts = torch.max(outputs, 1)
        
        loss_val += loss.item() * images.size(0)
        corrects += torch.sum(predicts.view(-1) == labels.view(-1)).item()
  1. 计算结果
test_loss = loss_val / len(test_loader.dataset)
test_acc = corrects / len(test_loader.dataset)
print("Test Loss: {}, Test Acc: {},corrects is: {}".format(test_loss, test_acc,corrects))

此外,还有一些需要考虑到的,比如如何使用pytorch调用gpu进行训练、如何使用多个gpu进行训练等等。

你可能感兴趣的:(深度学习,图像处理,机器学习,pytorch,深度学习,神经网络)