he_uniform()报错:意外关键字参数'dtype' 求解决方案
问题:运行beam_train_model.py时触发TypeError: he_uniform() got an unexpected keyword argument 'dtype'
完整报错堆栈
(python37) F:\pythonProject>python beam_train_model.py --lidar_training_data 2023-03-29 16:00:44.660104: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found 2023-03-29 16:00:44.660248: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine. Traceback (most recent call last): File "beam_train_model.py", line 6, in <module> from models import Lidar2D File "F:\pythonProject\models.py", line 27, in <module> layers.Softmax() File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\training\tracking\base.py", line 456, in _method_wrapper result = method(self, *args, **kwargs) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\engine\sequential.py", line 129, in __init__ self.add(layer) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\training\tracking\base.py", line 456, in _method_wrapper result = method(self, *args, **kwargs) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\engine\sequential.py", line 213, in add output_tensor = layer(self.outputs[0]) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 897, in __call__ self._maybe_build(inputs) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 2416, in _maybe_build self.build(input_shapes) # pylint:disable=not-callable File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\layers\convolutional.py", line 163, in build previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\ops\variable_scope.py", line 2598, in default_variable_creator shape=shape) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\ops\variables.py", line 263, in __call__ return super(VariableMetaclass, cls).__call__(*args, **kwargs) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 1434, in __init__ distribute_strategy=distribute_strategy) File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 1567, in _init_from_args initial_value() if init_from_fn else initial_value, File "D:\ProgramData\Anaconda3\envs\python37\lib\site-packages\tensorflow\python\keras\engine\base_layer_utils.py", line 121, in <lambda> init_val = lambda: initializer(shape, dtype=dtype) TypeError: he_uniform() got an unexpected keyword argument 'dtype'
已尝试更新gym库、将代码中的(dtype=dtype)改为(dtype=None),问题未解决。
解决方案
1. 修复TensorFlow版本不兼容问题
这个报错核心是TensorFlow版本差异:旧版TF(尤其是1.x系列)的he_uniform初始化器不支持dtype参数,而代码或TF内部逻辑在调用时传递了该参数。
- 先查看当前TF版本:
pip show tensorflow - 升级到TF 2.x稳定版本(推荐2.5.0及以上,适配Python3.7):
若需要GPU支持,安装对应版本的pip install tensorflow==2.5.0 --upgradetensorflow-gpu即可。
2. 修改初始化器调用逻辑(不升级TF的情况)
如果无法升级TF,找到代码中使用he_uniform的位置(大概率在models.py的卷积层或全连接层定义中),调整调用方式:
- 原错误写法示例:
tf.initializers.he_uniform(dtype=tf.float32) - 修改为:
并将tf.keras.initializers.he_uniform()dtype参数移到层的定义中,比如:tf.keras.layers.Conv2D(64, (3,3), kernel_initializer=tf.keras.initializers.he_uniform(), dtype=tf.float32)
3. 替换初始化器(临时 workaround)
如果以上方法都无效,可以直接替换成兼容的初始化器,比如使用glorot_uniform:
tf.keras.initializers.glorot_uniform()
内容的提问来源于stack exchange,提问作者yi lin
相关产品推荐
相关产品推荐

