深度学习之PyTorch学习_3.2 线性回归的从零开始实现

本文详细介绍了如何从零开始实现线性回归模型。首先,我们生成了一个包含特征和标签的数据集,然后通过小批量读取数据进行模型训练。接着,我们初始化了模型参数,并定义了损失函数和优化算法。最后,通过多次迭代训练,模型参数逐渐逼近真实值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.2 线性回归的从零开始实现

%matplotlib inline
import torch
from IPython import display
from matplotlib import pyplot as plt
import numpy as np
import random

3.2.1 生成数据集

num_inputs = 2
num_examples = 1000
true_w = [2,-3.4]
true_b = 4.2
features = torch.from_numpy(np.random.normal(0,1,(num_examples,num_inputs)))
labels = true_w[0] * features[:,0] + true_w[1] * features[:,1] + true_b
labels += torch.from_numpy(np.random.normal(0,0.01,size = labels.size()))
print(features[0],labels[0])
tensor([0.6324, 1.5551], dtype=torch.float64) tensor(0.2032, dtype=torch.float64)
def use_svg_display():
#     用矢量图显示
    display.set_matplotlib_formats('svg')
def set_figsize(figsize = (3.5,2.5)):
    use_svg_display()
    # 设置图的尺寸
    plt.rcParams['figure.figsize'] = figsize
set_figsize()
plt.scatter(features[:,1].numpy(),labels.numpy(),1)
<matplotlib.collections.PathCollection at 0x220da1a6ba8>

3.2.2 读取数据

读取小批量数据

def data_iter(batch_size, features, labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    random.shuffle(indices)
    for i in range(0,num_examples,batch_size):
#         print(i)
        j = torch.LongTensor(indices[i:min(i +batch_size,num_examples)])
        yield features.index_select(0,j),labels.index_select(0,j)
batch_size = 10

for X,y in data_iter(batch_size,features,labels):
    print(X,y)
    break
    
tensor([[-1.3137, -1.6132],
        [ 0.1923, -0.4359],
        [-0.7929, -0.4088],
        [ 0.3640, -2.7373],
        [-0.6725,  0.1442],
        [ 0.5874, -0.3863],
        [ 2.2049,  1.3518],
        [-0.2108, -0.6305],
        [-0.2961, -0.4947],
        [ 0.7193,  2.7268]], dtype=torch.float64) tensor([ 7.0628,  6.0627,  3.9909, 14.2296,  2.3753,  6.6761,  4.0003,  5.9209,
         5.3056, -3.6368], dtype=torch.float64)

3.2.3 初始化模型参数

# 初始化 权重 和 偏差
w = torch.tensor(np.random.normal(0, 0.01, (num_inputs,1)),dtype = torch.float64)
b = torch.zeros(1, dtype = torch.float64)
w.requires_grad_(requires_grad = True)
b.requires_grad_(requires_grad = True)
tensor([0.], dtype=torch.float64, requires_grad=True)

3.2.4 定义模型

def linreg(X, w, b):
    return torch.mm(X, w) + b

3.2.5 定义损失函数

def squared_loss(y_hat, y):
    return (y_hat - y.view(y_hat.size())) ** 2 /2

3.2.6 定义优化算法

def sgd(params, lr, batch_size):
    for param in params:
        param.data -= lr * param.grad / batch_size

3.2.7 训练模型

lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss

for epoch in range(num_epochs):
    for X, y in data_iter(batch_size, features,labels):
#         print(X)
#         print(y)
#         print(w)
#         print(net(X, w, b))
        l = loss(net(X, w, b), y).sum() # l 是有关小批量X 和y 的 损失
        l.backward() # 求梯度
        sgd([w,b],lr, batch_size)
        # 梯度清零
        w.grad.data.zero_()
        b.grad.data.zero_()
    train_l = loss(net(features, w, b), labels)
    print('epoch %d, loss %f' % (epoch + 1, train_l.mean().item()))
epoch 1, loss 0.045305
epoch 2, loss 0.000189
epoch 3, loss 0.000052
print(true_w, '\n',w)
print(true_b, '\n',b)
[2, -3.4] 
 tensor([[ 1.9989],
        [-3.4000]], dtype=torch.float64, requires_grad=True)
4.2 
 tensor([4.1998], dtype=torch.float64, requires_grad=True)

【总结】
初步尝试了数据训练 反馈调节 训练后的参数 后续加强

<think>嗯,用户是一个完全不懂计算机语言的小白,想从零开始学习AI,特别是大模型的搭建和训练。首先,我需要理解他的需求。他想从基础开始,逐步深入,最终能够实际操作大模型的搭建和训练。这需要分阶段来设计学习计划。 首先,用户可能对计算机科学的基础知识了解有限,可能需要先补充一些数学和编程基础。数学方面,线性代数、概率统计和微积分应该是重点。不过,用户是小白,可能需要推荐一些入门级的资源,比如直观的教材或在线课程,避免过于理论化的内容。 接下来是编程基础。Python是AI领域的主流语言,所以应该从这里开始。用户可能对编程完全陌生,所以需要推荐适合初学者的教程,比如《笨办法学Python》或在线互动平台,如Codecademy。同时,要强调实践的重要性,鼓励他多写代码,解决实际问题。 然后是机器学习的基础。用户需要先了解基本概念,比如监督学习、无监督学习,以及常见的算法如线性回归、决策树等。吴恩达的课程是个不错的选择,但可能需要一些数学基础,所以得确保用户已经掌握了必要的数学知识后再推荐。同时,实践项目可以帮助巩固理论知识,比如用Scikit-learn实现简单的模型。 深度学习基础部分,用户需要了解神经网络的基本结构、反向传播等概念。这里推荐《深度学习入门》和实战框架如PyTorch。可能需要解释这些框架的优势,以及如何从简单的模型开始构建,比如MNIST手写数字识别。这部分可能会遇到环境配置的问题,所以建议使用Google Colab来避免本地配置的麻烦。 进入大模型专题时,用户需要学习Transformer架构、预训练方法等。论文如《Attention is All You Need》是关键,但对小白来说可能太难,可能需要推荐一些解读文章或视频。Hugging Face的Transformers库是一个很好的工具,但需要一定的编程和深度学习基础,所以前面阶段的基础必须打牢。 最后,项目实战和持续学习部分。用户需要通过实际项目来应用所学知识,比如复现经典论文或参与开源项目。同时,跟踪最新的研究进展,参加社区讨论,保持学习的持续性。 在制定计划时,还要考虑用户的学习节奏和时间安排。建议每天保持2-3小时的学习,每个阶段可能需要1-2个月,整个计划大约需要6-8个月。需要提醒用户保持耐心,避免急于求成,遇到问题及时查阅资料或寻求帮助。 另外,用户可能对某些术语或步骤感到困惑,比如什么是梯度下降,如何安装PyTorch等,需要在每个阶段提供足够的资源和支持。可能还需要推荐一些论坛或社区,如Stack Overflow、知乎,以便用户提问和交流。 总结来说,学习计划需要循序渐进,从基础到应用,逐步构建知识体系,同时强调实践和项目经验,帮助用户从零开始逐步掌握大模型的搭建和训练。</think>以下是为您量身定制的零基础AI大模型学习方案,分5个阶段循序渐进,总周期约6-8个月(根据每日2-3小时学习时间调整): --- ### **阶段一:筑基工程(1-2个月)** #### 1.1 数学基础 - 线性代数:理解$[矩阵运算]$, $[向量空间]$, $[特征值分解]$(推荐《程序员的数学3》) - 概率统计:掌握$P(A|B)=\frac{P(B|A)P(A)}{P(B)}$等贝叶斯公式,概率分布 - 微积分基础:梯度$\nabla f$概念,链式法则$\frac{dz}{dx} = \frac{dz}{dy}\cdot\frac{dy}{dx}$ #### 1.2 编程入门 - Python语法:数据类型、控制流、函数、面向对象(《笨办法学Python》) - 实践工具:Jupyter Notebook基础操作,NumPy矩阵计算$A = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}$ - 环境搭建:Anaconda安装,虚拟环境配置(视频教程辅助) --- ### **阶段二:机器学习启航(2个月)** #### 2.1 理论基础 - 监督学习线性回归$y=wx+b$,决策树,SVM - 无监督学习:K-means聚类,PCA降维 - 评估指标:准确率$\frac{TP+TN}{Total}$,F1-score$2\cdot\frac{Precision\cdot Recall}{Precision+Recall}$ #### 2.2 实战项目 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 完整代码实践... ``` --- ### **阶段三:深度学习突破(2个月)** #### 3.1 神经网络基础 - 前向传播:$a^{[l]} = g(W^{[l]}a^{[l-1]} + b^{[l]})$ - 反向传播:梯度计算$\frac{\partial L}{\partial W} = \delta^{[l]} a^{[l-1]T}$ - CNN/RNN结构:卷积核运算$O_{ij} = \sum_{m}\sum_{n}I_{i+m,j+n}K_{mn}$ #### 3.2 PyTorch实战 ```python import torch model = torch.nn.Sequential( torch.nn.Linear(784, 256), torch.nn.ReLU(), torch.nn.Linear(256, 10) ) # MNIST手写识别完整训练流程... ``` --- ### **阶段四:大模型专题(2-3个月)** #### 4.1 Transformer架构 - 自注意力机制:$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$ - 位置编码:$PE_{(pos,2i)}=sin(pos/10000^{2i/d})$ - 预训练方法:MLM(掩码语言模型),NSP(下一句预测) #### 4.2 实践进阶 - Hugging Face Transformers库使用 - LoRA微调技术:$\Delta W = BA$低秩分解 - 分布式训练:数据并行、模型并行实现 --- ### **阶段五:项目实战与持续提升** #### 5.1 完整项目 1. 复现TinyBERT等轻量级模型 2. 医疗问答系统开发(领域适配) 3. 参与Kaggle LLM竞赛 #### 5.2 学习资源池 - 论文精读:《Attention is All You Need》《BERT》等 - 开源社区:Hugging Face,GitHub trending项目 - 最新动态:arXiv每日推送,AI Conference跟踪 --- ### **学习路线图可视化** ```mermaid gantt title AI大模型学习路线图 dateFormat YYYY-MM-DD section 基础建设 数学基础 :2023-09-01, 60d 编程能力 :2023-09-01, 45d section 核心突破 机器学习 :2023-11-01, 60d 深度学习 :2024-01-01, 60d section 高阶实践 大模型专题 :2024-03-01, 90d ``` **关键提示**: 1. 遇到公式推导困难时,使用3B1B《线性代数的本质》视频辅助理解 2. 每个阶段完成后用kaggle竞赛检验学习成果 3. 加入AI学习社群(推荐fast.ai中文社区) 4. 建议学习节奏:早9-10点理论+晚8-9点代码实践 这个方案遵循"先见森林后见树木"的原则,前期会接触部分高层API快速获得正反馈,中后期逐步深入底层原理。建议保持每周github提交记录,三个月后可尝试参与开源项目贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangxiaobei2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值