一、神经网络模块

进入到PyTorch的torch.nnAPI学习页面
PyTorch提供了很多的神经网络方面的模块,NN就是Neural Networks的简称

二、Containers

torch.nn下的Containers
一共有六个模块,最常用的就是Module模块,看解释可以知道,Module是为所有的神经网络所提供的基础类

Moduel

torch.nn.Containers下的Moduel
自己所搭建的神经网络必须继承这个Moduel类,其也相当于一个模板

模仿一下,创建一个神经网络模型,y = 5 + x
神经网络中的参数都是tensor类型,这点需要注意

import torch
from torch import nnclass Beyond(nn.Module):def __init__(self):super().__init__()def forward(self,input):output = input + 5return outputbeyond = Beyond()
x = torch.tensor(5.0)
out = beyond(x)
print(out)#tensor(10.)

三、Convolution Layers

torch.nn下的Convolution Layers卷积层
常用的就是nn.Conv2d二维卷积,卷积核是二维

四、torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)

TORCH.NN.FUNCTIONAL.CONV2D方法使用说明

参数 描述 解释
input 形状的输入张量
weight 权重 也就是卷积核
bias 偏置
stride 卷积核的步幅。可以是单个数字或元组(sH, sW)。默认值:1 可以指定两个方向的步长,也可以输入一个参数同时设置两个方向
padding 输入两侧的隐式填充 也就是加边

卷积操作这里就不再赘述了,与kernel对应相乘再相加运算而已

import torch
import torch.nn.functionalinput = torch.tensor([[1,2,3,4,5],[5,4,3,2,1],[1,2,3,4,5],[5,4,3,2,1],[1,2,3,4,5]])kernel = torch.tensor([[1,2,3],[3,2,1],[1,2,3]])
print(input.shape)#torch.Size([5, 5])
print(kernel.shape)#torch.Size([3, 3])
#目前input和weight仅为(H,W),不符合conv2d的输入要求#由官网看到的input为四维(minibatch,in_channels,iH,iW)数据,故通过reshape进行转变
#weight也就是kernel是要求四维数据信息
input_re = torch.reshape(input,(1,1,5,5))
kernel_re = torch.reshape(kernel,(1,1,3,3,))
print(input_re.shape)#torch.Size([1, 1, 5, 5])
print(kernel_re.shape)#torch.Size([1, 1, 3, 3])out_1 = torch.nn.functional.conv2d(input_re,kernel_re,stride=1)
print(out_1)
"""
tensor([[[[54, 60, 66],[54, 48, 42],[54, 60, 66]]]])
"""out_2 = torch.nn.functional.conv2d(input_re,kernel_re,stride=2)
print(out_2)
"""
tensor([[[[54, 66],[54, 66]]]])
"""out_3 = torch.nn.functional.conv2d(input_re,kernel_re,stride=1,padding=1)
print(out_3)
"""
tensor([[[[26, 32, 32, 32, 26],[30, 54, 60, 66, 36],[48, 54, 48, 42, 30],[30, 54, 60, 66, 36],[26, 32, 32, 32, 26]]]])
"""

五、torch.nn.ReLU(inplace=False)

Ⅰ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 nninput = 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  outputbeyond = Beyond()
output = beyond(input)
print(output)
"""
tensor([[[[1., 0.],[0., 2.]]]])
"""

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

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset_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 outputwriter = SummaryWriter("y_log")beyond = Beyond()
i=0
for data in dataloader:imgs,targets = datawriter.add_images("input_ReLU",imgs,i)output = beyond(imgs)writer.add_images("output_ReLU",output,i)i = i + 1writer.close()

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

点击该链接或者复制链接到浏览器打开即可

六、torch.nn.Sigmoid

ⅠSigmoid函数介绍

torch.nn.Sigmoid

ⅡSigmoid函数使用

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

import torch
from torch import nninput = 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  outputbeyond = Beyond()
output = beyond(input)
print(output)
"""
tensor([[[[0.7311, 0.3318],[0.3100, 0.8808]]]])
"""

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

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset_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  outputwriter = SummaryWriter("y_log")beyond = Beyond()
i=0
for data in dataloader:imgs,targets = datawriter.add_images("input_Sigmoid",imgs,i)output = beyond(imgs)writer.add_images("output_Sigmoid",output,i)i = i + 1writer.close()

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

七、torch.nn相关推荐

  1. PyTorch基础(七)----- torch.nn.AdaptiveAvgPool2d()方法

    一.方法简介 方法 含义:对张量应用一个自适应的平均池化,只需要输入输出的size即可. - torch.nn.AdaptiveAvgPool2d(output_size) 参数及注意事项 - 1.o ...

  2. PyTorch基础(12)-- torch.nn.BatchNorm2d()方法

    Batch Normanlization简称BN,也就是数据归一化,对深度学习模型性能的提升有很大的帮助.BN的原理可以查阅我之前的一篇博客.白话详细解读(七)----- Batch Normaliz ...

  3. torch.nn.functional.cross_entropy.ignore_index

    ignore_index表示计算交叉熵时,自动忽略的标签值,example: import torch import torch.nn.functional as F pred = [] pred.a ...

  4. PyTorch里面的torch.nn.Parameter()

    在刷官方Tutorial的时候发现了一个用法self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size)),看了官方教程里面的解释也是云里雾里, ...

  5. torch.nn.Embedding理解

    Pytorch官网的解释是:一个保存了固定字典和大小的简单查找表.这个模块常用来保存词嵌入和用下标检索它们.模块的输入是一个下标的列表,输出是对应的词嵌入. torch.nn.Embedding(nu ...

  6. torch.nn.Linear()函数的理解

    import torch x = torch.randn(128, 20) # 输入的维度是(128,20) m = torch.nn.Linear(20, 30) # 20,30是指维度 outpu ...

  7. torch.nn.Embedding

    在pytorch里面实现word embedding是通过一个函数来实现的:nn.Embedding 1 2 3 4 5 6 7 8 9 10 11 12 13 # -*- coding: utf-8 ...

  8. PyTorch 笔记(20)— torchvision 的 datasets、transforms 数据预览和加载、模型搭建(torch.nn.Conv2d/MaxPool2d/Dropout)

    计算机视觉是深度学习中最重要的一类应用,为了方便研究者使用,PyTorch 团队专门开发了一个视觉工具包torchvision,这个包独立于 PyTorch,需通过 pip instal torchv ...

  9. PyTorch 笔记(16)— torch.nn.Sequential、torch.nn.Linear、torch.nn.RelU

    PyTorch 中的 torch.nn 包提供了很多与实现神经网络中的具体功能相关的类,这些类涵盖了深度神经网络模型在搭建和参数优化过程中的常用内容,比如神经网络中的卷积层.池化层.全连接层这类层次构 ...

  10. PyTorch 笔记(15)— 分别使用 tensor、autograd、torch.nn 搭建简易神经网络

    1. 使用 tensor 搭建神经网络 搭建神经网络模型的具体代码如下,这里会将完整的代码分成几部分进行详细介绍,以便于理解. import torch as tbatch_n = 100 input ...

最新文章

  1. C#编写的多生产者多消费者同步问题
  2. import h5py ImportError: DLL load failed: the specified module could not be found
  3. mysql 子查询添加索引_mysql – 你能索引子查询吗?
  4. Linux内核设计与实现学习笔记目录
  5. 2000坐标系xy坐标几位_2000国家大地坐标系转换演示及实践应用专题培训研讨班...
  6. 初次使用Atlas JavaScript (Part 3 - 实现自己的应用)
  7. 计算机视觉算法岗面经,2019秋招资料
  8. shell编程之【告警系统】
  9. JavaScript中call,apply,bind方法的总结
  10. [C++基础]031_如何正确获取用户的输入
  11. 通过FTP实现上传和下载
  12. FileZilla中文乱码解决方法 与 设置界面为中文
  13. vscode自动快捷格式化代码_vscode格式化代码快捷键_解锁格式化的快捷键
  14. 高级php工程师需要掌握的知识点
  15. FFMpeg 滤镜中英文对照
  16. 04、HTMLCSS-盒子模型
  17. 常用的连续时间信号及其时域特性
  18. 解决linux无法启动,进入救援模式也报错:you don‘t have any linux partitions的问题
  19. 圆心科技再冲刺港交所上市:收入和亏损同增,毛利率走低,何涛为董事长
  20. 关于网站漏洞的案例和解决思路

热门文章

  1. Hibernate检索策略
  2. 分享几个国内外安全专家常用的漏洞库平台
  3. hdu 5510 Bazinga (尺取法)
  4. ANSYS 有限元分析 修改与编辑
  5. 油猴插件(Tampermonkey)安装教程
  6. 工业控制系统如何实现网络安全等级保护的相关要求
  7. android跑马灯监听,TextView跑马灯状态监听
  8. php ajax 上传进度条,jQuery+php+ajax带进度条无刷新上传文件代码
  9. 【读书笔记】 - 《你只是看起来很努力》
  10. 中国名气黑客网站目录