python学习day33

article/2025/7/22 6:38:52

知识点回顾:
1.PyTorch和cuda的安装
2.查看显卡信息的命令行命令(cmd中使用)
3.cuda的检查
4.简单神经网络的流程
a.数据预处理(归一化、转换成张量)
b.模型的定义
i.继承nn.Module类
ii.定义每一个层
iii.定义前向传播流程
c.定义损失函数和优化器
d.定义训练流程
e.可视化loss过程

数据准备部分

预处理补充:
注意事项:
1. 分类任务中,若标签是整数(如 0/1/2 类别),需转为long类型(对应 PyTorch 的torch.long),否则交叉熵损失函数会报错。
2.回归任务中,标签需转为float类型(如torch.float32)。

#数据的准备
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np
import torch#数据的加载
iris = load_iris()
X = iris.data
y = iris.target#划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(X_train.shape, X_test.shape)
print(y_train.shape, y_test.shape)#归一化数据,深度学习对数据敏感
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)#数据转为张量
X_train = torch.FloatTensor(X_train)
X_test = torch.FloatTensor(X_test)
y_train = torch.LongTensor(y_train)
y_test = torch.LongTensor(y_test)

神经网络定义部分

import torch    #导入PyTorch
import torch.nn as nn #导入神经网络模块
import torch.optim as optim #导入优化器class MLP(nn.Module): #定义一个多层感知机模型def __init__(self): #初始化函数super(MLP, self).__init__() #调用父类的初始化函数
#前三行固定的,下面是自定义的self.fc1 = nn.Linear(4, 10) #第一层全连接层(输入到隐藏),输入维度为4,输出维度为10self.relu  = nn.ReLU()  #激活函数self.fc2 = nn.Linear(10, 3)   #第二层全连接层(隐藏到输出),输入维度为10,输出维度为3# 输出层不需要激活函数,因为后面会用到交叉熵函数cross_entropy,交叉熵函数内部有softmax函数,会把输出转化为概率def forward(self, x):       #前向传播函数out = self.fc1(x)       #输入层out = self.relu(out)    #激活函数out = self.fc2(out)     #输出层return out
#实例化模型
model = MLP()

训练部分

#模型训练(CPU)
#定义损失函数和优化器#分类问题用交叉熵损失函数
criterion = nn.CrossEntropyLoss()#随机梯度下降
optimizer = optim.SGD(model.parameters(), lr=0.01)#训练模型
num_epochs= 20000 #训练轮数#存储epoch损失值
losses = []for epoch in range(num_epochs):#前向传播outputs = model.forward(X_train) #显式调用forward函数# outputs = model(X_train)  # 常见写法隐式调用forward函数,其实是用了model类的__call__方法loss = criterion(outputs, y_train) #outputs是模型预测,y_train真实标签#反向传播和优化optimizer.zero_grad()#清除梯度loss.backward() #反向传播计算梯度optimizer.step() #更新参数#记录损失值losses.append(loss.item())#打印损失值if (epoch+1) % 100 ==0:print(f"Epoch[{epoch+1}/{num_epochs}], Loss:{loss.item():.4f}")

 

结果可视化

#可视化结果
import matplotlib.pyplot as plt#可视化曲线
plt.plot(range(num_epochs), losses) #绘制损失函数曲线
plt.xlabel("epochs")
plt.ylabel("losses")
plt.title("losses vs epochs")
plt.show()

@浙大疏锦行


http://www.hkcw.cn/article/kPMEcZDCew.shtml

相关文章

Python中的变量、赋值及函数的参数传递概要

Python中的变量、赋值及函数的参数传递概要 python中的变量、赋值 python中的变量不是盒子。 python中的变量无法用“变量是盒子”做解释。图说明了在 Python 中为什么不能使用盒子比喻,而便利贴则指出了变量的正确工作方式。 如果把变量想象为盒子,那…

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一:对列表的获取进行分页处理 实现方法: 前端请求(需要向后端传两个参数,pageIndex是获取第几页是从0开始,pageSize是这一页需要获取多少个数据) 后端接口实现(因为这里是通过参数拼接请求…

电磁器件的“折纸革命“:牛津《Sci. Reports》发布剪纸超材料

01 前沿速递:顶尖团队破解行业难题 近日,牛津大学工程科学系杨云芳、Andrea Vallecchi、Ekaterina Shamonina、Christopher Stevens及游忠教授团队在《Scientific Reports》发表突破性研究,提出一类基于剪纸(Kirigami&#xff0…

【Java学习笔记】接口

接口 应用场景引出 一、接口的介绍 1. 接口的基本结构 interface 接口名{属性抽象方法 }引出关键字:implements 2. 子类实现接口 class a implements 接口名{}3. 接口中的属性说明:属性默认是public static final修饰的 (1)f…

02 APP 自动化-Appium 运行原理详解

环境搭建见 01 APP 自动化-环境搭建 文章目录 一、Appium及Appium自动化测试原理二、Appium 自动化配置项三、常见 ADB 命令四、第一个 app 自动化脚本 一、Appium及Appium自动化测试原理 Appium 跨平台、开源的 app 自动化测试框架,用来测试 app 应用程序&#x…

(1)pytest简介和环境准备

1. pytest简介 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点: 非常容易上手,入门简单&a…

同元软控、核动力研究院与华北电力大学产学研联合实训室正式揭牌

2025年5月27日,华北电力大学、苏州同元软控信息技术有限公司(以下简称“同元软控”)、中国核动力研究设计院(以下简称“核动力研究院”)联合实训室揭牌授权仪式暨座谈交流会在华北电力大学召开。华北电力大学教务处处长…

PyTorch中nn.Module详解

直接print(dir(nn.Module)),得到如下内容: 一、模型结构与参数 parameters() 用途:返回模块的所有可训练参数(如权重、偏置)。示例:for param in model.parameters():print(param.shape)named_parameters…

若依项目天气模块

在若依项目里添加了一个天气模块,记录一下过程。 一、功能结构与组件布局 天气模块以卡片形式(el-card)展示,包含以下核心功能: 实时天气:显示当前城市、温度、天气状况(如晴、多云&#xff…

APM32芯得 EP.06 | APM32F407移植uC/OS-III实时操作系统经验分享

《APM32芯得》系列内容为用户使用APM32系列产品的经验总结,均转载自21ic论坛极海半导体专区,全文未作任何修改,未经原文作者授权禁止转载。 最近我开始学习 uC/OS-III 实时操作系统,并着手将其移植到APM32F407 开发板上。在这个过…

图解gpt之注意力机制原理与应用

大家有没有注意到,当序列变长时,比如翻译一篇长文章,或者处理一个长句子,RNN这种编码器就有点力不从心了。它把整个序列信息压缩到一个固定大小的向量里,信息丢失严重,而且很难记住前面的细节,特…

更新密码--二阶注入攻击的原理

1.原理知识: 二阶SQL注入攻击(Second-Order SQL Injection)原理详解 一、基本概念 二阶注入是一种"存储型"SQL注入,攻击流程分为两个阶段: ​​首次输入​​:攻击者将恶意SQL片段存入数据库​…

RFID技术助力托盘运输线革新

RFID技术助力托盘运输线革新 湖北某工厂托盘运输线使用上存在的问题: 1、托盘在运输线上受信息录入时间等问题影响,导致效率低下; 2、原先托盘上粘贴的条码容易污损,并且时常需要更新更换,导致信息录入、出入库等步…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天,EasyRTC作为一款全平台互通的实时视频通话方案,实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同,开发者通过该方案可快速搭建1v1实时音视频通信系统,适…

java.io.IOException: ZIP entry size is too large or invalid

java.io.IOException: ZIP entry size is too large or invalid 解决方案&#xff1a;pom.xml添加<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>

vue3 项目配置多语言支持,如何从服务端拿多语言配置

在 Vue3 项目中实现多语言支持并从服务端获取配置&#xff0c;可以使用 Vue I18n 库。在初始化阶段可以发送请求获取多语言配置或者通过本地文件加载json文件的方式&#xff0c;都可以实现。我这里是tauri项目&#xff0c;所以使用的是invoke从tauri端拿到配置文件&#xff0c;…

龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道

端午节承载着中华民族数千年的精神密码&#xff0c;龙舟最初是古人沟通天地、祈求风调雨顺的仪式载体。战国时期&#xff0c;屈原投江的悲壮故事为端午注入了家国情怀&#xff0c;龙舟竞渡从此兼具纪念英雄与祈福避疫的双重意义。这种文化内核&#xff0c;与深圳市华芯邦“以科…

OS9.【Linux】基本权限(下)

目录 1.默认权限 掩码 修改权限掩码 目录的权限说明 r权限 w权限 x权限 结论 家目录权限 2.共享目录 粘滞位t 承接OS8.【Linux】基本权限(上)文章 1.默认权限 创建用户时拥有者所属组都是该用户,而且对其他人没有任何权限 掩码 新建文件new.txt1和目录folder后…

【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘

说明&#xff1a; 1、服务器数据盘挂了&#xff0c;然后将以前的数据用rsync拷贝过去&#xff0c;启动容器kibana服务&#xff0c;报错信息如下图所示&#xff1a; 2、可能是拷贝docker文件夹&#xff0c;有些文件没有拷贝过去&#xff0c;导致无论是给文件夹授权用户kibana或者…

【25-cv-05917】HSP律所代理Le Petit Prince 小王子商标维权案

Le Petit Prince 小王子 案件号&#xff1a;25-cv-05917 立案时间&#xff1a;2025年5月28日 原告&#xff1a;SOCIETE POUR LOEUVRE ET LA MEMOIRE DANTOINE DE SAINT EXUPERY - SUCCESSION DE SAINT EXUPERY-DAGAY 代理律所&#xff1a;HSP 原告介绍 《小王子》&#x…