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

TensorFlow 1.8.0中Wide and Deep模型结果不稳定,随机种子失效求助

解决TensorFlow 1.8.0中Wide&Deep模型随机种子不生效的问题

这个问题我之前在TensorFlow 1.x版本里也碰到过,核心原因是你用的Estimator框架(也就是DNNLinearCombinedClassifier)并不会自动继承你提前设置的全局随机种子,得单独给它的配置指定种子才行。

为什么tf.set_random_seed(1234)没生效?

  • tf.set_random_seed()是设置TensorFlow的图级随机种子,但DNNLinearCombinedClassifier作为Estimator,会自动创建属于自己的独立计算图,它默认不会读取你在外部设置的全局种子。
  • 从你贴的日志里_tf_random_seed: None就能看出来,Estimator的配置里根本没拿到你设置的1234,所以每次运行都会生成新的随机初始化参数、dropout(如果启用的话)等,导致结果不一致。

怎么让模型结果稳定?

你需要显式创建一个RunConfig对象,把随机种子传进去,再传给分类器。另外还要固定Python和NumPy的随机种子,避免数据处理环节的随机性影响结果。

修改后的代码示例

import tensorflow as tf
import tempfile
import random
import numpy as np

# 固定Python全局随机种子(处理非TensorFlow的随机操作)
random.seed(1234)
# 固定NumPy随机种子(如果用NumPy做数据处理的话)
np.random.seed(1234)
# 固定TensorFlow图级种子(保险补充)
tf.set_random_seed(1234)

# 创建RunConfig,显式设置tf_random_seed给Estimator用
config = tf.contrib.learn.RunConfig(tf_random_seed=1234)

model_dir = tempfile.mkdtemp()
m = tf.contrib.learn.DNNLinearCombinedClassifier(
    model_dir=model_dir,
    linear_feature_columns=wide_columns,
    dnn_feature_columns=deep_columns,
    dnn_hidden_units=[100, 50],
    config=config  # 传入自定义配置覆盖默认值
)

验证生效

运行修改后的代码后,再看日志会发现_tf_random_seed已经变成1234了,这时候每次运行的初始化参数、训练过程的随机操作都会固定,模型的准确率结果就能稳定下来。

额外注意点

如果你的数据加载过程中有随机shuffle(比如用tf.data.Dataset的shuffle方法),也要给它设置固定的seed参数,比如:

dataset = dataset.shuffle(buffer_size=1000, seed=1234)

内容的提问来源于stack exchange,提问作者Abdullah Al Imran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:01:18