神经网络与深度学习课程笔记--第五周

本文探讨了全连接网络的问题,如过拟合和收敛困难,以及局部连接网络和卷积神经网络的基础概念,包括卷积核、填充、步长和池化。以LeNet-5和AlexNet为例,介绍了网络结构,并通过CIFAR10数据集展示了神经网络的搭建过程。
摘要由CSDN通过智能技术生成

1.全连接网络问题

链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题

解决算的慢问题:减少权值连接,每一个节点只连到上一层的少数神经元,即局部连接网络。信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。

2.卷积神经网络基础

卷积核:

可以看作对某个局部的加权求和;它是对应局部感知,它的原理是在观察某个物体时我们既不能观察每个像素也不能一次观察整体,而是先从局部开始认识,这就对应了卷积。

一些概念:

填充(Padding):也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充

步长(Stride):卷积核每次移动的距离,单位为一个像素点。

多通道卷积:如RGB,相当于给卷积核赋予高度。

池化(Pooling):使用局部统计特征,如均值或最大值。用于解决特征过多问题

卷积神经网络的结构:

3.LeNet-5网络

网络结构

与现在网络的区别:

4.AlexNet

网络结构

改进之处:

5.实战--CIFAR10数据集

如下图所示,搭建神经网络

一步步搭建

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter


class Zz(nn.Module):
    def __init__(self):
        super(Zz, self).__init__()
        self.conv1 = Conv2d(3, 32, 5, padding=2)
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)
        self.flatten = Flatten()
        self.linear1 = Linear(1024, 64)
        self.linear2 = Linear(64, 10)
        )

    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x
zz = Zz()
print(zz)
input = torch.ones((64, 3, 32, 32))
output = zz(input)
print(output.shape)

writer = SummaryWriter("./logs_sqe")
writer.add_graph(zz, input)
writer.close()

也可以用Sequential简化代码:

class Zz(nn.Module):
    def __init__(self):
        super(Zz, self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self,x):
        x = self.model1(x)
        return x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值