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

深度学习打卡1

神经网络原理

激活函数
 

引入非线性: 这是最核心、最重要的作用! 如果没有激活函数(或者使用线性激活函数f(x) = x),无论神经网络有多少层,其整体计算仍然等价于一个单层的线性变换 (y = Wx + b)。

 

梯度下降

 找到能使损失函数值最小化的模型参数

    1. 初始化: 随机选择一个起点(给模型参数赋初值)。

    2. 计算梯度: 在当前参数位置,计算损失函数关于所有参数的梯度。这个梯度告诉你“哪个方向是当前最陡的上坡”。

    3. 沿负梯度方向更新: 向负梯度方向迈出一小步(更新参数)。迈出的步长由学习率控制。

      • 新参数 = 旧参数 - 学习率 * 梯度

    4. 重复: 不断重复步骤 2 和 3,计算新位置的梯度,再次沿负梯度方向更新参数。

      核心思想: 通过迭代地计算梯度并沿着最陡下降方向(负梯度方向)调整参数,逐步逼近损失函数的最小值点。

学习率的重要性:

太大:步长过大,可能会“跨过”谷底,甚至导致损失值震荡或发散(在山谷两边来回跳)。

太小:步长过小,收敛速度极慢,可能需要非常多的步骤才能到达谷底,甚至卡在不是最低点的平坦区域(局部极小点或鞍点)。


 

损失函数 

  • 均方误差 (MSE): L = 1/N * Σ(ŷ_i - y_i)²。最常用于回归问题(预测连续值)。惩罚大的误差很重。

  • 平均绝对误差 (MAE): L = 1/N * Σ|ŷ_i - y_i|。也用于回归。对异常值比MSE更鲁棒(不那么敏感)。

  • 交叉熵损失 (Cross-Entropy Loss): 这是分类问题(尤其是多分类)的标准损失函数

    • 二分类交叉熵: L = -[y * log(ŷ) + (1 - y) * log(1 - ŷ)] (y是0或1的真实标签,ŷ是预测为1的概率)。

    • 多分类交叉熵: L = -Σ y_i * log(ŷ_i) (y_i是真实标签的one-hot编码,ŷ_i是模型预测的对应类别的概率)。它衡量预测概率分布与真实概率分布(one-hot)之间的差异。

  • Hinge Loss (合页损失): 常用于支持向量机(SVM)和某些神经网络分类任务,尤其是最大间隔分类。

优化器

它利用损失函数关于模型参数的梯度信息,决定如何调整参数以最小化损失函数

  1. 你构建一个神经网络结构(输入层、隐藏层、输出层,定义神经元和连接)。

  2. 选择一个合适的损失函数来衡量预测的好坏。

  3. 选择一个优化器(如Adam)来指导参数更新的策略。

  4. 将一批数据输入网络,进行前向传播得到预测。

  5. 计算损失

  6. 使用反向传播计算损失函数关于所有权重/偏置(参数)的梯度

  7. 优化器利用这些梯度,按照其特定的更新规则(如Adam的动量+自适应学习率)更新网络参数

  8. 重复步骤4-7。在这个过程中,参数沿着损失函数的负梯度方向逐步调整(梯度下降思想),使得损失不断减小,预测越来越准。激活函数则在每一层的神经元内部施加非线性变换,赋予网络强大的拟合能力。

from gettext import npgettext
from socket import NI_NAMEREQD
import torch
torch.cuda
if torch.cuda.is_available():print("CUDA可用")device_count = torch.cuda.device_count()print(f"CUDA设备数量: {device_count}")curent_device=torch.cuda.current_device()print(f"当前使用的CUDA设备: {curent_device}")device_name = torch.cuda.get_device_name(curent_device)print(f"当前CUDA设备名称: {device_name}"    )
else:print("CUDA不可用")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(y_train.shape)
print(X_test.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)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 
import torch.nn as nn
import torch.optim as optimclass MLP(nn.Module):def __init__(self):super(MLP,self).__init__()self.fc1 = nn.Linear(4,10)self.relu = nn.ReLU()self.fc2 = nn.Linear(10,3)def forward(self,x):out= self.fc1(x)out = self.relu(out)out = self.fc2(out)return out
model = MLP()criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(),lr=0.01)num_epochs = 20000
losses = []
for epoch in range(num_epochs):outputs = model.forward(X_train)loss= criterion(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('Epoch')
plt.ylable('Loss')
plt.title('Training Loss overe Epochs')
plt.show()

@浙大疏锦行

http://www.xdnf.cn/news/1052929.html

相关文章:

  • 【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
  • Windows平台轻量级图片处理工具实测:功能与体验分享
  • 「Matplotlib 入门指南」 Python 数据可视化分析【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • 前端面试九之Vue Router
  • 【Qt 中的元对象系统(Meta-Object System)】
  • 洛谷 P3865 【模板】ST 表 RMQ 问题
  • 基于OpenManus的跨平台部署方案及远程访问安全机制
  • 李宏毅2025《机器学习》第二讲-深度解构AI Agent:让大型语言模型学会记忆、使用工具与制定计划
  • LeetCode 2389.和有限的最长子序列
  • libuv 框架
  • RabbitMQ死信队列
  • 【测开面试题】八股文总结
  • 快速上手文本向量模型 Sentence-Transformers
  • Java正则分组:高效捕获与引用技巧
  • InnoDB的undo日志的数据结构
  • 从0开始学习R语言--Day24--稀疏建模
  • 基于MSE-Nacos实现服务的动态发现和配置动态管理
  • 车载软件架构 --- 汽车中央控制单元HPC软件架构方案实例
  • 生成对抗网络(GANs)入门介绍指南:让AI学会“创造“的魔法(一)
  • 已知路由表和分组的目的地址求对应的下一跳地址
  • 一阶偏微分方程特征线与解分析
  • C#最佳实践:为何应减少嵌套
  • JavaScript学习笔记
  • java基础面试题。
  • 信息学奥赛一本通 1541:【例 1】数列区间最大值
  • C# 枚举(位标志)
  • FastAPI-MCP构建自定义MCP工具实操指南
  • 敏捷开发的特点
  • 【计算机 电脑任务管理器中,性能界面的各项指标的含义及影响】
  • idea2024使用卡顿