Deep Learning with Pytorch 中文简明笔记 第六章 Using a neural network to fit the data

Deep Learning with Pytorch 中文简明笔记 第六章 Using a neural network to fit the data

Pytorch作为深度学习框架的后起之秀,凭借其简单的API和简洁的文档,收到了越来越多人的关注和喜爱。本文主要总结了 Deep Learning with Pytorch 一书第六章[Using a neural network to fit the data]的主要内容,并加以简单明了的解释,作为自己的学习记录,也供大家学习和参考。

主要内容

  • 非线性激活函数
  • 使用Pytorch的nn模型
  • 使用神经网络解决线性拟合问题

1. 人工神经单元

复杂函数的最基本的单元是神经单元

在这里插入图片描述

复杂函数就是多个神经单元的连接,最后展现出的形式就是函数的多层嵌套

在这里插入图片描述

深度学习中最简单的单元是线性操作+非线性激活函数,非线性激活函数的主要作用为

  • 在模型内部,它允许输出函数在不同的值处具有不同的斜率
  • 在模型最后,它具有将先前线性运算的输出集中到给定范围的作用

激活函数的类型很多,如

在这里插入图片描述

一般而言,激活函数是非线性且可微分的。并且激活函数有一段敏感区间,在这段区间中函数值的变化较为剧烈,同样也有一段不敏感区间,这段区间中函数值的变换较为缓和甚至几乎没有变化。

而对于参数学习而言,可以理解为调整非线性激活函数的offset和scale,使得更好的拟合数据。

在这里插入图片描述

2. Pytorch的nn模块

PyTorch具有专用于神经网络的子模块,叫做torch.nn模块。它包括了构建神经网络所需要的各种基本块。当模型需要一个列表或者一个字典组成的子模型时,PyTorch提供了nn.ModuleList和nn.ModuleDict。

PyToch对其子类nn.Module定义好了__call__()方法,使得其可以作为实例而调用。

# In[5]: 
import torch.nn as nn
linear_model = nn.Linear(1, 1)
linear_model(t_un_val)

# Out[5]: 
tensor([[0.6018], [0.2877]], grad_fn=<AddmmBackward>)

当对模型传入参数(数据)时,会调用模型的forward(),并且向其传入相同的参数。因此,不需要手动调用forward()函数。

y = model(x) # 正确
y = model.forward(x) # 错误

刚才使用到的线性模型nn.Linear,接受三个参数,分别为输入特征大小,输出特征大小和是否包含偏置项(默认为True)。我们可以使用weight和bias这两个属性来查看模型的参数详情。

# In[6]: 
linear_model.weight

# Out[6]: 
Parameter containing: 
tensor([[-0.0674]], requires_grad=True)

# In[7]: 
linear_model.bias

# Out[7]:
Parameter containing: tensor([0.7488], requires_grad=True)

按照刚才的方法传入参数,可以得到经过网络的结果。

# In[8]: 
x = torch.ones(1) linear_model(x)

# Out[8]: 
tensor([0.6814], grad_fn=<AddBackward0>)

如果需要传入一个batch的数据,则构成一个列向量输入进网络。

# In[9]: 
x = torch.ones(10, 1) 
linear_model(x)

下面使用这种方法定义模型和优化器,并使用nn.Module.parameters()方法访问模型参数

# In[10]: 
linear_model = nn.Linear(1, 1) 
optimizer = optim.SGD( linear_model.parameters(), lr=1e-2)

# In[11]: 
linear_model.parameters()

# Out[11]: 
<generator object Module.parameters at 0x7f94b4a8a750>

# In[12]: 
list(linear_model.parameters())

# Out[12]: 
[Parameter containing: tensor([[0.7398]], requires_grad=True), Parameter containing: tensor([0.7974], requires_grad=True)]

然后定义训练的loop

# In[13]: 
def training_loop(n_epochs, optimizer, model, loss_fn, t_u_train, t_u_val, t_c_train, t_c_val):
	for epoch in range(1, n_epochs + 1): 
		t_p_train = model(t_u_train) 
		loss_train = loss_fn(t_p_train, t_c_train)

		t_p_val = model(t_u_val)
		loss_val = loss_fn(t_p_val, t_c_val)
		
		optimizer.zero_grad() 
		loss_train.backward() 
		optimizer.step()

		if epoch == 1 or epoch % 1000 == 0:
			print(f"Epoch {epoch}, Training loss {loss_train.item():.4f}," f" Validation loss {loss_val.item():.4f}")

对于损失函数,Pytorch也封装了MSELoss,不再需要手写损失函数了

# In[15]: 
linear_model = nn.Linear(1, 1) 
optimizer = optim.SGD(linear_model.parameters(), lr=1e-2)
training_loop( n_epochs = 3000, optimizer = optimizer, model = linear_model, loss_fn = nn.MSELoss(), t_u_train = t_un_train, t_u_val = t_un_val, t_c_train = t_c_train, t_c_val = t_c_val)

3. 最终的神经网络

我们在原来线性神经网络的基础上,加入激活函数

在这里插入图片描述

# In[16]: 
seq_model = nn.Sequential( nn.Linear(1, 13), nn.Tanh(), nn.Linear(13, 1))
seq_model

# Out[16]: 
Sequential( 
(0): Linear(in_features=1, out_features=13, bias=True) 
(1): Tanh() 
(2): Linear(in_features=13, out_features=1, bias=True)
)

使用了nn.Sequential()做顺序封装。同样可以使用nn.Module.paramaters()方法查看参数

# In[17]: 
[param.shape for param in seq_model.parameters()]

# Out[17]: 
[torch.Size([13, 1]), torch.Size([13]), torch.Size([1, 13]), torch.Size([1])]

如果想分别查看weight和bias,可以使用nn.Module.named_paramaters()方法

# In[18]: 
for name, param in seq_model.named_parameters(): 
	print(name, param.shape)

# Out[18]: 
0.weight torch.Size([13, 1])
0.bias torch.Size([13]) 
2.weight torch.Size([1, 13]) 
2.bias torch.Size([1])

如果想为网络中不同层次命名,则可以使用OrderedDict

# In[19]: 
from collections import OrderedDict
seq_model = nn.Sequential(OrderedDict([ 
('hidden_linear', nn.Linear(1, 8)), 
('hidden_activation', nn.Tanh()), 
('output_linear', nn.Linear(8, 1))
]))
seq_model

# Out[19]: 
Sequential( 
(hidden_linear): Linear(in_features=1, out_features=8, bias=True) 
(hidden_activation): Tanh() 
(output_linear): Linear(in_features=8, out_features=1, bias=True)
)

# In[20]: 
for name, param in seq_model.named_parameters(): 
	print(name, param.shape)

# Out[20]:
hidden_linear.weight torch.Size([8, 1]) 
hidden_linear.bias torch.Size([8]) 
output_linear.weight torch.Size([1, 8]) 
output_linear.bias torch.Size([1])

如果使用了orderdict,则可以直接使用层次的名称来直接访问参数

# In[21]: 
seq_model.output_linear.bias

# Out[21]: 
Parameter containing: tensor([-0.0173], requires_grad=True)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《深度学习PyTorch中文版》是一本非常实用的书籍,它覆盖了深度学习的各个方面,并详细介绍了如何使用PyTorch来构建神经网络。本书从最基础的线性回归、分类问题开始,逐渐深入探讨了卷积神经网络、循环神经网络、生成对抗网络等高级话题。此外,本书还介绍了数据的预处理、特征工程、模型训练等方面的技巧,让读者能够更好地理解和应用深度学习算法。 本书的优点在于其语言简洁易懂,配合引人入胜的实例和图表,让读者更容易理解和掌握深度学习的知识。同时,本书的代码实现也非常清晰,让读者能够轻松地复现和修改代码,加深对深度学习算法的理解。 总之,《深度学习PyTorch中文版》是一本非常适合初学者和从业者的实用书籍,它能够帮助读者更好地了解和应用深度学习算法,并且提供了丰富的实战经验。如果你正在学习深度学习或者需要深入了解PyTorch框架,那么这本书一定是你的不二之选。 ### 回答2: 《Deep Learning with PyTorch中文版》是一本非常优秀的深度学习教材。PyTorch是Facebook推出的一款开源的深度学习框架,它支持动态图和静态图,有着非常易用的API和灵活的特性,因此它在深度学习社区中受到了广泛的关注和使用。 这本书全面地介绍了PyTorch的使用方法以及深度学习的基础知识。书中的章节安排和内容非常合理,从最基础的张量操作和autopograd介绍到卷积神经网络、循环神经网络和生成对抗网络等高级主题,深入浅出地讲解了深度学习的原理和实现方式。此外,书中还涵盖了实践中最常用的技术,如数据预处理、模型验证和模型训练等内容,使人们能够更加完整地了解深度学习的实际应用。 另外,这本书中还涉及了一些PyTorch的高阶特性,如分布式训练、混合精度训练和自定义操作符等内容,这些内容对于一些具有深度学习基础的人来说将非常有用。同时,书中还提供了大量的实际代码示例和实验案例,帮助读者更好地理解和掌握相关知识。 总之,《Deep Learning with PyTorch中文版》是一本非常优秀的深度学习教材,它深入浅出地介绍了PyTorch的使用方法和深度学习的基础知识,为读者打下扎实的基础,同时也探讨了一些高级主题和实用技巧,可以作为深度学习入门者和高级使用者的参考书。 ### 回答3: PyTorch是一个开源的Python机器学习框架,它被广泛应用于深度学习领域。《Deep Learning with PyTorch(使用PyTorch进行深度学习)》中文版是该领域的经典读物之一,它提供了全面且易于理解的介绍,以便帮助读者掌握PyTorch的理论和实践知识。 该书从基础知识开始,逐步深入介绍了PyTorch的概念、结构和操作。作者将PyTorch的设计和实现详细解释,帮助读者理解其背后的思想和动机。此外,本书还提供了许多实际应用的例子,涵盖了深度学习领域的多个方面,包括自然语言处理、计算机视觉、生成模型等。 在本书中,读者可以学习如何使用PyTorch实现各种常见的深度学习模型,例如卷积神经网络、循环神经网络和深度生成模型等。本书还涵盖了其他重要的深度学习技术,如迁移学习、强化学习和自监督学习等。通过阅读本书,读者可以了解到PyTorch深度学习领域的应用,并了解如何使用它设计和实现自己的深度学习模型。 总之,《Deep Learning with PyTorch(使用PyTorch进行深度学习)》中文版提供了广泛的知识和技能,适合想要学习和应用PyTorch的学生、研究人员和实践者。该书旨在帮助读者充分利用PyTorch的优势,更好地应对深度学习领域的挑战。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值