Torch学习笔记01

关于backward函数的用法:

分别是out为标量和矢量时候的情况:

import torch

x = torch.tensor([1, 2, 3], dtype=torch.float, requires_grad=True)
y = x + 3
z = y * 3

#  out为标量
# out = z.mean()
# print(out)
# out.backward()
# print(out)
# print("input data:", x.data)
# print("input gradient:", x.grad)
# print("元素个数:", x.numel())

# out为矢量
out = z ** 3
print(out)
out.backward(torch.ones_like(out))
print(out)
print("input data:", x.data)
print("output gradient:", x.grad)

torch中sum()函数

import torch

x = torch.tensor([1, 2, 3, 4, 5, 6, 7])
y = torch.tensor([1, 3, 2, 4, 5, 7, 6])
z = (x == y).sum() # 求解x,y中相等项数之和
print("x==y : ", x == y)
print(z) # 返回的是一个张量
print(z.item()) # 返回的是一个数值

结果如下:

x==y :  tensor([ True, False, False,  True,  True, False, False])
tensor(3)
3

torch中的with torch.no_grad() 的作用:

由于torch中的tensor有一个requires_grad参数,若一个tensor的requires_grad=True,则 在进行反向传播算法时,就会自动求导,详参见上面的backward函数用法。若一个tensor的requires_grad=True,则依赖其的其他tensor的requires_grad=True,尽管该tensor依赖的其他的tensor的requires_grad=False。

当tensor的requires_grad=False时,反向传播时就不会自动求导了,极大地节约了内存。

而 with torch.no_grad()函数,可以让其间的tensor的requires_grad=False,尽管其依赖的tensor的requires_grad=True。示例如下:

import torch

x = torch.tensor([1, 2, 3], dtype=torch.float, requires_grad=True)
y = torch.tensor([4, 3, 2], dtype=torch.float, requires_grad=False)
z = x + y
print("z.requires_grad:", z.requires_grad)
with torch.no_grad():
    out = x + y
    print("out.requires_grad:", out.requires_grad)
    print("out.grad_fn:", out.grad_fn)
print("out.requires_grad:", out.requires_grad)

结果如下:

z.requires_grad: True
out.requires_grad: False
out.grad_fn: None
out.requires_grad: False

观察可以发现,z的requires_grad=True,而在 with torch.no_grad()语句下,out的requires_grad=False,且out的求梯度的函数grad_fn为空。

### 关于邱锡鹏的机器学习学习笔记及相关资源 邱锡鹏是自然语言处理和深度学习领域的一位知名学者,其著作《神经网络与深度学习》以及相关教学资料被广泛应用于学术界和工业界的教育中。以下是关于邱锡鹏及其机器学习相关内容的一些详细介绍: #### 1. **书籍推荐** 邱锡鹏编写的《神经网络与深度学习》是一本非常经典的教材,涵盖了从基础理论到实践应用的多个方面。该书不仅适合初学者入门,还能够帮助有一定经验的研究者深入理解深度学习的核心原理[^4]。 ```python # 示例代码:基于PyTorch实现的一个简单全连接层 import torch.nn as nn class SimpleNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out ``` 此书中提供了大量的实例代码,并且配套了详细的讲解文档,非常适合希望动手实践的学习者。 #### 2. **在线课程与讲座** 除了书籍外,邱锡鹏还在一些公开平台上分享了他的研究成果和教学内容。例如,在Bilibili等视频网站上可以找到他关于自然语言处理(NLP)和深度学习的主题演讲[^5]。这些视频通常会结合最新的研究进展和技术趋势,具有很高的参考价值。 #### 3. **开源项目与代码库** 为了便于读者更好地理解和运用所学知识,邱锡鹏维护了一个GitHub仓库,其中包含了《神经网络与深度学习》一书中的所有实验代码及数据集链接[^6]。访问这个仓库可以帮助用户快速搭建开发环境并验证各种模型的效果。 #### 4. **社区讨论与交流平台** 参与由邱锡鹏或其他专家主持的技术论坛也是获取最新动态的好方法之一。比如加入知乎上的相关话题或者订阅他的个人博客更新通知,都可以让你及时了解到行业内的新动向[^7]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值