geatpy自定义初始的x值、自定义初始基因

声明:非官方解决方法,不一定正规哈

自定义初始值解决方法

以官方的第一个案例:https://github.com/geatpy-dev/geatpy/tree/master/geatpy/demo/soea_demo/soea_demo1 为例:

  1. 进入类MyProblem
  2. 在函数def __init__(self):里增加一个第一次运行的判断:
    self.flag = 0
    
  3. 在函数def aimFunc(self, pop)里修改,把pop.Phen改为想要的初始值,比如设置出值全0:
    if self.flag == 0:
    	pop.Phen = np.ones(shape=(40, 1))
    	self.flag += 1
    

修改后的MyProblem如下:

class MyProblem(ea.Problem):  # 继承Problem父类
    def __init__(self):
        name = 'MyProblem'  # 初始化name(函数名称,可以随意设置)
        M = 1  # 初始化M(目标维数)
        maxormins = [-1]  # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)
        Dim = 1  # 初始化Dim(决策变量维数)
        varTypes = [0] * Dim  # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)
        lb = [-100]  # 决策变量下界
        ub = [2]  # 决策变量上界
        lbin = [1] * Dim  # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)
        ubin = [1] * Dim  # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)
        # 调用父类构造方法完成实例化
        self.flag = 0
        ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)

    def aimFunc(self, pop):  # 目标函数
        if self.flag == 0: # 只有第一次运行时执行这个:
            pop.Phen = np.ones(shape=(40, 1))
            self.flag += 1
        x = pop.Phen  # shape = (40,1)
        pop.ObjV = x * 2 + 2.0  # 计算目标函数值,赋值给pop种群对象的ObjV属性

针对多个未知数,需要改为:

pop.Phen = np.array([[-0.00000000, -0.00000000, -4.83461801, -0.00000000, -2.43279756, -1.34510964] for i in range(50)] # 50个种群,6个未知数x

修改前,随机生成的值会从函数值为 -80开始增加:
在这里插入图片描述
修改后,直接从4开始:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PyTorch 自定义初始化可以使得我们初始化参数时更加灵活和个性化。在使用 PyTorch 进行深度学习任务时,初始设置是非常重要的。参数初始一定程度上影响了算法的收敛速度和精度。因此,自定义初始化是非常有必要的。 PyTorch的torch.nn.init模块提供了一些常用的初始化方式,包括常见的随机初始化(uniform,normal等),常数初始化(zeros,ones等),以及一些比较有名的网络模型特定的初始化方式,如Xavier初始化,Kaiming初始化等。但有时候我们需要自定义初始化方法,此时就需要自定义初始化。 我们可以使用register_parameter方法为模型中的每一个参数自定义初始化方法,如下所示: ``` class CustomModel(nn.Module): def __init__(self): super(CustomModel, self).__init__() self.weight = nn.Parameter(torch.Tensor(1, 100)) self.register_parameter('bias', None) self.reset_parameters() def reset_parameters(self): stdv = 1. / math.sqrt(self.weight.size(1)) self.weight.data.uniform_(-stdv, stdv) model = CustomModel() ``` 在以上的代码中,我们可以看到,在模型内部通过register_parameter方法给bias参数设置为None,表明bias参数不需要在初始化时使用模型默认的初始化方式。然后在通过重载reset_parameters方法,我们自己进行参数初始化。 通过这种自定义初始化方式,我们可以方便地对网络模型中的参数进行初始化,从而达到优化模型的目的,提高算法的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值