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

深度学习第三章,线性表示

#模型就是函数 #李哥样例:(我的分部解析) import torch import matplotlib.pyplot as plt # 画图的包 import random #随机 def create_data(w, b, data_num): #生成数据 x = torch.normal(0, 1, (data_num, len(w))) # torch.normal 函数用于正态分布 y = torch.matmul(x, w) + b #matmul表示矩阵相乘 noise = torch.normal(0, 0.01, y.shape) #噪声要加到y上 y += noise #设置噪声 return x, y num = 500 true_w = torch.tensor([8.1,2,2,4]) #创建张量 true_b = torch.tensor(1.1) #创建张量的好处:PyTorch中的张量支持多种操作,包括转置、索引、切片、数学运算、线性代数和随机数生成等。这些操作使得张量成为处理和变换数据的强大工具 X, Y = create_data(true_w, true_b, num) #X通过正态分布,Y通过线性组合 plt.scatter(X[:, 3], Y, 1)#绘图 plt.show() def data_provider(data, label, batchsize): #每次访问这个函数, 就能提供一批数据 length = len(label) indices = list(range(length))#创建一张从 0到 length - 1的连续整数列表 #我不能按顺序取 把数据打乱 random.shuffle(indices)#打乱顺序 for each in range(0, length, batchsize): get_indices = indices[each: each+batchsize] get_data = data[get_indices] get_label = label[get_indices] yield get_data,get_label #有存档点的return batchsize = 16 # for batch_x, batch_y in data_provider(X, Y, batchsize): # print(batch_x, batch_y) # break def fun(x, w, b): #实现简单的线性变换,基于输入的张量x\权重w和偏置b计算预测值 pred_y = torch.matmul(x, w) + b return pred_y def maeLoss(pre_y, y): #损失函数 return torch.sum(abs(pre_y-y))/len(y) def sgd(paras, lr): #随机梯度下降,更新参数 with torch.no_grad(): #属于这句代码的部分,不计算梯度 for para in paras: para -= para.grad * lr #不能写成 para = para - para.grad*lr para.grad.zero_() #使用过的梯度,归0 lr = 0.03 w_0 = torch.normal(0, 0.01, true_w.shape, requires_grad=True) #这个w需要计算梯度(参数1:均值,参数2:标准差,参数3:张量形状,参数4:是否启动微分机制) b_0 = torch.tensor(0.01, requires_grad=True) print(w_0, b_0) epochs = 50 for epoch in range(epochs): #机器学习训练循环 epochs是训练的总轮数 data_loss = 0##初始化一个变量 data_loss,用于累积当前 epoch 中所 有批次(batch)的损失值。目的是计算整个 epoch 的平均或总损失,用于评估训练效果。 for batch_x, batch_y in data_provider(X, Y, batchsize): #内层循环,从 data_provider 函数获取训练数据的批次(mini-batch)。data_provider 是一个自定义的数据迭代器或生成器,每次返回一个批次的输入数据 batch_x 和对应标签 batch_y。X, Y 是完整的训练数据和标签。 batchsize 是批次大小,比如 32 或 64,表示每次训练多少条数据。 pred_y = fun(batch_x,w_0, b_0)#调用模型函数 fun进行前向计算 loss = maeLoss(pred_y, batch_y)#计算预测值 pred_y 和真实标签 batch_y 之间的损失。 loss.backward()#执行反向传播,自动计算损失函数相对于模型参数的梯度 sgd([w_0, b_0], lr)#调用自定义的随机梯度下降(SGD)优化函数,利用计算好的梯度更新模型参数 data_loss += loss print("epoch %03d: loss: %.6f"%(epoch, data_loss))#格式化 print("真实的函数值是", true_w, true_b) print("训练得到的参数值是", w_0, b_0) idx = 3 plt.plot(X[:, idx].detach().numpy(), X[:, idx].detach().numpy()*w_0[idx].detach().numpy()+b_0.detach().numpy()) plt.scatter(X[:, idx], Y, 1) plt.show() #一定注意维度一般维度不错就不会错

同学们尽量理解该部分每一行代码,过段时间进行知识回顾

训练后的结果

http://www.cnnetsun.cn/news/1748867.html

相关文章:

  • 03-Linux网络故障排查:从DNS配置到防火墙设置的全面指南
  • BEVFormer代码复现:从环境配置到数据集链接的完整指南
  • WindowsCleaner系统优化实战指南:从C盘告急到性能重生
  • 基于LabVIEW的纯软件信号发生器功能介绍
  • LOFAR频谱实战:如何用MATLAB精准提取水下目标的‘声学指纹’?
  • 暗数据:智能体探索世界的下一步
  • 从一根线开始省钱:IO-LINK如何帮你简化自动化项目布线(附主流品牌模块选型指南)
  • Shell 脚本编程:从基础逻辑到生产级落地的核心指南
  • 一文吃透抽象类:从概念到实战,新手也能轻松掌握
  • PvZ Toolkit:植物大战僵尸PC版开源修改工具,突破游戏限制的全方位解决方案
  • 网络信息安全相关法律法规
  • 《小而美:持续盈利的经营法则》读书笔记 01|极简主义创业:以独立为锚,以价值为帆
  • Windows系统性能优化全景指南:从诊断到长效管理的科学路径
  • Geist字体:颠覆性开源字体如何重新定义开发者的视觉体验
  • 2026年AI岗位薪资揭秘:高薪背后,门槛与竞争同步飙升!
  • 科研人效率工具:如何用CiteSpace 6.3.R1快速梳理文献,找到你的论文创新点?
  • 基于51单片机的太阳能追光系统设计与仿真:包含光敏控制、电机调速及两种模式的太阳跟踪系统
  • VScode高效开发指南:侧边栏与状态栏的深度解析
  • 基于Transformer-BiGRU 5模型多变量时序预测一键对比 (多输入单输出)附Matlab代码
  • jenkins-持续集成
  • GEE引擎数据库服务器安全加固:如何有效拦截未授权IP连接
  • Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统
  • 手把手教你用Arduino和FastLED库玩转WS2812B彩灯(附完整代码)
  • 基于串口(COM 口)同一时刻只能访问一次的独占特性,结合上文讨论的串口事件驱动编程、异步操作、读写锁和线程同步,本节将重点探讨如何优化串口事件驱动的性能和鲁棒性
  • WithClock 桌面时钟,极致轻量化,鼠标穿透无打扰,自定义皮肤,双模式时钟,打造沉浸式桌面时间体验
  • 【SpringAIAlibaba新手村系列】(12)RAG 检索增强生成技术
  • OBS源独立录制革新:多场景多源控制全攻略
  • [Python3高阶编程] - Gunicorn 源代码阅读二:【总纲】开始阅读代码
  • 如何用PocketBase打造高性能游戏后端:玩家数据管理与实时对战系统全指南
  • 别再手动计数了!巧用AT32F403A的重复计数器,一键生成指定脉冲串