CV入门笔记1——李沐手动深度学习08线性回归从零开始,代码注释

跟着李老师敲了一遍代码,结合评论和弹幕的各位dl,对代码进行了初学者水平的注释,跑出来的最简单的线性回归模型。当然这个就是面对和我一样刚入门的小白,对于python也可以说是零基础,非常非常非常通俗了。

如有错误欢迎指正。print就是最有用的代码(bushi

基础优化算法最常见:梯度下降 梯度下降的cost很大,故步长不能太短,步长是超参数hyperparameter,自己设置

最常见:小批量梯度下降mini-batch 随机取b个样本来近似损失,因为损失是所有样本的平均值 b 是batch size,是超参数

代码开始,先import

%matplotlib inline 
import random
# import os;os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" # jupyter运行d2l内核挂掉解决方法
import torch
from d2l import torch as d2l

构造人造数据集,带有噪声的线性模型 w = [2,-3.4]T b=4.2和噪声c

这里我print了很多数据,有助于理解维度

首先对dataset有一个理解。

这里的def 了synthetic_data函数,他的返回值X存到了features里,y存到了labels里。

X是1000*2的二维张量,这里1000指1000个样本,2指每个样本的特征数量,这个矩阵的每个值,都表示X中某个样本的某个特征值。

y是1000*1的一维列向量,表示每个样本的真实回归值。

这里的回归模型就是特征值乘以权重加上偏置,最后再加一个噪声是为了让数据更加复杂。

def synthetic_data(w, b, num_examples): # 生成 y = Xw + b + 噪声 y就是label,X 是特征组成的矩阵
    X = torch.normal(0,1,(num_examples,len(w))) 
    # X是随机数,均值为0,方差为1,列是w长度,行是num_sample长度
    print('X',X.shape) # X是1000行2列的二维张量,指1000个样本,两个特征
    # print(X)
    print('w',w.shape)
    y = torch.matmul(X,w)+b # Xw
    print('y',y.shape)
    y += torch.normal(0, 0.01, y.shape) # 加噪音,均值为0,方差为1
    #print('label:', y)
    return X, y.reshape((-1,1)) 
    # reshape(-1,1) 指把所有元素排成一个单列元素,-1代表y里的所有元素,等于reshape((n,1))

true_w = torch.tensor([2,-3.4]) # w是权重,是两个特征分别的权重
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)  # 生成特征和标签 1000个样本                                                                                                 

features和labels的每一个数据都可以被访问,这里print他们的值,[]中表示行数

print('features:',features[999,1],'\nlabel:',labels[999])

这里plot一下散点图,可以看出两个特征值关于回归值的正负相关

d2l.set_figsize()
d2l.plt.scatter(features[:, 1].detach().numpy(), # 特征的第一列 detach分离出数值,不再含有梯度
                labels.detach().numpy(), 1); # 最后一个1绘制点直径大小
d2l.plt.scatter(features[:, 0].detach().numpy(), # 特征的第一列 detach分离出数值,不再含有梯度
                labels.detach().numpy(), 1); # 最后一个1绘制点直径大小

定义data_iter函数,批量大小,特征矩阵(特征值组成的矩阵),标签向量 作为输入。

生成大小为batch_size的批量,这里如果不懂,就全print出来,print出来立马明白

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好!以下是一个示例代码,用于进行深度学习模型的微调(fine-tuning): ```python import torch import torchvision # 加载预训练模型 model = torchvision.models.resnet18(pretrained=True) # 冻结所有参数 for param in model.parameters(): param.requires_grad = False # 替换全连接层 num_features = model.fc.in_features model.fc = torch.nn.Linear(num_features, num_classes) # 定义损失函数和优化器 criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9) # 加载数据集 train_dataset = torchvision.datasets.ImageFolder('path/to/train/dataset', transform=...) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) # 训练模型 model.train() for epoch in range(num_epochs): for images, labels in train_loader: optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() # 保存微调后的模型 torch.save(model.state_dict(), 'fine_tuned_model.pth') ``` 这是一个简单的示例代码,你可以根据自己的需求进行微调。你需要替换代码中的`path/to/train/dataset`为你自己的训练数据集的路径,并根据你的数据集进行相应的数据预处理操作。 当然,这只是一个基本的示例,实际的微调过程可能还需要考虑其他因素,如学习率调整、数据增强等。具体的微调策略会根据你的任务和数据集的特点而有所不同。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值