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

如何使贝叶斯优化后的神经网络训练每次运行MSE结果一致?

解决神经网络训练重复运行MSE结果一致的问题

要让神经网络每次训练得到完全相同的MSE,除了固定数据拆分,还需要彻底锁定所有可能引入随机性的环节,以下是具体操作:

  • 固定Python全局随机种子

    import random
    random.seed(42)  # 42可替换为任意固定整数
    
  • 固定NumPy随机种子

    import numpy as np
    np.random.seed(42)
    
  • 固定深度学习框架的随机种子
    针对主流框架分别处理:

    • TensorFlow/Keras:
      import tensorflow as tf
      tf.random.set_seed(42)
      # 若使用GPU,需开启确定性运算
      tf.config.experimental.enable_op_determinism()
      
    • PyTorch:
      import torch
      torch.manual_seed(42)
      torch.cuda.manual_seed(42)
      torch.cuda.manual_seed_all(42)  # 多GPU场景
      torch.backends.cudnn.deterministic = True
      torch.backends.cudnn.benchmark = False  # 关闭自动优化,避免随机算法选择
      
  • 消除数据预处理的随机性

    • 若使用标准化/归一化,确保每次训练用同一套统计量(比如提前保存训练集的均值、方差,每次加载复用,而非重新拟合)
    • 若有数据增强操作,固定增强过程的随机种子(比如裁剪、翻转的随机参数种子)
  • 锁定神经网络层的初始化随机性

    • Keras中给初始化器指定固定种子:
      from tensorflow.keras.layers import Dense
      Dense(64, kernel_initializer=tf.keras.initializers.HeNormal(seed=42))
      
    • PyTorch中手动固定初始化参数,或使用带种子的初始化器:
      from torch.nn import Linear
      layer = Linear(10, 64)
      torch.nn.init.xavier_uniform_(layer.weight, gain=1.0)  # 固定初始化方式
      
  • 消除训练过程的随机性

    • Dropout层指定固定种子:Keras中Dropout(0.2, seed=42);PyTorch结合全局种子即可
    • 批量训练时的shuffle操作固定种子:比如PyTorch的DataLoader设置generator=torch.Generator().manual_seed(42);Keras的fit方法依赖全局种子,已固定的话无需额外操作

完成以上所有步骤后,从数据加载、网络初始化到训练迭代的每个环节都将完全复现,每次运行训练代码都会得到相同的MSE值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:52