深度学习基础知识每日更 upupup

深度学习基础知识点总结

提示:菜鸟入门日记,若总结有错误,各路大佬多多指教!



Looking for my friends

…菜鸟刚接触touch信号处理,困惑多多。诚交做触觉或信号处理的朋友,一同交流 摆烂 ~

一、零散知识点

1、网络拼接和相加的区别

拼接:特征尺寸大小相同,在特征通道数上扩展,拼接结果为特征尺寸不变,通道数相加;如一个64×64×3的特征层与64×64×6的特征层拼接,结果为64×64×9的特征层。拼接的方式保留了更多的维度/位置 信息,这使得后面的 layer 可以在浅层特征与深层特征自由选择。

相加:指通道数相同,特征对应位置相加。如两个64×64×3的特征层相加,结果就是每层通道的对应位置相加,结果仍为一个64×64×3的特征层。相加的方式,feature map 的维度没有变化,但每个维度都包含了更多特征,对于普通的分类任务这种不需要从 feature map 复原到原始分辨率的任务来说,这是一个高效的选择。

2、nn.Conv1d, kernel_size=1与nn.Linear的区别

在这里插入图片描述

3、Pytorch设置随机数种子,使训练结果可复现

如果希望通过设置随机数种子,在gpu或cpu上固定每一次的训练结果,则需要在程序执行的开始处添加以下代码(示例):

'''设置随机数种子'''
    def setup_seed(seed):
        torch.manual_seed(seed)
        torch.cuda.manual_seed_all(seed)
        np.random.seed(seed)
        random.seed(seed)
        torch.backends.cudnn.deterministic = True
    setup_seed(20)  # 设置随机数种子
'''数据预处理...'''

4、从零搭建网络并训练的实现

大概可分为4个模块吧,实现CIFAR10分类,详见示例

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torch import nn
import numpy as np
import random
from torch.utils.data import DataLoader

'''定义数据'''
def load_data():
    train_data = torchvision.datasets.CIFAR10(root="../data", train=True, transform=torchvision.transforms.ToTensor(),
                                              download=True)
    test_data = torchvision.datasets.CIFAR10(root="../data", train=False, transform=torchvision.transforms.ToTensor(),
                                             download=True)
    return train_data, test_data

def main():
    '''设置随机数种子 使训练结果可复现'''
    def setup_seed(seed):
        torch.manual_seed(seed)
        torch.cuda.manual_seed_all(seed)
        np.random.seed(seed)
        random.seed(seed)
        torch.backends.cudnn.deterministic = True
    setup_seed(20)

    # 指定训练设备
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    '''1、数据预处理模块'''
    # 获得数据及长度信息
    train_data, test_data = load_data()
    train_data_size = len(train_data)
    test_data_size = len(test_data)
    print("训练数据集的长度为:{}".format(train_data_size))
    print("测试数据集的长度为:{}".format(test_data_size))
    # 利用 DataLoader 来加载数据集
    train_dataloader = DataLoader(train_data, batch_size=64)
    test_dataloader = DataLoader(test_data, batch_size=64)

    '''2、模型构建模块'''
    # 创建网络模型,也可单独构建网络文件,实例化即可
    class Model(nn.Module):
        def __init__(self):
            super(Model, self).__init__()
            self.model = nn.Sequential(
                nn.Conv2d(3, 32, 5, 1, 2),
                nn.MaxPool2d(2),
                nn.Conv2d(32, 32, 5, 1, 2),
                nn.MaxPool2d(2),
                nn.Conv2d(32, 64, 5, 1, 2),
                nn.MaxPool2d(2),
                nn.Flatten(),
                nn.Linear(64 * 4 * 4, 64),
                nn.Linear(64, 10)
            )

        def forward(self, x):
            x = self.model(x)
            return x
        
    # 实例化模型并指定运行设备
    model = Model()
    model = model.to(device)

    '''3、定义损失函数等'''
    # 损失函数
    loss_fn = nn.CrossEntropyLoss()
    loss_fn = loss_fn.to(device)
    # 优化器
    learning_rate = 1e-2
    optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
    # 记录训练的次数
    total_train_step = 0
    # 记录测试的次数
    total_test_step = 0
    # 训练的轮数
    epoch = 10
    # 添加tensorboard
    writer = SummaryWriter("../logs_train")

    ''' 4.构建训练过程 '''
    for i in range(epoch):
        print("-------第 {} 轮训练开始-------".format(i + 1))
        # train
        model.train()
        for data in train_dataloader:
            imgs, targets = data
            imgs = imgs.to(device)
            targets = targets.to(device)
            outputs = model(imgs)
            loss = loss_fn(outputs, targets)

            # 优化器优化模型
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            total_train_step = total_train_step + 1
            if total_train_step % 100 == 0:
                print("训练次数:{}, Loss: {}".format(total_train_step, loss.item()))
                writer.add_scalar("train_loss", loss.item(), total_train_step)

        # validation
        model.eval()
        total_test_loss = 0
        total_accuracy = 0
        with torch.no_grad():
            for data in test_dataloader:
                imgs, targets = data
                imgs = imgs.to(device)
                targets = targets.to(device)
                outputs = model(imgs)
                loss = loss_fn(outputs, targets)
                total_test_loss = total_test_loss + loss.item()
                accuracy = (outputs.argmax(1) == targets).sum()
                total_accuracy = total_accuracy + accuracy

        print("整体测试集上的Loss: {}".format(total_test_loss))
        print("整体测试集上的正确率: {}".format(total_accuracy / test_data_size))
        writer.add_scalar("test_loss", total_test_loss, total_test_step)
        writer.add_scalar("test_accuracy", total_accuracy / test_data_size, total_test_step)

        total_test_step = total_test_step + 1
        torch.save(model, "model{}.pth".format(i))
        print("模型已保存")
    writer.close()

if __name__ == "__main__":
    main()

二、系统总结

1、pytorch提取参数及自定义初始化

pytorch提取参数及自定义初始化
面对有时提取出的层结构并不够,还需要对里面的参数进行初始化的问题,本文简单介绍了如何提取出网络的参数并对其初始化。

2、pytorch常用代码合集

pytorch常用代码合集
PyTorch常用代码段合集,涵盖基本配置、张量处理、模型定义与操作、数据处理、模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面。

3、torchvision.transforms处理模块用法详解

torchvision.transforms处理模块用法详解
简单介绍了transforms模块的用法,有实例介绍和代码实现。

4、深度学习中的15种损失函数详解

深度学习中15种损失函数详解
详细介绍了深度学习中的各种损失函数的优点和局限性。

5、神经网络训练不收敛或训练失败的原因总结

神经网络训练不收敛或训练失败的原因总结
文章分别从数据方面和模型方面分析了导致模型训练不收敛或失败的原因,数据方面总结了四种可能的原因,模型方面总结了九种可能的问题。除此之外,还介绍了每种潜在问题的产生后果或现象,并提供了常规做法。

6、数据增强方法总结

数据增强方法总结
本文介绍了数据增强的作用,数据增强的分类,数据增强的常用方法,一些特殊的方法,如Cutout,Random Erasing,Mixup,Hide-and-Seek,CutMix,GridMask,FenceMask和KeepAugment等方法,还介绍了一些基于多样本的增强方法,如SMOTE, mosaic和SamplePairing。

7、神经网络超参数的调参方法总结

神经网络超参数的调参方法总结
从实践的角度,手把手教你如何对神经网络超参数进行调参。本文涉及的调参目标有:学习率、Batch Size、网络深度与宽度、Epochs、L1、L2正则化与平衡系数、Dropout、激活函数

8、科研工具推荐大合集

科研工具大合集
作为一个平时就很辛苦的科研er,本着能用工具解决的问题绝对不花苦力的原则,收集了很多科研利器,现在分享给大家,相信大家看完以后科研效率都能够得到质的提升!

!资源推荐

欢迎补充~

1.学习小导

①极市平台(公众号):专注计算机视觉前沿咨询和技术干货 【吹爆!更新速率远超我的蜗牛进度,上有顶级论文实时解读!下有基础干货普照平民】
②机器之心(公众号):专业的人工智能媒体和产业服务 【看看新的技术产品和一些AI界八卦】
③AI科技评论(公众号)
④跟李沐学AI(bilibili)【沐神版high level课程、论文解读、机器学习深度学习课程】
⑤霹雳吧啦Wz(bilibili)【可以说,懂我者,霹雳老师也;把知识点化繁为简,易懂易上手】
⑥CV技术指南(公众号)【技术总结】

2.摸鱼tips

本code虫串山楂技术已出神入化,110串,坐等挑战

无尽江湖:http://t.cn/A6PLFX50 
召唤神龙:http://t.cn/A6xgjIKF 
交换冰淇淋:http://t.cn/A6JvzNbk
水果大王:http://t.cn/A6VaWJv7
苹果的诱惑:http://t.cn/A6hDZLMR
串山楂:http://t.cn/A6MkRZ8U
我的停车场:http://t.cn/A6MkRZ8G
暴力厨房:http://t.cn/A6xD8SIZ
女皇登基:http://t.cn/A6xjfCb3
龟龟滑雪:http://t.cn/A6Il6q65
车水马龙:http://t.cn/A6c9W6G9
枪王之战: http://t.cn/A6yy20F4 
画地为牢: http://t.cn/A6JvUa2A
牛气冲天: http://t.cn/A67ZZWnm
剪指甲: http://t.cn/A6xkrPcZ
小鸭子过河: http://t.cn/A6xkNeKf
倒酒: http://t.cn/A6xpr8SX
凿壁借光: http://t.cn/A6xHzUcf
弹珠碰碰: http://t.cn/A6IK8B3w 
转盘小丸子:http://t.cn/A6MKKk6w
合成大西瓜:http://t.cn/A65yQIb7

Reference

[1]https://zhuanlan.zhihu.com/p/76472385
[2]www.cvmart.net
[3]https://zhuanlan.zhihu.com/p/285601835

今日事件播报

4.15推荐歌曲:听了就知道
4.16推荐乐队:散人乐队!蓬蒿人
4.17推荐乐队:对角巷!我们都是被困在这个城市的精灵~Tonight
4.18放松一下哈哈哈
4.28不好意思断更了,em来一首温柔
4.29要放五一啦!跟着PeaceHotel黎明前出发

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chong墩儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值