• 十、非线性激活函数


    一、ReLU

    torch.nn.ReLU(inplace=False)官网提供的API
    其中inplace表示是否在对原始数据进行替换

    由函数图可以看出,负数通过ReLU之后会变成0,正数则不发生变化
    在这里插入图片描述
    例如:input = -1,若inplace = True,表示对原始输入数据进行替换,当通过ReLU函数(负数输出均为0)之后,input = 0
    若inplace = False(默认),表示不对原始输入数据进行替换,则需要通过另一个变量(例如output)来对ReLU函数的结果进行接收存储,通过ReLU函数之后,output = 0,input = -1

    二、ReLU函数使用

    创建一个二维tensor数据,通过reshape转换成(batch_size,channel,H,W)类型数据格式
    传入仅含有ReLU的神经网络中,运行结果可以看出,负数都变成了0,正数均保持不变

    import torch
    from torch import nn
    
    input = torch.tensor([[1,-0.7],
                          [-0.8,2]])
    
    input = torch.reshape(input,(-1,1,2,2))
    
    print(input)
    """
    tensor([[[[ 1.0000, -0.7000],
              [-0.8000,  2.0000]]]])
    """
    
    
    class Beyond(nn.Module):
        def __init__(self):
            super(Beyond,self).__init__()
            self.relu_1 = torch.nn.ReLU()
    
        def forward(self,input):
            output = self.relu_1(input)
            return  output
    
    beyond = Beyond()
    output = beyond(input)
    print(output)
    """
    tensor([[[[1., 0.],
              [0., 2.]]]])
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    三、ReLU训练CIFAR-10数据集上传至tensorboard

    import torch
    import torchvision
    from torch import nn
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    
    dataset_test = torchvision.datasets.CIFAR10("CIFAR_10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
    
    dataloader = DataLoader(dataset_test,batch_size=64)
    
    class Beyond(nn.Module):
        def __init__(self):
            super(Beyond,self).__init__()
            self.relu_1 = torch.nn.ReLU()
    
        def forward(self,input):
            output = self.relu_1(input)
            return output
    
    writer = SummaryWriter("y_log")
    
    beyond = Beyond()
    i=0
    for data in dataloader:
        imgs,targets = data
        writer.add_images("input_ReLU",imgs,i)
        output = beyond(imgs)
        writer.add_images("output_ReLU",output,i)
        i = i + 1
    
    
    writer.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在Terminal下运行tensorboard --logdir=y_log --port=9999,logdir为打开事件文件的路径,port为指定端口打开;
    通过指定端口9999进行打开tensorboard,若不设置port参数,默认通过6006端口进行打开。
    在这里插入图片描述
    点击该链接或者复制链接到浏览器打开即可
    在这里插入图片描述

    四、Sigmoid

    torch.nn.Sigmoid
    在这里插入图片描述

    五、Sigmoid函数使用

    创建一个二维tensor数据,通过reshape转换成(batch_size,channel,H,W)类型数据格式
    传入仅含有Sigmoid的神经网络中,代入Sigmodi公式即可得到相应返回结果

    import torch
    from torch import nn
    
    input = torch.tensor([[1,-0.7],
                          [-0.8,2]])
    
    input = torch.reshape(input,(-1,1,2,2))
    
    print(input)
    """
    tensor([[[[ 1.0000, -0.7000],
              [-0.8000,  2.0000]]]])
    """
    
    
    class Beyond(nn.Module):
        def __init__(self):
            super(Beyond,self).__init__()
            self.sigmoid_1 = torch.nn.Sigmoid()
    
        def forward(self,input):
            output = self.sigmoid_1(input)
            return  output
    
    beyond = Beyond()
    output = beyond(input)
    print(output)
    """
    tensor([[[[0.7311, 0.3318],
              [0.3100, 0.8808]]]])
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    六、Sigmoid训练CIFAR-10数据集上传至tensorboard

    import torch
    import torchvision
    from torch import nn
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    
    dataset_test = torchvision.datasets.CIFAR10("CIFAR_10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
    
    dataloader = DataLoader(dataset_test,batch_size=64)
    
    class Beyond(nn.Module):
        def __init__(self):
            super(Beyond,self).__init__()
            self.sigmoid_1 = torch.nn.Sigmoid()
    
        def forward(self,input):
            output = self.sigmoid_1(input)
            return  output
    
    writer = SummaryWriter("y_log")
    
    beyond = Beyond()
    i=0
    for data in dataloader:
        imgs,targets = data
        writer.add_images("input_Sigmoid",imgs,i)
        output = beyond(imgs)
        writer.add_images("output_Sigmoid",output,i)
        i = i + 1
    
    
    writer.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在Terminal下运行tensorboard --logdir=y_log --port=9999,logdir为打开事件文件的路径,port为指定端口打开;
    通过指定端口9999进行打开tensorboard,若不设置port参数,默认通过6006端口进行打开。
    在这里插入图片描述

  • 相关阅读:
    队列的各个函数的实现
    uniapp搜索功能
    Sentinel入门
    【RocketMQ专题】快速实战及集群架构原理详解
    CUDA优化之PReLU性能调优
    `Supimo` `算法知识` 最小生成树MST
    西门子S7-200 SMART如何实现远程监控并通过手机自动报警
    数据分析必备原理思路(二)
    爬取微博热榜并将其存储为csv文件
    王道操作系统___第四章01
  • 原文地址:https://blog.csdn.net/qq_41264055/article/details/126447731