TensorFlow Keras指定He Uniform权重初始化器报错问题咨询
报错原因分析
第一个报错:ValueError: Could not interpret initializer identifier: 0
该报错的核心原因是你当前使用的TensorFlow版本低于2.2版本,早期版本中tf.keras.initializers.he_uniform()的API实现存在缺陷,调用后返回值被识别为数值0而非可调用的初始化器对象,因此层无法识别合法的初始化器配置,抛出对应错误。
第二个报错:module 'tensorflow_core.keras.initializers' has no attribute 'HeUniform'
HeUniform作为类形式的初始化器入口,是TensorFlow 2.2版本才正式加入tf.keras.initializers公开模块的API,低于该版本的TensorFlow没有导出该类,因此会提示模块不存在对应属性。
he_uniform()和HeUniform()的区别
- 功能完全一致:二者底层逻辑完全相同,都是实现He均匀分布权重初始化的API,生成的权重分布没有任何差异。
- 调用形式不同:
he_uniform()是函数形式的快捷调用入口,HeUniform()是类形式的调用入口,后者支持实例化后自定义参数(比如随机种子seed)复用,使用灵活度更高。 - 版本兼容性不同:
he_uniform()最早在TensorFlow 2.0版本就已加入,但2.2版本前实现存在bug;HeUniform()仅支持TensorFlow 2.2及以上版本。
适配方案
如果不打算升级TensorFlow版本,使用字符串标识符写法即可兼容所有版本,无报错:
Dense(64, input_shape=input_shape, kernel_initializer='he_uniform')
如果需要自定义初始化器参数(比如固定随机种子),可以用通用兼容写法:
# 以设置随机种子为42为例 Dense(64, input_shape=input_shape, kernel_initializer=tf.keras.initializers.get('he_uniform')(seed=42))
如果可以升级环境,将TensorFlow升级到2.2及以上版本后,你提到的两种写法都可以正常运行。
内容的提问来源于stack exchange,提问作者mankojag
相关产品推荐
相关产品推荐

