【花书笔记|PyTorch版】手动学深度学习4: 线性神经模型:代码部分(上)

本文介绍了使用PyTorch从零开始实现线性回归的步骤,包括数据矢量化加速、正态分布的实现和可视化、线性回归的初始化、模型定义、损失函数和优化算法的详细过程。通过逐步讲解和代码示例,帮助读者理解深度学习中线性模型的基本构建和训练过程。
摘要由CSDN通过智能技术生成

2022.10.6 李沐花书:3 线性神经模型:代码部分(上)
保姆试批注

3.1.2 矢量化加速

目的就是产品,数据矢量化计算,比用循环,运行效率大大提高·

%matplotlib inline

# 这个是matplotlib在jupyter用的插件
import math
import time
import numpy as np
import torch

# 这个包是李沐老师自己的包
from d2l import torch as d2l
n = 10000
# 一万个数,我们将a,b分别变成1万个1的张量
a = torch.ones(n)
b = torch.ones(n)
print("a",a)
a.type()

a tensor([1., 1., 1., …, 1., 1., 1.])

‘torch.FloatTensor’

# 定义一个计时器Timer:
# 注释#@save是一个特殊的标记,会将对应的函数、类或语句保存在d2l包中。 因此,以后无须重新定义就可以直接调用它们(例如,d2l.use_svg_display())
class Timer:  #@save
    """记录多次运行时间"""
    #Timer函数 定义了 两个内容:一个是记录时间的 列表;一个start函数
    def __init__(self):
        self.times = []
        self.start()
        
        
    # start函数:调用了时间函数time(),记录开始的时间
    def start(self):
        """启动计时器"""
        self.tik = time.time()

    
    # 调用时间函数,减去开始时间,并记录在列列表中
    def stop(self):
        """停止计时器并将时间记录在列表中"""
        self.times.append(time.time() - self.tik)
        return self.times[-1]

    def avg(self):
        """返回平均时间"""
        return sum(self.times) / len(self.times)

    def sum(self):
        """返回时间总和"""
        return sum(self.times)

    def cumsum(self):
        """返回累计时间"""
        return np.array(self.times).cumsum().tolist()

https://blog.csdn.net/Acrab_Chogori/article/details/125786517

# n=10000个0的张量
# 用for循环 计算 两个10000维张量的相加的时间
c = torch.zeros(n)
timer = Timer()
for i in range(n):
    c[i] = a[i] + b[i]
f'{
     timer.stop():.5f} sec'

‘0.11368 sec’

# 直接矢量化计算
timer.start()
d = a + b
print(d)
f'{
     timer.stop():.5f} sec'

tensor([2., 2., 2., …, 2., 2., 2.])

‘0.00104 sec’

3.1.3 正态分布实现和可视化

本部分内容就是让读者了解一下 正态分布,可视化咋实现的 了解一下即可

# 正态分布函数:输入x ,mu是均值,sigma是方差 输出就是来率密度函数
def normal(x, mu, sigma):
    p = 1 / math.sqrt(2 * math.pi * sigma**2)
    return p * np.exp(-0.5 / sigma**2 * (x - mu)**2)
# 再次使用numpy进行可视化
# 这个就是想取值 从-7到7每0.01取一个值
x = np.arange(-7, 7, 0.01)

# 均值和标准差对
params = [(0, 1), (0, 2), (3, 1)]


# d2l.plot()描绘了图像:xlabel:x轴叫啥名; figsize是图像尺寸;legend是标签 左上角那块白的
# mean 是均值 std是方差
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
         ylabel='p(x)', figsize
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

羊老羊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值