pytorch学习笔记5--pytorch基本运算2

龙良曲pytorch基础课程学习笔记 什么是Pytorch? PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可以利用 GPU 的性能进行计算 深度学习研究平台拥有足够的灵活性和速度 开始学习 tensor对象 在 TensorFlow 中,数据不是以整数,浮点数或者字符串形式存在的,而是被封装在一个叫做 tensor 的对象中。Tensor是张量的意思,张量包含了0到任意维度的量... 阅读详情

感知机的梯度推导

单输出单层感知机

y = X W + b y = XW+b y=XW+b
y = ∑ x i ∗ w i + b y = \sum{x_i * w_i + b} y=∑xi​∗wi​+b
其数学模型如下:
在这里插入图片描述
E = 1 / 2 ( o 0 1 − t ) 2 E=1/2(o_0^1-t)^2 E=1/2(o01​−t)2
求导
δ E δ w j 0 = ( O 0 − t ) δ o 0 δ w j 0 \frac{\delta E}{\delta w_{j0}}=(O_0 -t) \frac{\delta o_0}{\delta w_{j0}} δwj0​δE​=(O0​−t)δwj0​δo0​​
δ E δ w j 0 = ( O 0 − t ) δ σ ( x 0 ) δ w j 0 \frac{\delta E}{\delta w_{j0}}=(O_0 -t) \frac{\delta \sigma_(x_0)}{\delta w_{j0}} δwj0​δE​=(O0​−t)δwj0​δσ(​x0​)​
δ E δ w j 0 = ( O 0 − t ) σ ( x 0 ) ( 1 − σ ( x 0 ) ) δ σ ( x 0 ) δ w j 0 \frac{\delta E}{\delta w_{j0}}=(O_0 -t) \sigma (x_0) (1-\sigma (x_0))\frac{\delta \sigma_(x_0)}{\delta w_{j0}} δwj0​δE​=(O0​−t)σ(x0​)(1−σ(x0​))δwj0​δσ(​x0​)​
因为:
δ x 0 = δ ∑ w j 0 x j \delta x_0 = \delta \sum w_{j0}x_j δx0​=δ∑wj0​xj​
所以:
δ x 0 1 δ w j 0 = δ ∑ w j 0 x j δ w j 0 = x j 0 \frac{\delta x^1_0}{\delta w_{j0}} = \frac{\delta \sum w_{j0}x_j}{\delta w_{j0}}=x^0_j δwj0​δx01​​=δwj0​δ∑wj0​xj​​=xj0​
所以:
δ E δ w j 0 = ( O 0 − t ) O 0 ( 1 − O 0 ) x j 0 \frac{\delta E}{\delta w_{j0}} = (O_0-t) O_0 (1-O_0)x_j^0 δwj0​δE​=(O0​−t)O0​(1−O0​)xj0​
代码:

x = torch.randn(1,10)
w = torch.randn(1,10,requires_grad = True)
o = torch.sigmoid(x@w.t())

o.shape
:torch.Size([1, 1])
loss = F.mse_loss(torch.ones(1,1),o)
loss.shape
:torch.Size([])
loss.backward()
w.grad
:tensor([[-0.0205,  0.0368,  0.0105,  0.0322,  0.1399, -0.0305,  0.0874, -0.2148,-0.0203, -0.0015]])
多输出感知机梯度推导

[外链图片转存失败(img-VMuhXzbo-1563931424935)(evernotecid://81F77541-86B7-45D2-9235-B4CFA95FC507/wwwevernotecom/147511744/ENResource/p1110)]
E = 1 / 2 ∑ ( O i 1 − t i ) 2 E = 1/2 \sum{(O_i^1 - t_i)^2} E=1/2∑(Oi1​−ti​)2
其求导过程如下:
δ E δ w j k = ( O k − t k ) δ O k δ w j k \frac{\delta E}{\delta w_{jk}} = (O_k - t_k)\frac{\delta O_k}{\delta w_{jk}} δwjk​δE​=(Ok​−tk​)δwjk​δOk​​
δ E δ w j k = ( O k − t k ) δ σ ( x k ) δ w j k \frac{\delta E}{\delta w_{jk}} =(O_k - t_k)\frac{\delta \sigma(x_k)}{\delta w_{jk}} δwjk​δE​=(Ok​−tk​)δwjk​δσ(xk​)​
δ E δ w j k = ( O K − t k ) σ ( x k ) ( 1 − σ ( x k ) ) δ x k 1 δ w j k \frac{\delta E}{\delta w_{jk}} = (O_K -t_k)\sigma (x_k)(1-\sigma (x_k))\frac{\delta x_k^1}{\delta w_{jk}} δwjk​δE​=(OK​−tk​)σ(xk​)(1−σ(xk​))δwjk​δxk1​​
δ E δ w j k = ( O K − t k ) O k ( 1 − O k ) δ x k 1 δ w j k \frac{\delta E}{\delta w_{jk}} = (O_K -t_k)O_k(1-O_k)\frac{\delta x_k^1}{\delta w_{jk}} δwjk​δE​=(OK​−tk​)Ok​(1−Ok​)δwjk​δxk1​​
δ E δ w j k = ( O K − t k ) O k ( 1 − O k ) x j 0 \frac{\delta E}{\delta w_{jk}} = (O_K -t_k)O_k (1-O_k) x_j^0 δwjk​δE​=(OK​−tk​)Ok​(1−Ok​)xj0​
代码:

x = torch.randn(1,10)
w = torch.randn(2,10,requires_grad = True)
o = torch.sigmoid(x@w.t())
o.shape
:torch.Size([1, 2])
loss = F.mse_loss(torch.ones(1,1),o)
loss
:tensor(0.0029, grad_fn=<MeanBackward1>)
loss.backward()
w.grad
:tensor([[ 0.0063,  0.0020, -0.0049, -0.0045,  0.0012,  0.0048, -0.0027,  0.0088, 0.0089,  0.0056],
        [ 0.0016,  0.0005, -0.0012, -0.0011,  0.0003,  0.0012, -0.0007,  0.0022,0.0022,  0.0014]])

链式法则

验证链式法则代码:

x = torch.tensor(1.)
w1 = torch.tensor(2. , requires_grad=True)
b1 = torch.tensor(1.)
w2 = torch.tensor(2.,requires_grad=True)
b2 = torch.tensor(1.)
y1 = x*w1+b1
y2 = y1*w2 +b2
dy2_dy1 = autograd.grad(y2, [y1], retain_graph=True)[0]
dy1_dw1 = autograd.grad(y1,[w1],retain_graph=True)[0]
dy2_dw1 = autograd.grad(y2,[w1],retain_graph=True)[0]
dy2_dy1*dy1_dw1
:tensor(2.)
dy2_dw1
:tensor(2.)

# 所以 dy2_dy1*dy1_dw1 = dy2_dw1

多层感知机反向传播

[外链图片转存失败(img-WckKfaEQ-1563931424935)(evernotecid://81F77541-86B7-45D2-9235-B4CFA95FC507/wwwevernotecom/147511744/ENResource/p1111)]
由 δ E δ w j k = ( O k − t k ) O k ( 1 − O k ) x j 0 \frac{\delta E}{\delta w_{jk}} = (O_k-t_k)O_k(1-O_k)x_j^0 δwjk​δE​=(Ok​−tk​)Ok​(1−Ok​)xj0​易知:
δ E δ w j k = ( O k − t k ) O k ( 1 − O k ) O j J \frac{\delta E}{\delta w_{jk}} = (O_k-t_k)O_k(1-O_k)O_j^J δwjk​δE​=(Ok​−tk​)Ok​(1−Ok​)OjJ​

for an output layer node k ∈ K k \in K k∈K
δ E δ W j k = O j δ k \frac{\delta E}{\delta W_{jk}} = O_j \delta_k δWjk​δE​=Oj​δk​
where
δ k = O k ( 1 − O k ) ( O k − t k ) \delta_k = O_k(1-O_k)(O_k-t_k) δk​=Ok​(1−Ok​)(Ok​−tk​)

for a hidden layer node j ∈ J j \in J j∈J
δ E δ W i j = O i δ j \frac{\delta E}{\delta W_{ij}} = O_i \delta_j δWij​δE​=Oi​δj​
where
δ j = O j ( 1 − O j ) ∑ k ∈ K w j k \delta_j = O_j(1-O_j)\sum_{k \in K}{w_{jk}} δj​=Oj​(1−Oj​)k∈K∑​wjk​

Logistic regression

for regression

  • goal : pred = y
  • approach : minimize dist(pred,y)

for classification

  • goal : maximize benchmark, eg.accuracy
  • approach1 : minimize dist( p θ ( y ∣ x ) , p r ( y ∣ x ) p_\theta(y|x),p_r(y|x) pθ​(y∣x),pr​(y∣x))
  • approach2 : minimize divergence(p_\theta(y|x),p_r(y|x))
Q1: why not maximize accuracy?
  • a c c . = ∑ I ( p r e d i = = y i ) l e n ( Y ) acc. = \frac{\sum I(pred_i == y_i)}{len(Y)} acc.=len(Y)∑I(predi​==yi​)​
  • issues 1: gradient = 0 if accuracy unchanged but weights changed
  • issues 2: gradient not continuous since the number of correct is not continuous
Q2 : why call logistic regression
  • MSE => regression
  • Cross Entropy => classification
softmax

p i = e a i ∑ k = 1 N e a k p_i = \frac{e^{a_i}}{\sum_{k=1}^N e^{a_k}} pi​=∑k=1N​eak​eai​​

enlarger the larger

交叉熵

Entropy

E n t r o p y = − ∑ P ( i ) l o g P ( i ) Entropy = -\sum P(i)logP(i) Entropy=−∑P(i)logP(i)

a = torch.full([4],1/4)
-(a*torch.log2(a)).sum()
:tensor(2.)
a = torch.tensor([0.1,0.1,0.1,0.7])
-(a*torch.log2(a)).sum()
:tensor(1.3568)
a = torch.tensor([0.001,0.001,0.001,0.999])
-(a*torch.log2(a)).sum()
:tensor(0.0313)

值越小越混乱,值越大越稳定

Cross Entropy

H ( p , q ) = ∑ p ( x ) l o g ( q ( x ) ) H(p,q) = \sum {p(x)log(q(x))} H(p,q)=∑p(x)log(q(x))
H ( p , q ) = H ( p ) + D k l ( p ∣ q ) H(p,q) = H(p) + D_{kl}(p|q) H(p,q)=H(p)+Dkl​(p∣q)
对于 D k l ( p l q ) D_{kl}(plq) Dkl​(plq),p与q越相似,值越接近于0,与熵相反。

  1. p=q
    1. cross entropy = entropy
  2. for one-hot encoding
    1. entropy = 1 log 1 = 0
x = torch.randn(1,784)
w = torch.randn(10,784)
logits = x@w.t()
pred = F.softmax(logits,dim=1)
pred_log=torch.log(pred)
F.cross_entropy(logits,torch.tensor([3]))
:tensor(49.0920)
F.nll_loss(pred_log,torch.tensor([3]))
:tensor(49.0920)

cross entropy = softmax + log + nll_loss

对于分类问题为什么不用MSE
  1. sigmoid+MSE:gradient vanish
  2. converge slower
softmax 和 sigmoid?
  1. softmax
    1. σ ( z ) j = e z j ∑ k = 1 K e z k \sigma(z)_j = \frac{e^{z_j}}{\sum_{k=1}^K e^{z_k}} σ(z)j​=∑k=1K​ezk​ezj​​
  2. sigmoid
    1. S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}} S(x)=1+e−x1​
    2. 在这里插入图片描述

多分类

w1, b1 = torch.randn(200,784,requires_grad=True),torch.zeros(200,requires_grad=True)
w2, b2 = torch.randn(200,200,requires_grad=True),torch.zeros(200,requires_grad=True)
w3, b3 = torch.randn(10,200,requires_grad=True),torch.zeros(10,requires_grad=True)

# 如果train损失长时间得不到更新,梯度信息可能接近为0,导致梯度为0的影响因素:1。学习率过大,导致梯度消失 2.初始化问题。
torch.nn.init.kaiming_normal_(w1)
torch.nn.init.kaiming_normal_(w2)
torch.nn.init.kaiming_normal_(w3)

def forward(x):
    x = x@w1.t()+b1
    x = F.relu(x)
    x = x@w2.t()+b2
    x = F.relu(x)
    x = x@w3.t()+b3
    x = F.relu(x)
    return x

optimizer = optim.SGD([w1,b1,w2,b2,w3,b3],lr=1e-3)
criteon = nn.CrossEntropyLoss()

for epoch in range(10):
    for batch_idx,(data,target) in enumerate(train_loader):
        data = data.view(-1,28*28)
        
        logits = forward(data)
        loss = criteon(logits,target)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if batch_idx % 100 = 0:
            print('Train Epoch : {} [{}/{}({:.0f}%)]\tLoss:{:.6f}'.format(epoch,batch_idx*len(data),len(train_loader.dataset),100. * batch_idx / len(train_loader),loss.item()))
            
    
    test_loss = 0
    correct = 0
    for data, target in test_loader:
        data = data.view(-1,28*28)
        logits = forward(data)
        test_loss += criteon(logits,target).item()
        
        pred = logits.data.max(1)[1]
        correct += pred.eq(target.data).sum()
        
        
    test_loss /= len(test_loader.dataset)
    print('\nTest set : Average loss:{:.4f}, Accuracy:{}/{}  ({:.0f})%\n'.format(test_loss,correct,len(test_loader.dataset),100. * batch_idx/len(test_loader),test_loss.item()))

全连接层

代码:

x = torch.randn([1,784])
x.shape
:torch.Size([1, 784])
layer1 = nn.Linear(784,200)
layer2 = nn.Linear(200,200)
layer3 = nn.Linear(200,10)
x = layer1(x)
x.shape
:torch.Size([1, 200])
x = layer2(x)
x.shape
:torch.Size([1, 200])
x = layer3(x)
x.shape
:torch.Size([1,10])
x = torch.randn([1,784])
x.shape
:torch.Size([1, 784])
layer1 = nn.Linear(784,200)
layer2 = nn.Linear(200,200)
layer3 = nn.Linear(200,10)
x = layer1(x)
x = F.relu(x,inplace=True)
x.shape
:torch.Size([1, 200])
x = layer2(x)
x = F.relu(x,inplace=True)
x.shape
:torch.Size([1, 200])
x = layer3(x)
x = F.relu(x,inplace=True)
x.shape
:torch.Size([1,10])
nn.ReLU v.s. F.relu()
  1. class-style API: nn.XXX 大写,必须先实例化再调用,必须通过 .parameters 来访问内部参数(weight,bias)
  2. function-style API:F.xx 小写,可以方便的自己管理tensor,管理运算过程
class MLP(nn.Module):
    def __init__(self):
        super(MLP,self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784,200),
            nn.ReLU(inplace=True),
            nn.Linear(200,200),
            nn.ReLU(inplace=True)
            nn.Linear(200,10)
            nn.ReLU(inplace=True)
            
        )
        
    def forward(self,x):
        x = self.model(x)
        return x
        
net = MLP()
optimizer = optim.SGD(net.parameters(),lr=learning_rate)
criteon = nn.CrossEntropyLoss()

for epoch in range(epochs):
    for batch_idx,(data,target) in enumerate(train_loader):
        data = data.view(-1,28*28)
        
        logits = net(data)
        loss = criteon(logits,target)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

torch.nn 下的几种loss
Cross Entropy Loss

class torch.nn.CrossEntropyLoss(weight=None, size_average=True, ignore_index=-100, reduce=True)[source]

  1. 作用:针对单目标分类问题, 结合了nn.LogSoftmax() 和 nn.NLLLoss() 来计算 loss。用于训练 C 类别classes 的分类问题.
  2. 参数 weight 是 1D Tensor, 分别对应每个类别class 的权重. 对于类别不平衡的训练数据集比较有用 .
  3. 输入input 包含了每一类别的概率或score.
    1. 输入 input Tensor 的大小是 (minibatch,C)或 (minibatch,C,d1,d2,…,dK). K≥2 表示 K-dim 场景.
  4. 输入 target 是类别class 的索引([0,C−1], C是类别classes 总数.)

l o s s ( x , c l a s s ) = − l o g ( e x p ( x [ c l a s s ] ) ∑ j e x p ( x [ j ] ) ) loss(x,class) = -log(\frac{exp(x[class])}{\sum_j exp(x[j])}) loss(x,class)=−log(∑j​exp(x[j])exp(x[class])​)
l o s s ( x , c l a s s ) = − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) ) loss(x,class) = -x[class] + log(\sum_j exp(x[j])) loss(x,class)=−x[class]+log(j∑​exp(x[j]))
带weight的形式
l o s s ( x , c l a s s ) = w e i g h t [ c l a s s ] ( − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) ) ) loss(x,class) = weight[class] (-x[class]+log(\sum_j exp(x[j]))) loss(x,class)=weight[class](−x[class]+log(j∑​exp(x[j])))

参数:

  1. weight(Tensor, optional) - 每个类别class 的权重. 默认为值为 1 的 Tensor.
  2. size_average(bool, optional) – 默认为 True.
    1. size_average=True, 则 losses 在 minibatch 结合 weight 求平均average.
    2. size_average=False, 则losses 在 minibatch 求相加和sum.
    3. 当 reduce=False 时,忽略该参数.
  3. ignore_index(int, optional) - 指定忽略的 target 值, 不影响 input 梯度计算.当 size_average=True, 对所有非忽略的 targets 求平均.
  4. reduce(bool, optional) - 默认为 True.
    1. reduce=True, 则 losses 在 minibatch 求平均或相加和.
    2. reduce=False, 则 losses 返回 per batch 值, 并忽略 size_average.
KLDivLoss
BCELoss
BCEWithLogitsLoss
MultiLabelSoftMarginLoss

激活函数与GPU加速

激活函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GPU accelerated
device = torch.device('cuda:0')
net = MLP().to(device)
optimizer = optim.SGD(net.parameters(),lr = learning_rate)
criteon = nn.CrossEntropyLoss().to(device)

for epoch in range(epochs):
    for batch_idx,(data,target) in enumerate(train_loader):
        data = data.view(-1,28*28)
        data, target = data.to(device),target.to(device)

测试

在这里插入图片描述

logits = torch.rand(4,10)
logits.argmax(dim=1)
:tensor([2, 3, 7, 6])

pred = F.softmax(logits,dim=1)
pred_label = pred.argmax(dim=1)
pred_label
:tensor([2, 3, 7, 6])
# 可见经过softmax之后,argmax的值不变
label  = torch.tensor([9,3,2,4])
correct = torch.eq(pred_label,label)
correct
:tensor([0, 1, 0, 0], dtype=torch.uint8)
acc = correct.sum().float().item()/4
acc
:0.25

可视化visdom

  1. 安装visdom:pip install visdom
  2. 开启监听:python -m visdom.server
  3. 如果遇到404 建议卸载重装,从源文件安装。
    1. pip uninstall visdom
    2. 从github官方网页上下载最新代码
    3. cd visdom-master --> pip install -e .
使用visdom
单曲线
from visdom import Visdom
viz = Visdom()
# 创建一条直线 [0.]表示y [1.] 表示x win代表小窗口,‘train_loss’是ID   env 表示大窗口默认是main
viz.Line([0.],[1.],win='train_loss',opts=dict(title='train loss'))
viz.line([loss.item()],
# 注意使用append把曲线添加进去
[global_step],win='train_loss',update='append')
多条曲线
from visdom import Visdom
viz = Visdom()
# [[0.0,0.0]代表y1,y2 legend=['loss','acc.'] loss代表y1,acc. 代表y2
viz.line([[0.0,0.0]],[0.],win='test',opts=dict(title='test loss&acc .',legend=['loss','acc.']))
viz.line([[test_loss,correct / len(test_loader.dataset)]],[global_step],win='test',update='append')
可视化图片
from visdom import Visdom
viz = Visdom()
# 显示图片(可以直接使用tensor)
viz.images(data.view(-1,1,28,28),win='x')
# 显示对应标签
viz.text(str(pred.detach().cpu.numpy()),win='pred',opts=dict(title='pred'))
PyTorch学习笔记(一)Tensor运算 PyToch学习笔记,记录了张量的运算和求梯度的方法。 阅读详情

相关推荐

告别反复刷写:用英飞凌XCP Overlay功能实现ECU标定与诊断的‘热更新’

本文详细介绍了英飞凌XCP Overlay功能在ECU标定与诊断中的应用,实现参数的'热更新',避免反复刷写Flash。通过地址重映射技术,将标定变量从Flash重定向到RAM,显著提升工作效率并保护Flash寿命。文章涵盖技术原理、工程实践、功能安全考量及高级应用场景,为汽车电子工程师提供完整解决方案。

weixin_30689307的博客 533

Python入门(1)——变量、运算符、数据类型

Python入门(上) 简介 变量、运算符与数据类型1. 注释2. 运算符3. 变量和赋值4. 数据类型与转换5. print()函数 位运算1. 原码、反码和补码2. 按位运算3. 利用位运算实现快速计算4. 利用位运算实现整数集合 简介: Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。 变量

God58991的博客 761

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 314

深度学习关于NLLLoss损失的数学向个人详解

就得减小,根据其图像可知,随着其减小,softmax(x)的值必然增大。由于网络在这个过程中输出的其实就是加了softmax激活函数的softmax(x),就能理解为,训练网络降低NLLLoss的过程中,网络计算出的样本属于其类的概率值越趋近于1。"" 然后就是对softmax的结果取对数,做log运算,再接着就是假设标签是[0, 1, 2],第一行取第0个元素,第二行取第1个,第三行取第2个,去掉负号,即[0.3168, 3.3093, 0.4701], 求平均值,就可以得到损失值。

Axh1ne的博客 2959

BIOS硬件监控实战:如何手动读取IT8738芯片的温度与风扇数据(附代码)

本文深入探讨了如何绕过操作系统和HWMonitor等监控软件,直接通过寄存器级操作读取IT8738超级I/O芯片的硬件监控数据。文章提供了从动态定位EC空间、构建底层读写函数到解码传感器寄存器映射的完整实战指南,并附有C语言代码示例,帮助开发者理解BIOS硬件监控的底层原理,适用于定制硬件开发与故障诊断。

weixin_29192211的博客 110

【学习笔记】计算机网络 第八章 无线局域网(WLAN)

计算机网络 第八章 无线局域网(WLAN)

Vera_shsf的博客 1244

深度学习pytorch——多分类问题(持续更新)

1、回归问题的目标是使预测值等于真实值,即pred=y。2、求解回归问题的方法是使预测值和真实值的误差最小,即minimize dist(pred,y),一般我们通过求其2-范数,再平方得到它的最小值,也可以直接使用1-范数。

2201_76139143的博客 2253

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5996

Pytorch入门教程(六):梯度相关

1. 常用激活函数 Sigmoid函数:将输出转化为0-1之间 Tanh函数:将输出转化为-1到1 Relu函数: 2. 激活函数梯度计算 import torch from torch.nn import functional as F x = torch.ones(1) w = torch.full([1], 2) w.requires_grad_() # ...

小明同学 706

【华为OD技术面试手撕真题】1、长度最小的子数组 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(三种解法)

【华为OD面试手撕真题】长度最小的子数组,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 1万+

深入RKNN Toolkit2:自定义算子与内存优化秘籍

本文系统探讨了RKNNToolkit2在模型转换中的关键技术与优化策略。首先介绍了该工具包的基础功能及模型转换流程,重点阐述了自定义算子的实现方法,包括算子分析、代码编写和注册集成等步骤,并以ReduceLogSumExp算子为例进行案例分析。在内存优化方面,详细论述了模型量化、内存复用和参数配置等策略,通过具体案例展示优化效果。最后结合智能安防项目实践,分享了YOLOv5模型部署经验及问题解决方案。文章指出,随着AI技术发展,RKNNToolkit2将在算子支持、量化技术和硬件适配等方面持续优化,为边缘计

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1390

pytorch中visdom可视化使用

7、神经网络的全连接 损失函数 为何要设定损失函数? 我们想获得的是能提高识别精度的参数,特意再导入一个损失函数。 为了找到使损失函数的值尽可能小的地方,需要计算参数的导数(确切地讲是梯度),然后以这个导数为指引,逐步更新参数的值。 之所以不能用识别精度作为指标,是因为这样一来绝大多数地方的导数都会变为0,导致参数无法更新。 总结:在进行神经网络的学习时,不能将识别精度作为指标。因为如果以 识别精度为指标,则参数的导数在绝大多数地方都会变为0。 举例子,假设某个神经网络正确识别出了100笔训练数据中的32笔

爱听许嵩歌的博客 941

建行报专版报道建设银行金融科技发展历程

经过十多年的建设,总行前中后台部门都有了自己的业务系统,但系统“部门”特征显著,渠道、客户、产品的横向整合不足,产品系统层次化、结构化、参数化程度不高,渠道支持产品快速部署以及跨渠道服务能力不足,管理分析类系统建设相对滞后,系统较弱的可扩展能力在应对高速增长的交易量时已疲态尽显,同时安全稳定运行的压力和风险日益积聚。站在新的历史起点上,科技条线将聚焦主责主业,完善信息科技管理体系,紧紧围绕安全生产中心任务,持续推动技术能力复用共享和自主可控,为全行做好金融五篇大文章,推动业务高质量发展提供技术支撑。

银行信息系统应用架构详解 386

Pytorch Tensor基本数学运算

1. 加法运算 示例代码: import torch # 这两个Tensor加减乘除会对b自动进行Broadcasting a = torch.rand(3, 4) b = torch.rand(4) c1 = a + b c2 = torch.add(a, b) print(c1.shape, c2.shape) print(torch.all(torch.eq(c1, c2))) ...

洪流之源 5万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

pytorch学习笔记5--pytorch基本运算

文章目录基本运算add/minus/multiply/dividematmul基本函数统计属性normmean,sum,min,max,prod,argmin,argmaxkthvalue,topk\>,>=,<,<=,!=,==高阶操作(GPU)whereGather梯度lossMean Squared Error(MSE):自动求导:torch.autograd.gra...

code_fighter 博客 6726

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pytorch基本运算-范数

本文介绍了PyTorch中L1和L2范数的计算方法。L2范数计算向量元素平方和的平方根,而L1范数则是向量元素绝对值的总和。文章通过代码示例展示了如何用torch.norm()计算L2范数,用torch.abs().sum()计算L1范数,并扩展到矩阵范数计算。在5×5全1矩阵的案例中验证了计算结果,其中L2范数的平方等于矩阵所有元素平方和,L1范数等于所有元素绝对值之和。这些范数计算在深度学习中具有重要意义。

专注python+工程实践的热心婶子 1328

深度学习|pytorch基本运算

本文介绍了PyTorch的基本运算操作,包括随机张量生成(torch.randn)、多维张量创建(torch.tensor)、张量变形(reshape)、加减运算以及广播机制。文章着重说明各函数的常用参数和使用方法,并通过具体代码示例演示运算效果。作为PyTorch入门指南,本文旨在帮助初学者快速掌握张量基础操作,同时推荐读者参考官方文档深入学习。所有示例代码均附有运行结果截图,直观展示不同运算的实际效果。

专注python+工程实践的热心婶子 1040

Pytorch学习笔记【6】---基本运算

Pytorch学习笔记【6】—基本运算 Pytorch笔记目录:点击进入 文章目录Pytorch学习笔记【6】---基本运算1. Add2. Sub3. mul and div4. matmul5. pow and sqrt6. Exp and log7. Approximation8. round9. clamp 1. Add tensor相加有两种方法效果基本一样 # Add a = torch.rand(3,4) b = torch.rand(4) print(a+b) # or the result

python_LC_nohtyp的博客 1012

pytorch 基本数学运算

pytorch中的运算遵循其Broadcasting规则,这里不详细解释。 目录 1. 矩阵对应位置加减乘除 2. 矩阵相乘 3. 幂运算 3. 指数与对数运算 4. 近似取值(向上取整,向下取整,四舍五入,取小数等) 5. clamp 1. 矩阵对应位置加减乘除 包括add(加),sub(减),mul(乘),div(除),pytorch中重载了加减乘除的运算符...

Defiler_Lee的博客 3258

pytorch入门--矩阵基本运算

本篇pytorch的矩阵基本运算进行展示,包含: add/subtract/multiply/divide matmul pow 次方 sqrt/rsqrt 次方根 近似运算 上下界操作 使用方法和含义均在代码的批注中给出,因为有较多的输出,所以设置输出内容的第一个值为当前print()方法所在的行 矩阵基本运算 import torch import numpy as np import sys loc = sys._getframe() _ = '\n' ''' add/subtract/m

qq_43923588的博客 4536

PyTorch入门2——张量数值运算

梳理介绍张量的各类数值运算,包括:基本运算、点积运算/矩阵乘法、比较运算、逻辑运算、初等函数运算、统计运算以及指定运算设备方法。

1379号程序员的博客 1290

PyTorch API 详细中文文档,基于PyTorch2.5

PyTorch API 详细中文文档,基于PyTorch2.5

扶着老奶奶闯红灯 3433

PyTorch深度学习(二):2. PyTorch的基本运算操作

PyTorch深度学习(二):PyTorch的基本运算操作1. 对数据的基本运算(加减乘除)1.1 加减乘除的几种方法:1.2 取余与取整:1.3 矩阵乘法2.2 定义各类数据(矩阵):2.2.1 生成全为1的矩阵:2.2.2 生成全为0的矩阵:2.2.3 生成0-1之间的随机数矩阵:2.2.4 生成整数类型的随机数矩阵:2.2.5 生成符合正态分布的随机数矩阵:2.3 tensor数据转换:2....

努力上进的小叶 925

Pytorch学习(3):Tensor合并、分割与基本运算

文章目录前言一、合并Cat/Stack1.Cat2.Stack二、分割Split/Chunk1.Split2.Chunk三、基本运算1.加减乘除2.矩阵乘法mm/@/matmul3.幂运算**4.指数exp/对数log5.近似floor/ceil/round/trunc/frac6.裁剪(归化)clamp总结 前言 Pytorch学习笔记第三篇,关于Tensor的合并(cat/stack)、分割(split/chunk)与基本运算。 一、合并Cat/Stack 1.Cat Tensor中cat是co..

Leafing_的博客 6214

PyTorch张量运算

本文介绍PyTorch张量运算

诸神缄默不语的博客 1803

【Pytorch基础】Pytorch的基本运算操作

  Pytorch跟Python一样都是一种编程语言,只不过Pytorch可以在GPU中进行计算。简单理解的话,就是这个区别吧。至于如何学习Pytorch,个人 觉得完全可以类比,Python两者语法跟用法没有太大差异。再者,为什么学习Pytorch基本计算,而不是用Python基本计算代替再转成tensor格式。个人在代码实现中的体会是:太麻烦,因为Pytorch默认创建变量的类型是float32,使用Python的数据类型如array是float64,如果进行tensor的转换后在计算会报错,变量类型不

sxl的博客 2080
上一篇: Git & Github
下一篇: pytorch学习笔记6--过拟合,交叉验证,正则化
jeffery0628
博客等级 码龄11年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值