注册网站域名平台建设电影网站的关键
2026/4/1 9:49:46 网站建设 项目流程
注册网站域名平台,建设电影网站的关键,做网站获流量,安徽省住房和城乡建设厅门户网站Day 78#xff1a;【99天精通Python】深度学习入门 (PyTorch) 上篇 - 张量与自动求导 前言 欢迎来到第78天#xff01; 从今天开始#xff0c;我们将触及 AI 技术皇冠上的明珠——深度学习 (Deep Learning)。 无论是 ChatGPT、AI 绘画#xff0c;还是自动驾驶#xff0c;它…Day 78【99天精通Python】深度学习入门 (PyTorch) 上篇 - 张量与自动求导前言欢迎来到第78天从今天开始我们将触及 AI 技术皇冠上的明珠——深度学习 (Deep Learning)。无论是 ChatGPT、AI 绘画还是自动驾驶它们背后的核心都是神经网络。而要搭建和训练神经网络我们需要一个趁手的框架。PyTorch是目前学术界和工业界最流行的深度学习框架之一另一个是 TensorFlow。它以动态图机制著称代码写起来就像普通的 Python 代码一样自然、易调试。本节内容PyTorch 安装与环境配置核心数据结构张量 (Tensor)张量 vs NumPy 数组自动求导 (Autograd) 机制线性回归实战手写第一个神经网络一、环境准备推荐安装 CPU 版本学习足够用了。如果你有 NVIDIA 显卡可以安装 CUDA 版本。# 访问 pytorch.org 查看适合你系统的命令pipinstalltorch torchvision验证安装importtorchprint(torch.__version__)print(torch.cuda.is_available())# True 表示可以使用 GPU二、张量 (Tensor)PyTorch 的基石张量本质上就是一个多维数组这和 NumPy 的ndarray非常像。区别在于张量可以运行在 GPU 上且支持自动求导。2.1 创建张量importtorchimportnumpyasnp# 1. 直接创建xtorch.tensor([1,2,3])print(x)# 2. 从 NumPy 创建arrnp.array([[1,2],[3,4]])x_nptorch.from_numpy(arr)# 3. 随机/全0/全1 (API 和 NumPy 几乎一样)randtorch.rand(2,3)# 0-1 均匀分布zerostorch.zeros(2,3)onestorch.ones(2,3)2.2 张量运算xtorch.tensor([10,20,30])ytorch.tensor([1,2,3])# 加减乘除 (Element-wise)print(xy)# tensor([11, 22, 33])print(x*y)# tensor([10, 40, 90])# 矩阵乘法 ( 或 matmul)atorch.tensor([[1,2],[3,4]])btorch.tensor([[5,6],[7,8]])print(a b)# 1*52*719 ...2.3 GPU 加速 (如果有显卡)iftorch.cuda.is_available():devicetorch.device(cuda)xx.to(device)# 把张量搬到显存yy.to(device)zxy# 在 GPU 上计算print(z)# 结果无法直接转 numpy必须先搬回 cpu# print(z.cpu().numpy())三、自动求导 (Autograd)深度学习的核心算法是反向传播 (Backpropagation)即根据误差计算梯度导数从而更新模型参数。PyTorch 的autograd模块帮我们自动完成了这一复杂的微积分过程。3.1 requires_grad# 创建张量并告诉 PyTorch我要对它求导wtorch.tensor([1.0],requires_gradTrue)xtorch.tensor([2.0])btorch.tensor([3.0],requires_gradTrue)# 前向传播 (Forward)构建计算图# y w * x byw*xb# 1*2 3 5# 后向传播 (Backward)自动计算梯度# 计算 dy/dw, dy/dby.backward()# 查看梯度print(w.grad)# dy/dw x 2.0print(b.grad)# dy/db 1.0原理PyTorch 会在后台构建一张动态计算图记录所有的操作历史。调用backward()时它会沿着图反向走一遍算出所有叶子节点w,b的梯度。四、实战手动实现线性回归我们来模拟一个最简单的机器学习任务拟合直线y 2x 5。4.1 准备数据# 生成 100 个数据点# y 2x 5 噪声x_traintorch.rand(100,1)*10# 0-10 之间y_train2*x_train5torch.randn(100,1)*0.5# 加点高斯噪声# 查看前5个print(x_train[:5],y_train[:5])4.2 训练模型我们要训练两个参数w和b让w*x b尽可能接近y_train。# 1. 初始化参数 (随机猜一个)wtorch.randn(1,1,requires_gradTrue)btorch.randn(1,1,requires_gradTrue)learning_rate0.01# 学习率forepochinrange(1000):# 2. 前向传播计算预测值y_predx_train wb# 3. 计算损失 (Loss)均方误差 (MSE)loss(y_pred-y_train).pow(2).mean()# 4. 反向传播计算梯度# 每次 backward 前必须清零梯度否则会累加ifw.gradisnotNone:w.grad.zero_()b.grad.zero_()loss.backward()# 5. 更新参数 (Gradient Descent)# 使用 torch.no_grad()因为更新参数的操作不需要记录进计算图withtorch.no_grad():w-learning_rate*w.grad b-learning_rate*b.gradifepoch%1000:print(fEpoch{epoch}: Loss {loss.item():.4f})print(f训练结果: w{w.item():.2f}, b{b.item():.2f})# 预期接近 w2.00, b5.00五、常见问题Q1为什么要grad.zero_()PyTorch 设计为梯度累加。如果不清零第 2 轮的梯度 第 1 轮梯度 第 2 轮梯度这会导致更新方向错误。Q2with torch.no_grad():是什么在更新参数w - lr * w.grad时这只是一个数值更新操作我们不希望 PyTorch 把它也算作计算图的一部分否则下次 backward 会出错。这也用于推理阶段Inference以节省内存。Q3tensor.item()当张量只包含一个数值时scalar用.item()把它转为 Python 的 float/int。六、小结PyTorch 基础Tensor (张量)Autograd (自动求导)训练流程多维数组支持 GPUrequires_gradTruebackward()tensor.gradForward (算 Loss)Backward (算梯度)Update (减梯度)Zero Grad (清零)关键要点Tensor是深度学习的数据容器。Autograd让反向传播变得自动化。训练循环 4 步走算预测 - 算 Loss - Backward - 更新参数。七、课后作业二次函数拟合修改上面的代码尝试拟合曲线y 3x^2 2x 1。提示你需要三个参数w1, w2, b或者构造特征x^2。GPU 加速体验如果你的电脑有显卡或使用 Colab尝试将张量移动到.to(cuda)上运行对比大数据量下的矩阵乘法速度。手动求导复习一下高数手动计算y w*x b对w的偏导数看看和w.grad的值是不是一样。下节预告Day 79深度学习入门 (PyTorch) 下篇 - 神经网络 (nn.Module)- 手动更新参数太累了。明天我们学习 PyTorch 的高级 API用搭积木的方式构建真正的神经网络系列导航上一篇Day 77 - 计算机视觉OpenCV下一篇Day 79 - 深度学习PyTorch下待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询