python学习day33

知识点回顾:

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)。

python 复制代码
#数据的准备
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)

神经网络定义部分

python 复制代码
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,输出维度为10
        self.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()

训练部分

python 复制代码
#模型训练(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}")

结果可视化

python 复制代码
#可视化结果
import matplotlib.pyplot as plt

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

@浙大疏锦行

相关推荐
爱写Bug的小孙10 分钟前
Tools、MCP 和 Function Calling
开发语言·人工智能·python·ai·ai编程·工具调用
rgb2gray11 分钟前
城市韧性与交通基础设施系统耦合协调度的时空演变及影响因素
网络·人工智能·python·ai·写作·耦合·耦合协调
初级炼丹师(爱说实话版)17 分钟前
大模型部署-数据并行/模型并行
人工智能·python
炽烈小老头22 分钟前
【 每天学习一点算法 2025/12/12】回文链表
学习·算法·链表
音视频牛哥23 分钟前
从“十五五”到数字化转型:音视频技术在未来产业中的关键作用
人工智能·深度学习·计算机视觉·音视频·十五五规划音视频低延迟方案·十五五规划低空经济低延迟方案·rtsp rtmp播放器
高洁0139 分钟前
激活函数应该具有哪些特征
人工智能·python·深度学习·神经网络·transformer
全栈陈序员41 分钟前
【Python】基础语法入门(十五)——标准库精选:提升效率的内置工具箱
开发语言·人工智能·python·学习
阿蒙Amon43 分钟前
JavaScript学习笔记:4.循环与迭代
javascript·笔记·学习
IT·小灰灰1 小时前
AI学会理解物理法则:OpenAI Sora 2如何重塑视频生成新范式
人工智能·python·深度学习·机器学习·数据挖掘·音视频
喵了meme1 小时前
Linux学习日记19:线程同步与互斥锁
java·jvm·学习