出现如下错误,请分析解释并修订:=========================测试initialize_parameters========================= --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-36-096690e695dd> in <module> 4 5 with tf.Session() as sess: ----> 6 parameters = initialize_parameters() 7 print("W1 = " + str(parameters["W1"])) 8 print("b1 = " + str(parameters["b1"])) <ipython-input-35-4bb77d2b9420> in initialize_parameters() 26 27 # 使用Keras中的Xavier初始化器替代旧版的contrib.layers.xavier_initializer ---> 28 xav_init = tf.keras.initializers.GlorotNormal(seed=1) # Xavier初始化等同于Glorot Normal 29 zero_init = tf.zeros_initializer() # 零值初始化保持不变 30 /opt/conda/lib/python3.6/site-packages/tensorflow_core/python/util/module_wrapper.py in __getattr__(self, name) 191 def __getattr__(self, name): 192 try: --> 193 attr = getattr(self._tfmw_wrapped_module, name) 194 except AttributeError: 195 if not self._tfmw_public_apis: AttributeError: module 'tensorflow.python.keras.api._v1.keras.initializers' has no attribute 'GlorotNormal'
时间: 2025-04-04 20:05:09 浏览: 44
这个错误的原因在于 TensorFlow 版本不匹配。`tf.keras.initializers.GlorotNormal` 是在较新的 TensorFlow 2.x 中引入的特性,但在您使用的环境中可能是基于 TensorFlow 1.x 或者是一个过渡版本,这导致无法找到该属性。
为了修复这个问题,我们需要调整初始化器的方式以使其适应当前环境。以下是解决方案及其详细说明:
---
### 修改后的代码
如果您的环境确实是 **TensorFlow 1.x** 或低版本的 TensorFlow 2.x,则可以用以下方法解决此问题:
```python
import tensorflow as tf
def initialize_parameters():
# 确保使用的是正确的Xavier初始化器和零值初始化器
xav_init = tf.glorot_normal_initializer(seed=1) # 在TF1.x中叫做glorot_normal_initializer
zero_init = tf.zeros_initializer()
# 定义变量
W1 = tf.get_variable("W1", [25, 12288], initializer=xav_init)
b1 = tf.get_variable("b1", [25, 1], initializer=zero_init)
W2 = tf.get_variable("W2", [12, 25], initializer=xav_init)
b2 = tf.get_variable("b2", [12, 1], initializer=zero_init)
W3 = tf.get_variable("W3", [6, 12], initializer=xav_init)
b3 = tf.get_variable("b3", [6, 1], initializer=zero_init)
parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2,
"W3": W3,
"b3": b3}
return parameters
with tf.Session() as sess:
parameters = initialize_parameters()
print("W1 = " + str(parameters["W1"].eval()))
print("b1 = " + str(parameters["b1"].eval()))
```
---
### 错误原因分析及修正思路
1. **错误的根本原因是版本差异**
- 原始代码尝试调用 `tf.keras.initializers.GlorotNormal`,这是 TensorFlow 2.x 才有的 API。
- 而您运行的环境很可能是较低版本(如 TensorFlow 1.x),其中并没有提供这样的模块路径或名称。
2. **修正方案的核心思想**
- 替换掉不可用的新式初始化器函数名 (`GlorotNormal`),改用老式的初始化器函数名 (`tf.glorot_normal_initializer`),这种方式兼容 TensorFLow 1.x 和部分早期版本的 TensorFlow 2.x。
3. **注意兼容性**
- 如果将来切换到 TensorFlow 2.x 环境,请直接采用原生的 Keras 接口(即 `tf.keras.initializers.GlorotNormal`)。这样能充分利用新框架的优势,并避免不必要的复杂性。
---
####
阅读全文
相关推荐



















