替代bp算法的神经网络优化-小练习

该博客探讨了神经网络在优化过程中遇到的局部最优问题,传统上使用梯度下降算法,但存在局限。作者通过定义神经网络模型,并采用粒子群优化算法作为替代方案,旨在解决这一挑战。
摘要由CSDN通过智能技术生成

一般神经网络都是基于梯度下降算法来优化的,梯度下降是基于导数的,有一定的数学道理,但是常常会遇到局部最优问题,导致不能达到最优解

1. 定义神经网络模型
class Module(nn.Module):
    def __init__(self, pso_data):
        super(Module, self).__init__()
        # 接收 pso_data 优化参数
        self.pso_data = pso_data

        # 图片尺寸:1*28*28
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=8, kernel_size=3, padding=1, bias=False)
        self.conv2 = nn.Conv2d(in_channels=8, out_channels=4, kernel_size=3, padding=1, bias=False)
        self.conv3 = nn.Conv2d(in_channels=4, out_channels=2, kernel_size=3, padding=1, bias=False)

        self.bn1 = nn.BatchNorm2d(2)
        self.bn2 = nn.BatchNorm2d(8)
        self.maxPooling = nn.MaxPool2d(2)

        self.fc = nn.Linear(98, 10)
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x):
        # 调用初始化 PSO 参数
        self._model_param_init()

        x = self.conv1(x)
        x = self.bn2(x)
        x = self.relu(self.maxPooling(x))

        x = self.conv2(x)

        x = self.relu(self.maxPooling(x))

        x = self.conv3(x)
        x = self.bn1(x)
        x = self.relu(x)
        # print("x.shape = ", x.shape)

        # Flatten data from (64, 2, 7, 7) to (64,98)
        x = x.view(x.size(0), -1)

        x = self.fc(x)
        return x

2.指定初始化参数

    # 初始化函数
    def _model_param_init(self):
        self.conv1.weight.data = torch.FloatTensor(self.pso_data[0:72]).reshape(8, 1, 3, 3)
        self.conv2.weight.data = torch.FloatTensor(self.pso_data[72:360]).reshape(4, 8, 3, 3)
        self.conv3.weight.data = torch.FloatTensor(self.pso_data[360:432]).res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值