You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch遗传算法复制最优模型后所有个体变异参数相同如何解决

问题根因

你当前的种群填充代码只是把同一个best_model对象的引用重复加入列表,整个种群列表的所有元素都指向内存中同一个模型实例,对任意一个元素的修改都会同步作用到所有其他元素上,这就是变异后所有模型参数完全一致的原因。

修复方案

需要每次添加最优模型时,独立生成一个参数和最优模型完全一致的新实例,也就是对模型做深拷贝:

  1. 导入Python标准库的copy模块
  2. 把种群填充的代码行替换为深拷贝版本

修改后的完整可运行代码如下:

import torch
import torch.nn as nn
import copy # 新增导入

torch.manual_seed(0) # 保证可复现

population_size = 3
population = [nn.Linear(1,1) for _ in range(population_size)]
input = torch.rand(1)
def mutate(m):
    if type(m) == nn.Linear:
        m.weight = nn.Parameter(m.weight+torch.randn(m.weight.shape))
        m.bias = nn.Parameter(m.bias+torch.randn(m.bias.shape))

for i in population:
    print (i(input))

population = [x.apply(mutate) for x in population]

print ('\n')

for i in population:
    print (i(input))

best_model = population[0]
# 替换原来的种群填充行,每次都深拷贝生成独立的新模型
population = [copy.deepcopy(best_model) for _ in range(population_size)]

# 此时变异每个模型都是独立操作不同的实例
population = [x.apply(mutate) for x in population]

print ('\n')
for i in population:
    print (i(input)) # 三个输出会各不相同,符合预期

运行修改后的代码,最后一步打印的三个结果会互不相同,说明每个模型已经可以独立变异。

内容的提问来源于stack exchange,提问作者Cmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:24:01