动手学深度学习 第二章练习(Pytorch版)

《动手学深度学习》PyTorch版本 本项目对中文版《动手学深度学习》中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的实现方法。为了方便阅读,本项目给出全书PyTorch版的PDF版本。欢迎大家Download,Star,Fork。除了原书内容外,我们还为每一章增加了本章附录,用于对该章节中用到的函数以及数学计算加以说明,除此之外还增加了语义分割网络(U-Net)的实现。 阅读详情

记录一下学习《动手学深度学习》的过程中完成的课后练习以及自己整理的课程相关知识点,部分内容有参考课程讨论区和网上一些大佬的解答。如有错误欢迎指教!

2. 预备知识

2.1 数据操作

小结

  • 深度学习存储和操作数据的主要接口是张量( n n n维数组)。它提供了各种功能,包括基本数学运算、广播、索引、切片、内存节省和转换其他Python对象。

课后练习

  1. 运行本节中的代码。将本节中的条件语句 X == Y 更改为 X < Y 或 X > Y,然后看看你可以得到什么样的张量。
  2. 用其他形状(例如三维张量)替换广播机制中按元素操作的两个张量。结果是否与预期相同?
import torch
import d2l
import numpy as np

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])

print('x > y',x > y,'\nx < y',x < y,'\nx == y',x == y)

运行结果:

x > y tensor([False, False,  True,  True]) 
x < y tensor([ True, False, False, False]) 
x == y tensor([False,  True, False, False])

广播

广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。

  1. 有一方的长度为1
a = torch.arange(12).reshape((3, 4))
b = torch.arange(4).reshape((1, 4))
a+b

运行结果:

tensor([[ 0,  2,  4,  6],
        [ 4,  6,  8, 10],
        [ 8, 10, 12, 14]])
  1. 后缘维度的轴长相符
a = torch.arange(6).reshape((3, 1, 2))
b = torch.arange(2).reshape((1, 2))
a+b

运行结果;

tensor([[[0, 2]],
        [[2, 4]],
        [[4, 6]]])

在这里插入图片描述

2.2 数据预处理

小结

  • pandas软件包是Python中常用的数据分析工具中,pandas可以与张量兼容。
  • 用pandas处理缺失的数据时,我们可根据情况选择用插值法和删除法。

课后练习

创建包含更多行和列的原始数据集。

  1. 删除缺失值最多的列。
  2. 将预处理后的数据集转换为张量格式。
import torch
import os
import pandas as pd
os.makedirs(os.path.join('..', 'data/test_data'), exist_ok=True)
data_file = os.path.join('..', 'data/test_data', 'homework_data.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Year,Area,Price\n')  # 列名
    f.write('NA,Pave,3,200,127500\n')  # 每行表示一个数据样本
    f.write('2,Pave,5,150,106000\n')
    f.write('4,Pave,2,200,178100\n')
    f.write('NA,NA,1,NA,140000\n') # 直接向csv写入数据
data = pd.read_csv(data_file)
print(data)
   NumRooms Alley  Year   Area   Price
0       NaN  Pave     3  200.0  127500
1       2.0  Pave     5  150.0  106000
2       4.0  Pave     2  200.0  178100
3       NaN   NaN     1    NaN  140000

删除缺失值最多的列:

na_sum = data.isnull().sum()
na_sum_max = na_sum.idxmax()
data.drop(na_sum_max, axis = 1, inplace = True)
print(data)
  Alley  Year   Area   Price
0  Pave     3  200.0  127500
1  Pave     5  150.0  106000
2  Pave     2  200.0  178100
3   NaN     1    NaN  140000

缺失值处理

插值法:

data1 = data
X,y = data1.iloc[:,0:3], data1.iloc[:,3]
X1 = X.fillna(round(X.mean(),1))   # 处理数值型变量
X1 = pd.get_dummies(X1, dummy_na=True)
print(X1)
   Year   Area  Alley_Pave  Alley_nan
0     3  200.0           1          0
1     5  150.0           1          0
2     2  200.0           1          0
3     1  183.3           0          1
# 转换为张量
X_tensor, y_tensor = torch.tensor(X1.values), torch.tensor(y)
X_tensor, y_tensor
(tensor([[  3.0000, 200.0000,   1.0000,   0.0000],
         [  5.0000, 150.0000,   1.0000,   0.0000],
         [  2.0000, 200.0000,   1.0000,   0.0000],
         [  1.0000, 183.3000,   0.0000,   1.0000]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))

删除法:

data2 = data.dropna()
X2,y2 = data2.iloc[:,0:3], data2.iloc[:,3]
X2 = pd.get_dummies(X2)
X_tensor2, y_tensor2 = torch.tensor(X2.values), torch.tensor(y2)
X_tensor2, y_tensor2
(tensor([[  3., 200.,   1.],
         [  5., 150.,   1.],
         [  2., 200.,   1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100]))

2.3 线性代数

小结

  • 标量、向量、矩阵和张量是线性代数中的基本数学对象。
  • 向量泛化自标量,矩阵泛化自向量。
  • 标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。
  • 一个张量可以通过sum和mean沿指定的轴降低维度。
  • 两个矩阵的按元素乘法被称为他们的Hadamard积。它与矩阵乘法不同。
  • 在深度学习中,我们经常使用范数,如 L 1 L_1 L1​范数、 L 2 L_2 L2​范数和Frobenius范数。
  • 我们可以对标量、向量、矩阵和张量执行各种操作。

课后练习

  1. 证明一个矩阵 A \mathbf{A} A的转置的转置是 A \mathbf{A} A,即 ( A ⊤ ) ⊤ = A (\mathbf{A}^\top)^\top = \mathbf{A} (A⊤)⊤=A。
  2. 给出两个矩阵 A \mathbf{A} A和 B \mathbf{B} B,证明“它们转置的和”等于“它们和的转置”,即 A ⊤ + B ⊤ = ( A + B ) ⊤ \mathbf{A}^\top + \mathbf{B}^\top = (\mathbf{A} + \mathbf{B})^\top A⊤+B⊤=(A+B)⊤。
  3. 给定任意方阵 A \mathbf{A} A, A + A ⊤ \mathbf{A} + \mathbf{A}^\top A+A⊤总是对称的吗?为什么?
  4. 我们在本节中定义了形状 ( 2 , 3 , 4 ) (2,3,4) (2,3,4)的张量X。len(X)的输出结果是什么?
  5. 对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?
  6. 运行A/A.sum(axis=1),看看会发生什么。你能分析原因吗?
  7. 考虑一个具有形状 ( 2 , 3 , 4 ) (2,3,4) (2,3,4)的张量,在轴0、1、2上的求和输出是什么形状?
  8. 为linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?

1 .

import torch
A = torch.tensor([[1,2,3],[4,5,6]])
B = A.T
print(A == B.T)
[[ True  True  True]
 [ True  True  True]]

2 .

B = torch.tensor([[7,8,9],[1,2,3]])
print((A+B).T)
print(A.T + B.T)
print((A+B).T == A.T + B.T)
tensor([[ 8,  5],
        [10,  7],
        [12,  9]])
tensor([[ 8,  5],
        [10,  7],
        [12,  9]])
tensor([[True, True],
        [True, True],
        [True, True]])

3 .

C = torch.randn(3,3)
print(C + C.T)
print((C+C.T) == (C+C.T).T)
tensor([[ 4.4318,  3.8084, -1.6643],
        [ 3.8084, -2.1554, -0.9012],
        [-1.6643, -0.9012, -1.4590]])
tensor([[True, True, True],
        [True, True, True],
        [True, True, True]])

4 .

X = torch.ones(2,3,4, dtype = torch.float32)
len(X) 
2

5 . 会显示在0轴的长度

6 .

# A/A.sum(axis = 1)  #报错
A/A.sum(axis = 1, keepdims = True) 
tensor([[0.1667, 0.3333, 0.5000],
        [0.2667, 0.3333, 0.4000]])

A为方阵时不会报错。维度不同,无法相除,也无法广播。最好不要使用向量,而是将其reshape为n行1列的矩阵,更不容易出问题。

7 .

print(X.sum(axis = 0).shape)
print(X.sum(axis = 1).shape)
print(X.sum(axis = 2).shape)
torch.Size([3, 4])
torch.Size([2, 4])
torch.Size([2, 3])

8 .

torch.linalg.norm(X) # L2范数
tensor(4.8990)

2.4 微积分

小结

  • 微分和积分是微积分的两个分支,前者可以应用于深度学习中的优化问题。
  • 导数可以被解释为函数相对于其变量的瞬时变化率,它也是函数曲线的切线的斜率。
  • 梯度是一个向量,其分量是多变量函数相对于其所有变量的偏导数。
  • 链式法则使我们能够微分复合函数。

课后练习

  1. 绘制函数 y = f ( x ) = x 3 − 1 x y = f(x) = x^3 - \frac{1}{x} y=f(x)=x3−x1​和其在 x = 1 x = 1 x=1处切线的图像。
  2. 求函数 f ( x ) = 3 x 1 2 + 5 e x 2 f(\mathbf{x}) = 3x_1^2 + 5e^{x_2} f(x)=3x12​+5ex2​的梯度。
  3. 函数 f ( x ) = ∥ x ∥ 2 f(\mathbf{x}) = \|\mathbf{x}\|_2 f(x)=∥x∥2​的梯度是什么?
  4. 你可以写出函数 u = f ( x , y , z ) u = f(x, y, z) u=f(x,y,z),其中 x = x ( a , b ) x = x(a, b) x=x(a,b), y = y ( a , b ) y = y(a, b) y=y(a,b), z = z ( a , b ) z = z(a, b) z=z(a,b)的链式法则吗?
#1
%matplotlib inline
import numpy as np
from d2l import torch as d2l

def f1(x):
    return x**3 - x**(-1)
x = np.arange(0.5, 2, 0.01)
d2l.plot(x, [f1(x), 4*x - 4], 'x', 'f1(x)', legend=['f1(x)', 'Tangent line (x=1)'])

在这里插入图片描述
2. f ′ ( x 1 ) = 6 x 1 , f ′ ( x 2 ) = 5 e x 2 , ▽ f ( x ) = [ 6 x 1 , 5 e x 2 ] f'(x_1) = 6 x_1, f'(x_2) = 5e^{x_2} , ▽f(x) = [6x_1, 5e^{x_2}] f′(x1​)=6x1​,f′(x2​)=5ex2​,▽f(x)=[6x1​,5ex2​]

3 .
∂ f ( x ) ∂ x = ∂ ∥ x ∥ 2 ∂ x = x x 2 = x ∥ x ∥ 2 \frac{\partial f(x)}{\partial x}=\frac{\partial\|x\|_{2}}{\partial x}=\frac{x}{\sqrt{x^{2}}}=\frac{x}{\|x\|_{2}} ∂x∂f(x)​=∂x∂∥x∥2​​=x2 ​x​=∥x∥2​x​
4.
d u d a = d u d x d x d a + d u d y d y d a + d u d z d z d a \frac{du}{da} = \frac{du}{dx} \frac{dx}{da} + \frac{du}{dy} \frac{dy}{da} + \frac{du}{dz} \frac{dz}{da} dadu​=dxdu​dadx​+dydu​dady​+dzdu​dadz​
d u d b = d u d b d x d b + d u d b d y d b + d u d z d z d b \frac{du}{db} = \frac{du}{db} \frac{dx}{db} + \frac{du}{db} \frac{dy}{db} + \frac{du}{dz} \frac{dz}{db} dbdu​=dbdu​dbdx​+dbdu​dbdy​+dzdu​dbdz​

2.5 自动微分

小结

  • 深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上。然后我们记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。

课后练习

  1. 为什么计算二阶导数比一阶导数的开销要更大?
  2. 在运行反向传播函数之后,立即再次运行它,看看会发生什么。
  3. 在控制流的例子中,我们计算d关于a的导数,如果我们将变量a更改为随机向量或矩阵,会发生什么?
  4. 重新设计一个求控制流梯度的例子,运行并分析结果。
  5. 使 f ( x ) = sin ⁡ ( x ) f(x)=\sin(x) f(x)=sin(x),绘制 f ( x ) f(x) f(x)和 d f ( x ) d x \frac{df(x)}{dx} dxdf(x)​的图像,其中后者不使用 f ′ ( x ) = cos ⁡ ( x ) f'(x)=\cos(x) f′(x)=cos(x)。

1 .
一阶导数: f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h . f'(x) = \lim_{h \rightarrow 0} \frac{f(x+h) - f(x)}{h}. f′(x)=h→0lim​hf(x+h)−f(x)​.

二阶导数:二阶导数是一阶导数的导数,是在一阶导数的基础上再次求导
f ′ ′ ( x ) = lim ⁡ h → 0 f ( x + 2 h ) − 2 f ( x ) + f ( x − h ) h 2 . f''(x) = \lim_{h \rightarrow 0} \frac{f(x+2h) -2 f(x) + f(x-h)}{h^2}. f′′(x)=h→0lim​h2f(x+2h)−2f(x)+f(x−h)​.
2.

import torch
x = torch.arange(4.0, requires_grad=True)
x.grad # 默认为None
y = 2 * torch.dot(x, x)
y.backward(retain_graph = True)    
# y.backward()   # 重复反向传播会报错
x.grad
tensor([ 0.,  4.,  8., 12.])
y.backward()
x.grad
y
tensor([ 0.,  8., 16., 24.])

tensor(28., grad_fn=<MulBackward0>)

对于Pytorch来说,前向过程建立计算图,反向传播后释放。因为计算图的中间结果已经被释放了,所以第二次运行反向传播就会出错。这时在 backward 函数中加上参数 retain_graph=True,计算图中的中间变量在计算完后就不会被释放,就能两次运行反向传播了。

3 .

#3
def f(a):
    b = a * 2
    while b.norm() < 1000: # L2范数
        b = b * 2
    if b.sum() > 0:
        c = b
    else:
        c = 100 * b
    return c
a = torch.randn(size=(3,), requires_grad=True) # size = ()表示标量
d = f(a)
d.backward()
a.grad
# 报错
RuntimeError: grad can be implicitly created only for scalar outputs
即:提示我们输出y不是一个标量,无法直接求导。

向量/矩阵 不可以直接进行反向传播

d.sum().backward()  
# d.backward(torch.ones_like(d)) 
# 结果张量是一维张量:将一维张量变成标量
a.grad

d.backward(grad_tensors=torch.ones_like(d)) ,等价于d.sum().backward(),可用于解决被求导的对象非标量的问题

4 .

def f2(x):
    while x < 1:
        x = x * 10
    y = x * x
    return y
b = torch.randn(size = (), requires_grad = True)
c = f2(b)
c.backward(retain_graph=True)  # 可多次反向传播
b.grad == c/b
True

5 .

#5 隐式自动微分
%matplotlib inline
import numpy as np
from d2l import torch as d2l
def f3(x):
    return torch.sin(x)
x = torch.arange(-10, 10, 0.1,requires_grad = True)
y = f3(x)
y.backward(torch.ones_like(y))
d2l.plot(x.detach().numpy(),[y.detach().numpy(), x.grad.numpy()],'x', 'f3(x)', legend=['f3(x)', 'grad'])
# x y需要先用detach()移动到记录的计算图之外

在这里插入图片描述

2.6 概率

小结

  • 我们可以从概率分布中采样。
  • 我们可以使用联合分布、条件分布、Bayes定理、边缘化和独立性假设来分析多个随机变量。
  • 期望和方差为概率分布的关键特征的概括提供了实用的度量形式。

课后练习

  1. 进行 m = 500 m=500 m=500组实验,每组抽取 n = 10 n=10 n=10个样本。改变 m m m和 n n n,观察和分析实验结果。
  2. 给定两个概率为 P ( A ) P(\mathcal{A}) P(A)和 P ( B ) P(\mathcal{B}) P(B)的事件,计算 P ( A ∪ B ) P(\mathcal{A} \cup \mathcal{B}) P(A∪B)和 P ( A ∩ B ) P(\mathcal{A} \cap \mathcal{B}) P(A∩B)的上限和下限。(提示:使用友元图(韦恩图)来展示这些情况。)
  3. 假设我们有一系列随机变量,例如 A A A、 B B B和 C C C,其中 B B B只依赖于 A A A,而 C C C只依赖于 B B B,你能简化联合概率 P ( A , B , C ) P(A, B, C) P(A,B,C)吗?(提示:这是一个马尔可夫链。)
  4. 在 :numref:subsec_probability_hiv_app中,第一个测试更准确。为什么不运行第一个测试两次,而是同时运行第一个和第二个测试?

1 .

#1
%matplotlib inline
import torch
from torch.distributions import multinomial
from d2l import torch as d2l

fair_probs = torch.ones([6]) / 6
counts = multinomial.Multinomial(10, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(),
                 label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

在这里插入图片描述

counts = multinomial.Multinomial(5, fair_probs).sample((50,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(),
                 label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

在这里插入图片描述
用各点数出现的频率估计概率,实验次数越多,样本数越多,越接近真实概率。

2 .
P ( A ∪ B ) P(A \cup B) P(A∪B) 上限: P ( A ) + P ( B ) P(A)+P(B) P(A)+P(B), 下限: m a x { P ( A ) , P ( B ) } max\{P(A),P(B)\} max{P(A),P(B)}

P ( A ∩ B ) P(A \cap B) P(A∩B) 上限: m i n { P ( A ) , P ( B ) } min\{P(A), P(B)\} min{P(A),P(B)}, 下限: 0 0 0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fr7cqPCA-1649338442080)(attachment:a296a09a-4200-4564-be66-a676bb8bf501.png)]
3 . P ( A B C ) = P ( A ) P ( B ∣ A ) P ( C ∣ B A ) = P ( A ) P ( B ∣ A ) P ( C ∣ B ) P(ABC)=P(A)P(B∣A)P(C∣BA)=P(A)P(B∣A)P(C∣B) P(ABC)=P(A)P(B∣A)P(C∣BA)=P(A)P(B∣A)P(C∣B)

4 . 第二个测试具有不同的特性,不会使错误积累

《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行) ——PyTorch 版 李沐,亚马逊 AI 主任科学家,名声在外!半年前,由李沐、Aston Zhang 等人合力打造的《动手学深度学习》正式上线,免费供大家阅读。这是一本面向中文读者的能运行、可讨论的深度学习教科书! 李沐的这本《动手学深度学习》也是使用 MXNet 框架写成的。但是很多入坑机器学习的萌新们使用的却是 PyTorch。如果有教材对应的 PyTorch 实现代码就更好了! 撒花,... 阅读详情

相关推荐

《动手学深度学习》(PyTorch版)

《动手学深度学习》PyTorch版深度学习简介起源发展成功案例特点小结练习参考文献 深度学习简介 你可能已经接触过编程,并开发过一两款程序。同时你可能读过关于深度学习或者机器学习的铺天盖地的报道,尽管很多时候它们被赋予了更广义的名字:人工智能。 实际上,或者说幸运的是,大部分程序并不需要深度学习或者是更广义上的人工智能技术。例如,如果我们要为一台微波炉编写一个用户界面,只需要一点儿工夫我们便能设计出十几个按钮以及一系列能精确描述微波炉在各种情况下的表现的规则。 再比如,假设我们要编写一个电子邮件客户端。这样

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 7511

python函数

math.ceil( x ) 函数返回返回一个大于或等于 x 的的最小整数。

weixin_42013536的博客 111

《动手学深度学习》课后习题2

《动手学深度学习》学习网址: 《动手学》:过拟合、欠拟合及其解决方案 1. 关于验证数据集的描述错误的是: 答案:测试数据集可以用来调整模型参数。 解析:测试数据集不可以用来调整模型参数,如果使用测试数据集调整模型参数,可能在测试数据集上发生一定程度的过拟合,此时将不能用测试误差来近似泛化误差。 B 验证数据集可以用来调整模型参数; C 在数据不够多的时候,k折交叉验证是一种常用的验证方法; D k折交叉验证将数据分为k份,每次选择一份用于验证模型,其余的用于训练模型。 2. 关于过拟合、欠拟合概念的描述错误的是: 答案:过拟合和欠拟合可以同时发生。 解析:过拟合是指训练误差达到一个较低

torch.shape 输出: torch.Size([3]) 与 torch.Size([])各自的实现方式

from __future__ import print_function from torch.autograd import Variable as V import torch as t a=t.tensor(1,dtype=t.float) print(a,a.shape,a.dtype) b=V(t.tensor([1,1,1])) print(b,b.shape,b.dtype)

nyist_yangguang的博客 4163

清理异常值(MAD:绝对中位差)

清理异常数据: 中位数绝对偏差(MAD):用来描述单变量样本在定量数据中可变的一种标准 在统计学中,绝对中位差是刻画一元数据样本变化的一个鲁棒度量。由公式可以看出,其求解还算简单,给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数的绝对值从而形成一个新的数据样本,再求新的数据样本的中位数即为绝对中位差。比如说有一个数据样本集X={2 3 8 7 9 6 4},这时候数据的中位数是6,原...

spider_man 1万+

保姆级教程:用OpenCV搞定鱼眼双目相机的标定与测距(附完整C++代码)

本文详细介绍了使用OpenCV进行鱼眼双目相机标定与测距的全流程,包括环境搭建、数据采集、单目标定、双目标定、立体校正和视差计算等核心步骤。通过完整的C++代码示例和参数调优指南,帮助开发者快速实现高精度的双目测距系统,适用于机器人导航、VR全景拍摄等领域。

weixin_42573113的博客 387

深度学习 实验二 pytorch的基本使用

深度学习 pytorch python torch

weixin_51395608的博客 1666

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3253

《动手学深度学习》第二章——预备知识_2.3线性代数_学习思考与习题答案

《动手学深度学习》第二章——预备知识_2.3线性代数_学习思考与习题答案

weixin_45042017的博客 1222

C#安装OpenCv及打开笔记本默认摄像头方法

C#安装OpenCv及打开笔记本默认摄像头方法

cg1135217680的博客 2572

【即插即用模块】卷积篇 | CVPR 2025 | LSConv:大核捕全局,小核提速度,替换 3×3 卷积/自注意力,精度效率双飙升

文章摘要: LSConv是一种新型卷积模块,采用"大核感知+小核聚合"策略,在轻量级视觉任务中表现出色。该模块由两部分组成:7×7深度可分离卷积(LKP)捕捉全局信息,动态3×3卷积(SKA)实现高效特征聚合。相比传统卷积和自注意力机制,LSConv在降低计算量的同时提升了精度,尤其适合高分辨率视觉任务。实验表明,在轻量化模型中用LSConv替代3×3卷积或自注意力,可显著减少计算量并提高准确率。模块支持即插即用,提供Triton优化实现,可直接集成到现有卷积或Transformer架构

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1119

《动手学深度学习》pytorch版 第二章练习

刚刚开始学习深度学习,争取把节课的练习都记录下来,菜鸡一个,如果哪个地方有错误或是没有理解到位烦请各位大佬指教

weixin_44849606的博客 5213

京东豆自动领取脚本配置教程

腾讯云/阿里云服务器(Docker环境):全自动跑脚本领京豆(无需本地代理,使用加速源)

AIOT魔法师 855

李沐老师的PyTorch 版《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行)

李沐,亚马逊 AI 科学家,也是我在Amazon实习时的大BOSS。由李沐、Aston Zhang 等人合力打造的《动手学深度学习》正式上线,免费供大家阅读。这是一本面向中文读者的能运行、可讨论的深度学习教科书 李沐的这本《动手学深度学习》也是使用 MXNet 框架写成的。但是很多入坑机器学习的萌新们使用的却是 PyTorch。如果有教材对应的 PyTorch 实现代码就更好了~ 撒花,最...

Machine Learning with Tutors 2万+

GEE:使用 CCDC 算法进行连续变化检测和分类

连续变化检测和分类(CCDC)算法是一种广泛应用于遥感数据分析的方法,可以用于检测土地覆盖变化、农作物生长状态的变化以及水资源的变化等。Google Earth Engine是一个强大的云端平台,提供了丰富的遥感数据和工具,可以用于执行各种类型的遥感数据分析。本文将介绍如何使用Google Earth Engine的CCDC算法进行连续变化检测和分类。

养乐多的博客 5676

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

2025三掌柜赠书活动第一期:动手学深度学习(PyTorch版)

人工智能是引领未来发展的战略性技术,是新一轮科技革命和产业变革的重要驱动力量。深度学习作为机器学习的一个分支,近年来在图像识别、自然语言处理、游戏智能等领域取得了显著的进展。PyTorch,作为一个开源的深度学习框架,因其动态计算图、易用性和灵活性而受到广泛欢迎。那么本文就来详细介绍如何使用PyTorch进行深度学习,包括基础概念、核心API和实际代码示例,旨在帮助大家快速上手深度学习项目。关于深度学习的概念,其实深度学习通过构建多层神经网络模拟人脑处理信息的方式,以识别模式和特征。

全沾软贱开发攻城狮 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《动手学深度学习》Pytorch版开源!

机器之心报道项目作者:ShusenTang参与:思想要入门最前沿的深度学习,想要玩最常见的深度学习框架?那就用 PyTorch 版的《动手学深度学习》吧,零基础也能入门 DL。李沐等人的...

算法channel 2114

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PyTorch版《动手学深度学习》开源了,最美DL书遇上最赞DL框架

机器之心报道项目作者:ShusenTang参与:思想要入门最前沿的深度学习,想要玩最常见的深度学习框架?那就用 PyTorch 版的《动手学深度学习》吧,零基础也能入门 DL。李沐等人的开源中文书《动手学深度学习》现在有 PyTorch 版实现了。不论是原书中的示例代码,还是实战项目,原来的 MXNet 都可以无缝转化到 PyTorch 代码。项目作者在保持原书内容基本不变的情况下,将 MXNet 代码都转换为了 PyTorch,想要学习 DL 和 PyTorch 的小伙伴们可以试试啊。项目地址:https

Python学习与数据挖掘 832

动手学深度学习PyTorch版

课程介绍 本课程面向希望更多的通过代码实践去学习深度学习原理的同学和在职人士。 《动手学深度学习》是2019年国内最受欢迎的人工智能学习教材之一,伯禹教育携手上海交通大学团队,以此书的知识架构为基础,沿用了其中的原理讲解文档,并将代码框架由MXNET迁移至PyTorch,还对这些优质的实践代码制作了讲解视频。其中部分PyTorch代码来自GitHub开源仓库:https://git...

yanqianglifei的专栏 3324

动手学深度学习pytorch(第一版)学习笔记 —— 第二章

第二章:torch、arange、shape、张量与其他Python对象转化、数据预处理、向量与矩阵、梯度相关知识

lwangqqq的博客 1144

动手学深度学习PyTorch版-task1

课程介绍(引用自伯禹平台:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV) 本课程面向希望更多的通过代码实践去学习深度学习原理的同学和在职人士。 《动手学深度学习》是2019年国内最受欢迎的人工智能学习教材之一,伯禹教育携手上海交通大学团队,以此书的知识架构为基础,沿用了其中的原理讲解文档,并将代码框架由MXNET迁移至PyTorch...

zahidzqj的博客 3192

动手学深度学习(李沐)的pytorch版本(包含代码和PDF版本)

动手学深度学习(李沐)的pytorch版本(包含代码和PDF版本),《动手学深度学习》PyTorch版本TendorFlow版本(内有所有代码和PDF版下载地址)

weixin_64338372的博客 2万+

【资源】PyTorch版《动手学深度学习》开源了,最美DL书遇上最赞DL框架

点击上方,选择星标或置顶,每天给你送干货!阅读大概需要4分钟跟随小博主,每天进步一丢丢来自:机器之心项目作者:ShusenTang参与:思碎片化利用时间推荐:提升自己,尽在点滴。推荐几个...

zenRRan的博客 483

364 页 PyTorch 版《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行)

点击上方“AI有道”,选择“星标”公众号重磅干货,第一时间送达李沐,亚马逊 AI 主任科学家,名声在外!半年前,由李沐、Aston Zhang 等人合力打造的《动手学深度学习》正式上线,...

fengdu78的博客 3405

【PyTorch】《动手学深度学习》Windows环境搭建

深度学习环境搭建

2302_79970065的博客 2163
上一篇: Coursera无法播放视频问题的解决
下一篇: 动手学深度学习:Fashion-MNIST数据集下载失败解决方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值