当前位置: 首页 > news >正文

day 46 神经网络-简版

关于神经网络需要知道的:
1、梯度下降的思想
2、激活函数的作用
3、损失函数的作用
4、优化器
5、神经网络的概念我们后续完成深度学习项目中,主要使用的包为pytorch,所以需要安装,你需要去配置一个新的环境。未来在复现具体项目时候,新环境命名最好是python版本_pytorch版本_cuda版本,例如 py3.10_pytorch2.0_cuda12.2 ,因为复杂项目对运行环境有要求,所以需要安装对应版本的包。我们目前主要不用这么严格,先创建一个命名为DL的新环境即可,也可以沿用之前的环境
``` 
conda create -n DL python=3.8
conda env list 
conda activate DL
conda install jupyter (如果conda无法安装jupyter就参考环境配置文档的pip安装方法)
pip insatll scikit-learn
然后对着下列教程安装pytorch```
深度学习主要是简单的并行计算,所以gpu优势更大,简单的计算cpu发挥不出来他的价值,我们之前说过显卡和cpu的区别:
1. cpu是1个博士生,能够完成复杂的计算,串行能力强。
2. gpu是100个小学生,能够完成简单的计算,人多计算的快。这里的gpu指的是英伟达的显卡,它支持cuda可以提高并行计算的能力。如果你是amd的显卡、苹果的电脑,那样就不需要安装cuda了,直接安装pytorch-gpu版本即可。cuda只支持nvidia的显卡。
[安装教程](https://blog.csdn.net/Little_Carter/article/details/135934842?ops_request_misc=%257B%2522request%255Fid%2522%253A%25226f4f98b061723def7702948a6b9272a7%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=6f4f98b061723def7702948a6b9272a7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-135934842-null-null.142^v101^pc_search_result_base9&utm_term=pytorch%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187)或者去b站随便搜个pytorch安装视频。
1. 怕麻烦直接安装cpu版本的pytorch,跑通了用云服务器版本的pytorch-gpu
2. gpu的pytorch还需要额外安装cuda cudnn组件import torch
torch.cudaimport torch 
# 检查cuda 是否可用
if torch.cuda.is_available():print("CUDA is available")# 获取可用的cuda 设备数量device_count=torch.cuda.device_count()print(f"Available CUDA devices: {device_count}")# 获取当前使用的cuda设备索引current_device=torch.cuda.current_device()print(f"Current CUDA device: {current_device}")# 获取当前cuda设备的名称device_name=torch.cuda.get_device_name(current_device)print(f"Current CUDA device name: {device_name}")# 获取cuda 版本cuda_version=torch.version.cudaprint(f"CUDA version: {cuda_version}")
else:print("CUDA is not available")数据准备
# 仍用4个特征,3分类的鸢尾花数据集作为我们的数据集
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import  numpy as np
# 加载鸢尾花数据集
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)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
# 归一化数据,神经网络对于输入数据的尺寸敏感,归一化是最常见的处理方式
from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)
# 将数据转换为pytorch的张量
import torch
X_train=torch.tensor(X_train,dtype=torch.float32)
X_test=torch.tensor(X_test,dtype=torch.float32)
y_train=torch.tensor(y_train,dtype=torch.long)
y_test=torch.tensor(y_test,dtype=torch.long)
模型架构定义
定义一个简单的全链接神经网络模型,包含一个输入层、一个隐藏层和一个输出层。
定义层数+定义前向传播顺序
import torch
import torch.nn as nn
import torch.optim as optim 
class MLP(nn.Module):# 定义一个多层感知机(MLP)模型,继承nn.Moduledef __init__(self):super(MLP, self).__init__()# 前三行是八股文,后面的是自定义self.fc1 = nn.Linear(4,10)# 输入层到隐藏层self.relu = nn.ReLU()self.fc2 = nn.Linear(10,3)# 隐藏层到输出层# 输出层不需要激活函数,因为后面会用到交叉熵函数,交叉熵函数内部有softmax 函数,会把输出转换为概率def forward(self,x):# 定义前向传播out=self.fc1(x)out=self.relu(out)out=self.fc2(out)return out
# 实例化模型
model=MLP()其实模型层的写法很多,relu 也可以不写,在后面前向传播的时候计算下即可,因为relu其实不算一个层,只是一个激活函数
# def forward(self,x):# 前向传播#   x=torch.relu(self.fc1(x))#   x=self.fc2(x)#   return x
模型训练(cpu版本)
定义损失函数和优化器
# 分类问题使用交叉熵损失函数
criterion=nn.CrossEntropyLoss()
# 使用随机梯度下降优化器
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)
## 使用自适应学习率优化器
# optimizer=torch.optim.Adam(model.parameters(),lr=0.01)
开始循环训练
实际上在训练的时候,可以同时观察每个epoch 训练完后的训练集的表现:测试集的loss 和准确度
# 训练模型
num_epochs=20000
# 用于存储每个epoch的损失值
losses=[]
for epoch  in range(num_epochs):# 前向传播outputs=model.forward(X_train)#outputs=model(X_train)loss=criterion(outputs,y_train)# 反向传播和优化optimizer.zero_grad()# 梯度清零,因为pytorch 会积累梯度,所以每次迭代需要清零,梯度累计是那种小的bitchsize 模拟大的bitchsizeloss.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('Loss')
plt.title('Training Loss')
plt.show()

@浙大疏锦行

http://www.lryc.cn/news/610677.html

相关文章:

  • 从零用java实现小红书springboot_vue_uniapp(15)评论和im添加图片
  • vue和react的框架原理
  • Elasticsearch向量库
  • React18 严格模式下的双重渲染之谜
  • 使用maven-shade-plugin解决es跨版本冲突
  • DHTMLX重磅发布React Scheduler组件,赋能日程管理开发!
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 数学建模-线性规划。
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——层次分析法
  • Java+Redis+SpringBoot定时器-定时发布商品
  • UNet改进(30):SageAttention在UNet中的4-Bit量化实现详解
  • 多参数状态监测集成终端设备怎么选
  • 日常反思总结2025.8.5
  • 2025金九银十Java后端面试攻略
  • 关于为什么ctrl c退不出来SecureCRT命令行的原因及其解决方法:
  • 变频器实习DAY21 区分BU和SUB 区分BJT和MOS 体二极管
  • SAP-ABAP:SAP接口全生命周期核心规范-开发运维注意事项
  • 第十七天:原码、反码、补码与位运算
  • 【Unity笔记】Unity TextMeshPro 字体显示为方块的终极解决方案(含中文、特殊字符支持)
  • GitLab:一站式 DevOps 平台的全方位解析
  • GitHub 趋势日报 (2025年08月04日)
  • 【motion】HumanML3D 的安装2:psbody-mesh安装成功
  • centos7 个人网站搭建之gitlab私有化部署实现线上发布
  • 基于铁头山羊STM32的平衡车电机转速开环闭环matlab仿真
  • IDEA JAVA工程入门
  • 8.5 CSS3-flex弹性盒子
  • Datart:开源数据可视化的新星,赋能企业数据分析
  • Android 之 Kotlin中的kapt
  • FPGA学习笔记——简易的DDS信号发生器
  • pyspark中的kafka的读和写案例操作