李宏毅机器学习的组队学习告一段落,接下来我们对最近的内容做一期总结,承上启下,后面接着好好干!本文提供一个应用示例,用的数据集是fashion-mnist。
ML/DL入门介绍(底层理解+基本概念)
ML/DL入门介绍——回归
误差与梯度下降(李宏毅《机器学习》)
深度学习入门—反向传播
神经网络训练技巧—“神经网络训练不起来怎么办”(李宏毅《机器学习》<深度学习向>)
CNN入门全面介绍(李宏毅《机器学习》<深度学习方向>)
回归模型介绍
神经网络训练不起来,怎么办?
卷积神经网络
1)Module类是torch.nn里提供的应该模型构造类,是用于构造所有神经网网络模块的积累,其他模型的搭建可以通过继承它。
2)它提供三种定义方式,分别是Sequential、ModuleList、ModuleDict。
(在进行代码演示前,需要引入需要的库)
import os
import numpy as np
import collections
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
1)Sequential(nn.Sequential())
模型在进行前向计算时通过简单串联各个层,Sequential通过更为简单的方式定义模型。接收一个模块的OrderedDict或一系列模块作为参数来注意添加Module的示例,模型的前向计算就是在按序计算这些示例,代码演示如下:
直接排列
import torch.nn as nn
net1=nn.Sequential(
nn.Linear(784,256),
nn.ReLU(),
nn.Linear(256,10),
)
print(net1)
#结果
Sequential(
(0): Linear(in_features=784, out_features=256, bias=True)
(1): ReLU()
(2): Linear(in_features=256, out_features=10, bias=True))
#利用OrderedDict
import collections
import torch.nn as nn
net2=nn.Sequential(collections.OrderedDict([
('fcl',nn.Linear(784,256)),('relu1',nn.ReLU()), ('fc2',nn.Linear(256,10))
]))
print(net2)
#结果
Sequential(
(fcl): Linear(in_features=784, out_features=256, bias=True)
(relu1): ReLU()
(fc2): Linear(in_features=256, out_features=10, bias=True)
)
2)ModuleList(nn.ModuleList())
ModuleList接受一个子模块的列表作为输入,因此可以进行append和extend的操作,同时,子模块或层的权重也会自动添加到网络中。
net3=nn.ModuleList([nn.Linear(784,256),nn.ReLU()])
net3.append(nn.Linear(256,10))
print(net3[-1])
print(net3)
Linear(in_features=256, out_features=10, bias=True)
ModuleList(
(0): Linear(in_features=784, out_features=256, bias=True)
(1): ReLU()
(2): Linear(in_features=256, out_features=10, bias=True)
)
需要注意的时,ModuleList并不能提供示例,只是简单地把各模块组合在一起,使用它来进行模型实例化需要进行以下操作,否则会报错
(NotImplementedError)
class Net3(nn.Module):
def __init__(self):
super().__init__()
self.modulelist=nn.ModuleList([nn.Linear(784,256),nn.ReLU()]) self.modulelist.append(nn.Linear(256,10))
def forward(self,x):
for layer in self.modulelist:
x=layer(x)
return xnet3_=Net3()
out3_=net3_(a)
print(out3_.shape)
3)ModuleDict(nn.ModuleDict())
ModuleDict和ModuleList类似,前者可以更好地为各层添加名称有助于大模型的实现。
net4=nn.ModuleDict({
'linear':nn.Linear(784,256), 'act':nn.ReLU(),
})
net4['output']=nn.Linear(256,10)print(net4['linear'])
print(net4.output)
李宏毅《机器学习》开源内容1:
https://linklearner.com/datawhale-homepage/#/learn/detail/93
李宏毅《机器学习》开源内容2:
https://github.com/datawhalechina/leeml-notes
李宏毅《机器学习》开源内容3:
https://gitee.com/datawhalechina/leeml-notes
李宏毅《机器学习》官方地址
http://speech.ee.ntu.edu.tw/~tlkagk/courses.html
李沐《动手学深度学习》官方地址
https://zh-v2.d2l.ai/
1.这次的组队学习实际上是一个引子,让我看到了经典课程的魅力,任重道远,持续进步!!!
2.感谢Datawhale的组织者们,仍然是一次非常棒的学习体验!!!还有感谢get it 小队成员的互相帮助和支持,坚持下来非常不易。