【Pytorch】神经网络的基本骨架

news2024/11/29 3:58:19

【Pytorch】神经网络的基本骨架

    • nn.module的基本使用
    • 卷积操作
    • 神经网络卷积层
    • 最大池化的使用-池化层

nn.module的基本使用

nn.module是所有神经网络的基本类,其他的所有神经网络都是继承该类,在此基础上进行修改。

在这里插入图片描述

在这里插入图片描述

上面的forward函数,首先进行卷积操作,然后进行一次非线性操作,然后进行卷积操作,非线性操作

module的简单使用

import torch
from torch import nn

class Tudui(nn.Module):

    #  初始化 父类
    def __init__(self):
        super().__init__()

    def  forward(self,input):
        output = input + 1
        return output
    
tudui  =Tudui()

x = torch.tensor(1.0)
output = tudui.forward(x)

print(output)


卷积操作

使用卷积核对输入的图像进行操作

在这里插入图片描述

stride=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]])

#  batchsize 1 一个channel  5 x 5的图像
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))

print(input.shape)
print(kernel.shape)


#  进行卷积操作  步长为1
output = F.conv2d(input,kernel,stride = 1)
print(output)


#  卷积步长为2
output = F.conv2d(input,kernel,stride = 2)
print(output)

#  填充1
output = F.conv2d(input,kernel,stride = 1,padding = 1)
print(output)



在这里插入图片描述

神经网络卷积层

一个卷积核

在这里插入图片描述

两个卷积核
在这里插入图片描述

  • in_channels:输入通道数 由输入图像通道数决定
  • out_channels;输出通道数 由卷积核数量进行决定 也代表最终输出通道数
  • kernel_size:卷积核大小 控制输出大小
  • stride:步长,也控制输出大小
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
from tensorboardX import SummaryWriter
import torch


# 转换成tensor张量形式 下载测试数据集
dataset = torchvision.datasets.CIFAR10("../data",train = False,transform = torchvision.transforms.ToTensor(),download = True)

#  每次取出64长图片
dataloader = DataLoader(dataset,batch_size = 64)


class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        #  6个卷积核 n x n

        #  比如图片是3 x 3的 使用6 个 3 x 3的卷积核进行卷积操作  得到6个输出  每一个卷积核不一样
        self.conv1 = Conv2d(in_channels = 3,out_channels=6,kernel_size=3,stride =1,padding=0)

    #  前向传播
    def forward(self,x):
        x = self.conv1(x)
        return x


tudui = Tudui()
print(tudui)


writer = SummaryWriter("../logs")

step = 0

for data in dataloader:
    imgs,targets = data # 拆分元组
    output = tudui.forward(imgs)

    #  打印原始大小 64 3 32 32
    print(imgs.shape)

    #  每次取出64张图片  每张图片原本是3个channel 经过卷积操作变成6个channel  每张图片都是30 x 30大小
    print(output.shape)

    writer.add_images("input",imgs,step)

    #  对output 进行一次reshape 然后进行显示 64 6 30 30  -》 ?3 30 30  将图片转换成三通道
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images("output",output,step)

    step = step + 1


最大池化的使用-池化层

每次取出卷积核范围内最大的那个数字

如果cell_model = true表示图像中的数字不足以覆盖卷积核 仍然取出最大值

在这里插入图片描述

Input: N C H W N 代表batchsize C代表通道数

import torch
from torch import nn
from torch.nn import MaxPool2d




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]],dtype=torch.float32)

#  改变tensor的形状
input = torch.reshape(input,(-1,1,5,5))

print(input.shape)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        #  定义池化操作 最大卷积操作
        self.maxpool1 = MaxPool2d(kernel_size = 3,ceil_mode = True)

    #  前向传播
    def forward(self,input):
        output = self.maxpool1(input)
        return output
    
tudui = Tudui()
#  前向传播
output = tudui.forward(input)
print(output)


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postman进行post、get参数传递及中文乱码和各类型参数传递和json格式传参和日期型参数传递和响应数据传回

postman是一种测试工具 用postman直接在其上输入参数名和参数值就行,不用区分post和get请求方法,当然java代码要改变一点,在响应注解的方法里面添加和postman中输入的参数名一样的形参 get请求: 代码:注意在响应注解…

JUC源码系列-AQS独占锁获取

前言 AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。 AQS虽然被定义…

JUC源码系列-AQS的Condition的接口实现

前言 本篇文章是基于线程间的同步与通信(4)——Lock 和 Condtion 这篇文章写的,在那篇文章中,我们分析了Condition接口所定义的方法,本篇我们就来看看AQS对于Condition接口的这些接口方法的具体实现。 概述 我们在前面介绍Conditon的时候说…

es6和commonJs的区别

一、export语句的区别: ES6 和 CommonJS 是两种不同的 JavaScript 模块化规范,它们的 export 语句有一些区别: export 关键字:在 ES6 中,使用 export 关键字来导出模块中的变量、函数、类等;而在 CommonJS…

【C语言】详解数组(数组的创建和初始化、数组越界以及作为函数参数)

简单不先于复杂,而是在复杂之后。 目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 1.5 sizeof 和 strlen 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 …

Java构造器与this关键字

Java构造器与this关键字\huge{Java构造器与this关键字}Java构造器与this关键字 Java类构造器 作用 在类中定义用于初始化一个类的对象,并且返回对象的地址。(可以理解为就是创建一个对象) 调用实例 Car c new Car(); //无参数调用格式 …

离线安装rancher2.4管理K8S集群并部署服务

在一些公司安装K8S集群或者rancher等软件,都是没有网络的,在这种情况下,需要自己想办法安装!这里给大家介绍在没有网络的情况下,怎么安装rancher和K8S集群,最后在用rancher管理K8S集群部署服务!…

UDP的多点通信

文章目录一. 网络属性二. 多点通信**2.1. 单播**2.2. 广播2.2.1 广播的发送端流程 (类似UDP客户端)2.2.2 广播的接收端流程(类似UDP服务器)2.3. 组播2.3.1组播的发送端流程 (类似UDP客户端)2.3.2组播的接收端流程(类似UDP服务器)2.3.3 加入多播组示例代码一. 网络属性 setsock…

对 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP 的实践

对 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP 的实践 前言 昨天编写了一篇博文: Activity启动模式与栈的使用小结,里面参考了下面这篇文章: Android面试官装逼失败之:Activity的启动模式 对里面关于 FLAG_ACTIVITY_CLEAR_TOP| F…

什么是开源?

从开源空间(Open Source Space)说起开源空间(Open Source Space):一个边界封闭,内部开放的空间。在这个空间里,人们围绕数字公共产品(服务),进行开放式协作。…

零售数据分析之操作篇13:图表联动分析

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期回顾与作业讲解 上一讲讲了子查询的应用场景,即有一个结果集(ds2)的筛选条件是来自另外…

【C++】继承---上(继承的引入及使用详解、切片赋值和作用域)

前言: 我们在学习C的第一节课就了解到C是一门面向对象的语言,面向对象的语言有三大特性: 封装、继承、多态 此前我们学习了封装,比如模拟实现vector,string或者迭代器等,不仅有利于我们的维护和管理&#…

【uniapp】Vue3版本项目出现Proxy代理对象无法正常取值问题解决

习惯了使用Vue2版本的uniapp项目,直到后来想升级版本,改用Vue3版本就会遇到一些无法正常取值(访问属性)问题,其中最显著问题就是Proxy代理造成的 在我们用浏览器调试的时候,遇到如同下图这样,出…

Spring Boot 项目如何实现上传头像功能?

目录 设计思路 效果展示 ​编辑 分析 前后端交互接口 请求 响应 代码实现和详细注释 数据库设计 自定义资源映射 前后端交互 客户端开发 服务器开发 设计思路 效果展示 分析 实现这个功能只要弄清楚以下几点即可: 怎么将头像数据发送给服务器&#x…

九龙证券|服务器龙头获资金连续抢筹,尾盘主力抢筹前期大热门股

今天,核算机职业取得主力大手笔抢筹。 今天主力资金净流出53.89亿元,其间创业板净流出3.19亿元,沪深300成份股净流出7.61亿元。 申万一级职业中,今天有19个职业上涨,传媒职业接连两日均涨近5%,居首位&…

stm32当中GPIO输出知识点汇总(GPIO的八种模式及其原理)

一、GPIO工作模式. 1. 四种输入模式 GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式 2. 四种输出模式 GPIO_Mode_Out_OD 开漏输出模式 GPIO_Mode_Out_PP 推挽输出模式 GPIO_Mod…

【剑指offer-C++】JZ79:判断是不是平衡二叉树

【剑指offer-C】JZ79:判断是不是平衡二叉树题目描述解题思路题目描述 描述:输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。 平衡二叉树…

Nginx实现负载均衡的多种方法演示

文章目录前言一、配置讲解1.1 轮询算法(默认)1.2 IP_HASH算法1.3 Weighted算法1.4 URL_HASH算法总结前言 Nginx是一款高性能的Web服务器和反向代理服务器,它具有占用内存小、并发处理能力强、稳定性高等优点,适用于高并发、高负载的Web应用场…

pandas之DataFrame基础

pandas之DataFrame基础1. DataFrame定义2. DataFrame的创建形式3. DataFrame的属性4. DataFrame的运算5. pandas访问相关操作5.1 使用 loc[]显示访问5.2 iloc[] 隐式访问5.3 总结6. 单层索引和多层级索引6.1 索引种类与使用6.2 索引相关设置6.3 索引构造6.4 索引访问6.5 索引变…

BGP选路实验(重点是各种策略)

实验拓扑 基础配置(完成IGP的配置) 首先完成各 个接口IP地址,环回接口地址等一些基本配置,实现直连之间的互相通信 在R4,R5上的配置类似 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [Huawei-GigabitEthernet0/0/0]int g0/0…