pytorch -- torch.nn网络结构

1. 官网描述

官网
使用 torch.nn 模块,我们可以创建自定义的神经网络模型,并使用 PyTorch 提供的优化器(如 torch.optim)和损失函数来训练和优化模型。
在这里插入图片描述

在这里插入图片描述

2. 常见结构

1.卷积操作
卷积
定义:
二维卷积
1.1版本 nn.functional.conv2d

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

例子:
在这里插入图片描述
代码:

import torch
import torch.nn.functional as F
input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])
kernel = torch.tensor([[1,2,1],
                       [0,1,0],
                       [2,1,0]])
print(input.shape,kernel.shape)#5,5 3,3
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))

output = F.conv2d(input,kernel,stride=1)
print(output)

output2 = F.conv2d(input,kernel,stride=2)
print(output2)
# padding=1 上下左右加一圈0
output3 = F.conv2d(input,kernel,stride=1,padding=1)
print(output3)

运行:
在这里插入图片描述
1.2版本 torch.nn.Conv2d

torch.nn.Conv2d(
in_channels,    输入通道数
out_channels,   输出通道数
kernel_size,    卷积核大小(int or turple)3 (1,2)
stride=1,       卷积核移动的步长
padding=0,      边界填充(加几圈0)
dilation=1,groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

代码

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10('data',train=False,
                                       transform=torchvision.transforms.ToTensor(),
                                       download=True)

dataloader = DataLoader(dataset,batch_size=64)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.conv1 = nn.Conv2d(3,6,3,stride=1,padding=0)

    def forward(self,x):
        x = self.conv1(x)
        return x

tudui = Tudui()

writer = SummaryWriter('logs')
step = 0
for data in dataloader:
    imgs,targets = data
    output = tudui(imgs)
    print(output.shape)
    # 输入大小
    writer.add_images('input',imgs,step)
    # 输出大小
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images('output', output, step)
    step+=1

输出:
在这里插入图片描述
在这里插入图片描述
2.池化操作
目的:保留输入特征,减小数据量
最大池化MaxPool2d:下采样
torch.nn.MaxPool2d(
kernel_size, int/tuple 窗口
stride=None, 步长(默认值是Kernel_size)
padding=0, 在外面加一圈
dilation=1, (空洞卷积)
return_indices=False,
ceil_mode=False ceil模式:向上取整
)
在这里插入图片描述
例子:

import torch
import torchvision.datasets
from torch import nn

input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])
# (N,C,Hin,Win) (C,Hin,Win)  -1表示自己计算batchsize,
input = torch.reshape(input,(-1,1,5,5))
print(input.shape)
class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.maxpool1 = nn.MaxPool2d(kernel_size=3,ceil_mode=True)# 模板创建自己的

    def forward(self,input):
        output = self.maxpool1(input)#输入
        return output

tudui = Tudui()
output = tudui(input)
print(output)

输出
在这里插入图片描述
例子2
代码

import torch
import torchvision.datasets
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.maxpool1 = nn.MaxPool2d(kernel_size=3,ceil_mode=True)# 模板创建自己的

    def forward(self,input):
        output = self.maxpool1(input)#输入
        return output

tudui = Tudui()

dataset = torchvision.datasets.CIFAR10('data',train=False,download=True,transform=torchvision.transforms.ToTensor())

dataloader = DataLoader(dataset,batch_size=64)

writer = SummaryWriter('logs_maxpool')
step = 0
for data in dataloader:
    imgs,targets = data
    writer.add_images('input', imgs, step)
    output = tudui(imgs)
    writer.add_images('maxpool',output,step)
    step+=1
writer.close()

输出
在这里插入图片描述
在这里插入图片描述

3.非线性激活
在这里插入图片描述

torch.nn.ReLU(inplace=False)
torch.nn.Sigmoid(*args, **kwargs)

代码:

import torch
from torch import nn

input = torch.tensor([[1,-0.5],
                      [-1,3]])
input = torch.reshape(input,(-1,1,2,2))

class Tudui(nn.Module):
    def __init__(self):
        super().__init__()
        self.relu1 = nn.ReLU()
    def forward(self,input):
        output = self.relu1(input)
        return output

tudui = Tudui()
output = tudui(input)
print(output)

运行
在这里插入图片描述
例子2:
代码:

import torch
import torchvision.datasets
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# sigmoid
dataset = torchvision.datasets.CIFAR10('data',train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset,batch_size=64)
class Tudui(nn.Module):
    def __init__(self):
        super().__init__()
        self.sigmoid1 = nn.Sigmoid()
    def forward(self,input):
        output = self.sigmoid1(input)
        return output

tudui = Tudui()
writer = SummaryWriter('logs_sigmoid')
step = 0
for data in dataloader:
    imgs,targets = data
    writer.add_images('input',imgs,step)
    output = tudui(imgs)
    writer.add_images('output', output, step)
    print(output.shape)
    step+=1

writer.close()

输出
在这里插入图片描述
在这里插入图片描述
4.线性层
torch.nn.Linear(
in_features,
out_features,
bias=True,
device=None, dtype=None)

代码:

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader

dataset = torchvision.datasets.CIFAR10('data',train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,64,drop_last=True)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.linear1 = nn.Linear(in_features=196608,out_features=10)
    def forward(self,input):
        return self.linear1(input)

tudui = Tudui()

for data in dataloader:
    imgs, targets = data
    # output = torch.flatten(imgs)    #torch.Size([196608])
    # 替换展平
    output = torch.reshape(imgs,(1,1,1,-1)) #torch.Size([1, 1, 1, 196608])
    print(output.shape)
    output = tudui(output)            #torch.Size([10]) torch.Size([1, 1, 1, 10])
    print(output.shape)

4.序列化层(sequential)
例子:
在这里插入图片描述

代码:

import torch
from torch import nn
from torch.utils.tensorboard import SummaryWriter


class Tudui(nn.Module):
    def __init__(self):
        super().__init__()
        # 草稿中计算 stride padding
        self.conv1 = nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,stride=1,padding=2)
        self.maxpool1 = nn.MaxPool2d(2)
        self.conv2 = nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,padding=2)
        self.maxpool2 = nn.MaxPool2d(2)
        self.conv3 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size=5,padding=2)
        self.maxpool3 = nn.MaxPool2d(2)
        self.flatten = nn.Flatten()
        #64是隐藏单元数
        self.linear1 = nn.Linear(in_features=1024,out_features=64)
        #10是输出类别
        self.linear2 = nn.Linear(in_features=64, out_features=10)
        # 另一种写法
        self.model1 = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(in_features=1024, out_features=64),
            nn.Linear(in_features=64, out_features=10)
        )

    def forward(self,x):
        # x = self.conv1(x)
        # x = self.maxpool1(x)
        # x = self.conv2(x)
        # x = self.maxpool2(x)
        # x = self.conv3(x)
        # x = self.maxpool3(x)
        # x = self.flatten(x)
        # x = self.linear1(x)
        # x = self.linear2(x)
        # sequential方式
        x = self.model1(x)
        return x

tudui = Tudui()
print(tudui)
# 用来检验网络结构参数
input = torch.ones((64,3,32,32))# 64 batchsize(64张)
output = tudui(input)

writer= SummaryWriter('logs_s')
writer.add_graph(tudui,input)
writer.close()

输出
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

香港大学发布思维扩散DoT,让思维在时间上扩散,提效保质!

引言:探索结合扩散模型与思维链来提升大模型推理能力 在人工智能领域,大语言模型(LLMs)已经引起了广泛的关注,它们在自然语言处理和机器学习的经典问题上展现出了显著的推理能力。特别是,思维链&#xff0…

Vue开发实例(九)动态路由实现左侧菜单导航

之前在【Vue开发实例(六)实现左侧菜单导航】文中实现了菜单的导航,本篇是在那个基础上改造的。 动态路由实现左侧菜单导航 一、动态菜单创建二、根据菜单数据来创建路由三、添加路由已加载标记,省的每次点击菜单都要加载 一、动态…

开源项目:图像分类算法在保险行业的创新应用与实践

一、引言 在当今数字化时代,保险行业正经历着前所未有的变革。传统保险公司面临着新兴科技的挑战,被迫重新思考其业务模式和营销策略。在这种背景下,我有幸参与了一个项目,该项目旨在通过整合多种销售渠道和技术手段,提…

【蓝桥杯】错误票据

今天是2024年3月1号,蓝桥杯比赛还有一个月的时间,虽说自己不指望拿奖吧,但是还是有些莫i名的焦虑,这道题目都做不出来,感觉自己真的有点菜啊!但是还好啦,我觉得是因为我没有题感,慢慢…

DDS数据分发服务——提升汽车领域数据传输效率

1.引言 随着智能化技术的快速发展,汽车行业正经历着一场革命性的变革。如今的分布式系统变得越来越复杂且庞大,对网络通信基数要求在功能和性能层面越来越高。数据分发服务(DDS)作为一项先进的数据传输解决方案,在汽车…

Redis-基础篇

Redis是一个开源、高性能、内存键值存储数据库,由 Salvatore Sanfilippo(网名antirez)创建,并在BSD许可下发布。它不仅可以用作缓存系统来加速数据访问,还可以作为持久化的主数据存储系统或消息中间件使用。Redis因其数…

【大数据架构(3)】Lambda vs. Kappa Architecture-选择你需要的架构

文章目录 一. Data Processing Architectures1. Lambda Architecture1.1. 架构说明a. Data Ingestion Layerb. Batch Layer (Batch processing)c. Speed Layer (Real-Time Data Processing)d. Serving Layer 1.2. Lambda Architecture的优缺点1.3. 使用案例 2. Kappa Architect…

数据分析-Pandas数据的探查面积图

数据分析-Pandas数据的探查面积图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&…

MyBatis 面试题

什么是MyBatis? MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。 MyBatis 支…

静态时序分析:SDC约束命令set_case_analysis详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 目录 指定值 指定端口/引脚列表 简单使用 set_case_analysis命令用于对电路进行特定模式的设定,例如对于一个工作在正常模式下的芯片,…

08 yum和git

什么是软件包 安装软件,一个通常的办法就是下载程序的源代码进行编译。这种太麻烦,于是一些人把常用软件编译好,做成软件包放在服务器上,通过包管理器可以很方便的得到这个软件包安装,就好比手机上的应用商店 yum&am…

美梦从舒适开始,康姿百德床垫为睡眠健康护航

在当今社会,高质量的睡眠已成为人们对生活品质的追求,对床垫的选择也变得越来越讲究。在我们繁忙的生活中,一张优质的床垫不仅是我们舒适休息的保障,更是保持健康生活方式的重要部分。康姿百德床垫,作为市场上的佼佼者…

14-Linux部署Hadoop集群

Linux部署Hadoop集群 简介 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2)主要解决,海量数据的存储和海量数据的分析计算问题。 Hadoop HDFS 提供分布式海量数据存储能力 Hadoop YARN 提供分布式集群资源管理能力 Hadoop…

R语言使用dietaryindex包计算NHANES数据多种健康饮食指数 (HEI等)(1)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法,将饮食摄入数据标准化为基于指数的饮食模式,从而能够评估流行病学和临床研究中对这些模式的遵守情况,从而促进精准营养。 该软件…

【C++】string 类 ( 上)

标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…

RFID(Radio Frequency Identification)技术笔记

一、RFID的介绍 RFID,全称为Radio Frequency Identification,即射频识别技术,也常被称为电子标签或无线射频识别。它是一种非接触式的自动识别技术,通过射频信号自动识别目标对象并获取相关数据,识别过程无需人工干预&…

LeetCode 刷题 [C++] 第45题.跳跃游戏 II

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n …

金融行业专题|期货超融合架构转型与场景探索合集(2023版)

更新内容&#xff1a; 更新 SmartX 超融合在期货行业的覆盖范围、部署规模与应用场景。新增 CTP 主席系统实践与评测、容器云资源池等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎下载阅读电子书《SmartX 金融核心生产业务场景探索文章合集》。 面对不断变…

【AI Agent系列】【MetaGPT多智能体学习】6. 多智能体实战 - 基于MetaGPT实现游戏【你说我猜】(附完整代码)

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第四篇笔记。今天我们来完成第四章的作…

深度学习需要掌握哪些数学基础?

《深度学习的数学》这本书再合适不过了。作者罗纳德.T.纽塞尔&#xff08;Ronald T. Kneusel&#xff09;&#xff0c;拥有超过 20年的机器学习行业经验。 本书适合有一定深度学习基础、了解Python编程语言的读者阅读&#xff0c;也可作为用于拓展深度学习理论的参考书。 为什么…