深度学习与PyTorch笔记19

全连接层

nn.linear(ch-in,ch-out)写一个3层全连接层:
x#[b,784]
layer1=nn.linear(784,200)
layer2=nn.linear(200,200)
layer3=nn.linear(200,10)
x=layer1(x)#[b,200]
x=layer2(x)#[b,200]
x=layer3(x)#[b,10]

加激活函数(rgb的像素重建一定要用sigmoid,其余大部分都用relu):

x=layer1(x)
x=F.relu(x,inplace=True)#[b,200]
x=layer2(x)
x=F.relu(x,inplace=True)#[b,200]
x=layer3(x)
x=F.relu(x,inplace=True)#[b,10]

使用inplace=True可以把多出来的内存消耗省下来。

总结
  • init layer in init
    首先要初始化类,指定类的参数。上面是分开写的,实际上如果自己实现一个nn.Module把三层创建在一起,类的封装性会更强,这个类就代表自己的网络结构,可以取个名字,要创建自己的网络结构首先要继承自nn.Module
  • implement forward()
    实现forward(),不需要实现backward(),因为backward()nn.Module自动提供的,向后求导的过程也不需要额外的写,因为pytorch的autgrad包会自动完成向后求导的过程,自己只要写好向前传播的过程之后,他会自动记录向前传播的过程,然后使用自动求导的工具来完成当前计算图向后传播的过程。
    新建自己的层:
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):#使用了model.forward()函数
        x = self.model(x)

        return x

nn.Sequential()中可以添加任何的继承自nn.Module的类

  • class-style API:类风格API,必须先实例化再调用,参数是内部的成员,不能介于,只能使用他的方法调用,名字首字母都大写。
  • function-style API:可以随意调用,名字首字母都小写。

train部分:
net.parameters()自动加入tensor,不需要人工添加tensor

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)#注意logits
        loss = criteon(logits, target)

        optimizer.zero_grad()
        loss.backward()
        # print(w1.grad.norm(), w2.grad.norm())
        optimizer.step()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值