当前位置: 首页 > news >正文

学习pytorch11 神经网络-非线性激活

神经网络-非线性激活

  • 官网文档
    • 常用1 ReLU
      • inplace
    • 常用2 Sigmoid
  • 代码
  • logs

B站小土堆学习pytorch视频 非常棒的up主,讲的很详细明白

官网文档

https://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearity

在这里插入图片描述

常用1 ReLU

对输入做截断非线性处理,使模型泛化
在这里插入图片描述

>>> m = nn.ReLU()
>>> input = torch.randn(2)
>>> output = m(input)
An implementation of CReLU - https://arxiv.org/abs/1603.05201
>>> m = nn.ReLU()
>>> input = torch.randn(2).unsqueeze(0)
>>> output = torch.cat((m(input), m(-input)))

inplace

inplace=True 原位操作 改变变量本身的值
inplace=False 重新定义一个变量output 承接input-relu后的值,一般默认为False,保留输入数据
在这里插入图片描述

常用2 Sigmoid

在这里插入图片描述

>>> m = nn.Sigmoid()
>>> input = torch.randn(2)
>>> output = m(input)

弹幕:
激活层的作用是放大不同类别的得分差异
二分类输出层用sigmoid 隐藏层用relu
负值的来源:输入数据;卷积核;归一化;反向梯度下降导致负值;【不确定】
reshape(input, (-1,1,2,2))是将input这个22的张量转化为-1122的张量,其中-1表示张量元素个数除以其他维度大小的乘积,即“-1” == 22/(12*2) = 1

非线性变化主要目的:为我们的网络引入非线性特征 非线性越多才能训练不同的非线性曲线或者说特征,模型泛化能力才好。

代码

import torch
import torchvision.transforms
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasetstest_set = datasets.CIFAR10('./dataset', train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(test_set, batch_size=64, drop_last=True)class Activation(nn.Module):def __init__(self):super(Activation, self).__init__()self.relu1 = ReLU(inplace=False)self.sigmoid1 = Sigmoid()def forward(self, input):# output1 = self.relu1(input)output2 = self.sigmoid1(input)# return output1return output2writer = SummaryWriter('logs')
step = 0
activate = Activation()
for data in dataloader:imgs, target = datawriter.add_images("input", imgs, global_step=step)output = activate(imgs)# writer.add_images("output1", output, global_step=step)writer.add_images("output2", output, global_step=step)step += 1
writer.close()

logs

在这里插入图片描述

http://www.lryc.cn/news/171343.html

相关文章:

  • Jenkins学习笔记2
  • 自动化测试:yaml结合ddt实现数据驱动!
  • 高效管理,轻松追踪——Chrono Plus for Mac任务管理工具
  • python项目2to3方案预研
  • MongoDB 是什么和使用场景概述(技术选型)
  • 打印 pyspark.sql.dataframe.DataFrame 有哪些列
  • 什么是虚拟DOM(Virtual DOM)?它在前端框架中的作用是什么?
  • QT实现简易时钟
  • win禁用更新,取消windows更新提示,禁用windows自动更新
  • 倒计时列表实现(小程序端Vue)
  • ContentType:application/x-www-form-urlencoded请求方法遇到的坑【PHP】
  • RabbitMQ - 死信、TTL原理、延迟队列安装和配置
  • 大数据与云计算实验一
  • 实施主品牌进化战略(一):确立主品牌进化架构
  • linux搭建单机ES,集成ik分词器,文本抽取,Kibana可视化平台
  • 金融和大模型的“两层皮”问题
  • 智能生活从这里开始:数字孪生驱动的社区
  • Python计算机二级知识点整理
  • 双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图
  • (JavaEE)(多线程案例)线程池 (简单介绍了工厂模式)(含经典面试题ThreadPoolExector构造方法)
  • 单播与多播mac地址
  • 反向动力学Ik学习
  • 基于Levenberg-Marquardt算法的声源定位matlab仿真
  • vscode的Emmet语法失效
  • 堆排序(大根堆)
  • Mybatis学习笔记3 在Web中应用Mybatis
  • 软件测试之功能测试详解
  • javascript选取元素的范围,可以包含父级,也可以不包含父级
  • QGIS怎么修改源代码?持续更新...
  • dev board sig技术文章:轻量系统适配ARM架构芯片平台