5-pytorch-torch.nn.Sequential()快速搭建神经网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • torch.nn.Sequential()快速搭建网络法
    • 1 生成数据
    • 2 快速搭建网络
    • 3 训练、输出结果
  • 总结


前言

本文内容还是基于4-pytorch前馈网络简单(分类)问题搭建这篇的相同例子,只是为了介绍另一种更加快速搭建网络的方法,看个人喜好用哪一种。
【注】:建议先看完上面链接的博客4,在来看本篇。
这里的这种搭建方法是使用**torch.nn.Sequential()**快速搭建,不用我们在继承重写net类了。

torch.nn.Sequential()快速搭建网络法

1 生成数据

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as npn_data = torch.ones(100,2)
x0 = torch.normal(2*n_data,1)
y0 = torch.zeros(100,1)
x1 = torch.normal(-2*n_data,1)
y1 = torch.ones(100,1)x = torch.cat((x0,x1),0)
# 在分类问题中标签必须用一维tensor,回归中则没有这个要求
y = torch.cat((y0,y1),0).reshape(-1)
# 在分类问题中标签还需要用torch.LongTensor类型
# 将张量 y 的类型转换为 long,这是因为在 PyTorch 中,分类问题的标签通常是整数类型(long),以便与模型输出的类别概率进行比较,从而计算损失。
y = y.long()fig = plt.figure()
plt.scatter(x.data.numpy()[:,0],x.data.numpy()[:,1],c=y.data.numpy())
# 给画出来的每一个点标上标签,有点难看,注了吧
# 循环遍历每个数据点,根据其对应的标签添加标签文本
for i in range(len(x)):plt.text(x[i][0], x[i][1], str(int(y[i].item())), fontsize=8)
plt.show()

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

2 快速搭建网络

## 搭建网络method1
# class Net(torch.nn.Module):
#     def __init__(self,n_features,n_hidden,n_output):
#         # 继承原来结构体的全部init属性及方法
#         super(Net,self).__init__()
#         # 线性层就是全连接层
#         self.hidden = torch.nn.Linear(n_features,n_hidden)
#         self.predict = torch.nn.Linear(n_hidden,n_output)
#         
#     def forward(self,x):
#         # 重写继承类的向前传播方法,就是在这个里面选择激活函数的
#         x = F.relu(self.hidden(x))
#         # 分类中输出层也可以不用激活函数,我们最后在对输出结果进行softmax处理
#         x = self.predict(x)
#         return x
#         
# net = Net(2,10,2)
# # 输出层定义2个输出,对输出在进行softmax处理,取出概率最大的元素的下标就是我们分类的类别;与回归有所不同
# # 有点类似机器学习里面的独热编码
# print(net)## 快速搭建法,和前面注释掉的效果是一样的。
net = torch.nn.Sequential(torch.nn.Linear(2,10),torch.nn.ReLU(), # 这里激活函数大写了要torch.nn.Linear(10,2)
)
print(net)

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

3 训练、输出结果

optimizer = torch.optim.SGD(net.parameters(),lr=0.02)
# 分类用交叉熵损失函数
loss_func = torch.nn.CrossEntropyLoss()# 开启matplotlib的交换模式
plt.ion()
for t in range(100):# 这一步其实是调用了类里面的 __call__魔术方法,又学到一个魔术方法out = net(x)loss = loss_func(out,y)# 梯度清零optimizer.zero_grad()# 误差反向传播,求梯度loss.backward()# 进行优化器优化optimizer.step()if t%5 == 0:plt.cla()prediction = torch.max(F.softmax(out,1),1)[1]pred_y = prediction.data.numpy().reshape(-1)target_y = y.data.numpy().reshape(-1)plt.scatter(x.data.numpy()[:,0],x.data.numpy()[:,1],c=pred_y)accuracy = sum(pred_y==target_y)/200plt.text(1.2,-4,'accuracy=%.2f' % accuracy, fontdict={'size':20,'color':'red'})plt.pause(0.1)
# 关闭matplotlib的交换模式
plt.ioff()
plt.show()

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

# 输出out经softmax处理过后才变成概率
out2probability = F.softmax(out,1)
#print(out2probability.round(decimals=2))
# 取出概率向量里面概率最大的下标就是最终的分类结果
prediction = torch.max(F.softmax(out,1),1)[1]
print(prediction)在这里插入代码片

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

总结

选择那种方法搭建,看个人喜好,效果完全一样。

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

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

相关文章

Go 编译构建的一些细节

Go 编译构建的一些细节 发现自己竟然没有怎么认真研究过 go 的编译构建命令。 结论前置 go run 专门用来运行命令源码文件的命令,一般用来运行单个文件go build 主要是用于测试编译。编译某个包或者项目,在当前目录下生成可执行文件go install 编译并…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

【CANN训练营】目标检测(YoloV5s)实践(Python实现)

样例介绍 使用多路离线视频流(* .mp4)作为应用程序的输入,基于YoloV5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。 样例代码逻辑如下所示: 环境信息 CPU:Intel Xeon Gold 63…

C++11新特性系列(一)

目录 1、C11简介 2、列表的初始化 2.1 {}初始化 2.2 initializer_list 3、auto与decltype 3.1 auto 3.2 decltype 4、范围for循环 5、右值引用和移动语义 4.1 左值引用和右值引用 4.1.1 左值引用 4.1.2 右值引用 4.2 右值引用使用场景和意义 1、C11简介 C11是C语言…

高通 Android 12 源码编译aidl接口

最近在封装系统sdk接口 于是每次需要更新aidl接口 ,传统方式一般使用make update-api或者修改Android.mk文件,今天我尝试使用Android.bp修改 ,Android 10之前在Android.mk文件修改,这里不做赘述。下面开始尝试修改,其实…

InnoDB架构:磁盘篇

InnoDB架构:磁盘篇 InnoDB是MySQL数据库中默认的存储引擎,它为数据库提供了事务安全型(ACID兼容)、行级锁定和外键支持等功能。InnoDB的架构设计优化了对于读取密集和写入密集型应用的性能表现,是一个高度优化的存储系…

近屿智能全新推出AI培训产品:AIGC大模型工程师与产品经理学习路径图

如今,人工智能和自然语言处理技术的发展,使得AI生成的内容(AIGC,AI Generated Content)领域开发出了巨大的潜力。就像业内巨头OpenAI公司,开发出了一系列自然语言处理模型ChatGPT,不仅带动了全世…

C语言单向链表的经典算法

1.分割链表 2.移除链表元素 3.反转链表 4.合并两个有序链表 5.链表的中间结点 6.环形链表的约瑟夫问题 1.分割链表: 1.思路:创建新链表,小链表和大链表。如图 代码如下 /*** Definition for singly-linked list.* struct ListNode {* int val…

Unity类银河恶魔城学习记录12-18,19 p140 Options UI-p141 Finalising ToolTip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_ToolTip.cs using TMPro; using UnityEngine;public class UI_ToolTip :…

IBM SPSS Statistics for Mac中文激活版:强大的数据分析工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析工具,为Mac用户提供了高效、精准的数据分析体验。 IBM SPSS Statistics for Mac中文激活版下载 该软件拥有丰富的统计分析功能,无论是描述性统计、推论性统计,还是高级的多元统计分析&am…

【面试经典 150 | 链表】K 个一组翻转链表

文章目录 写在前面Tag题目来源解题思路方法一:迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

【从零开始手搓12306项目】第一阶段遇到的问题及解决方案

IDEA中datebase连接mysql失败 读取外包函数报错 注意区分private和public 找不到数据库? 一定要注意数据库的url链接,在datebase的url复制过来 xml和java对应不上? 最好复制一遍到xml文件 git忽略条件文件目录 定义Git全局的 .gitigno…

人工智能与IP代理池:解析网络数据采集的未来

前言 随着互联网的快速发展,数据成为了当今社会最宝贵的资源之一。然而,要获取大量的网络数据并进行有效的分析,往往需要面对诸多挑战,其中之一就是网络封锁与反爬虫机制。在这个背景下,人工智能(AI&#x…

Python 物联网入门指南(七)

原文:zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者:飞龙 协议:CC BY-NC-SA 4.0 第二十四章:基本开关 到目前为止一定是一段史诗般的旅程!回想一下你开始阅读这本书的时候,你是否曾想象…

IP协议如何进行地址管理?

如今,IP协议有两个版本,分别是IPv4和IPv6,IPv4是目前主要应用的版本。IPv4的IP地址是以4个字节的数字来表示的,比如 127.0.0.1。因此,IPv4所能表示IP地址的个数是2^32次方,也就是42亿多个,看起来…

OpenStack 入门体验

目录 一、云计算概述 1.1、什么是云计算 1.2、云计算的服务模型 1)IaaS 2)PaaS 3)SaaS 1.3、OpenStack 概述 1)OpenStack 起源 2)什么是 OpenStack 3)OpenStack 优势 二、OpenStack 一…

RabbitMQ进阶学习

在之前的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。 但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订…

IAM 统一身份认证与访问管理服务

即统一身份认证与访问管理服务,是云服务商提供的一套云上身份管理解决方案,可帮助企业安全地管理云上资源的访问权限。 在当今云计算时代,企业越来越依赖云服务来存储和处理敏感数据。然而,这也带来了新的安全挑战,即…

CentOS:执行make命令时报错g++: Command not found

报错截图: 其实很简单只需要安装一下 yum -y install gcc automake autoconf libtool make yum install gcc gcc-c

RabbitMQ交换机的类型

交换机类型 可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化: Publisher:生产者,不再发送消息到队列中,而是发给交换机 Exchange:交换机,一方面&#xff…