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

TensorFlow GRU层call()传入reset_after参数触发TypeError问题求助

报错原因
  • 你混淆了Keras层的初始化参数和调用参数的作用范围:reset_after、recurrent_activation、dropout、recurrent_dropout都属于GRU层的结构配置参数,必须在实例化层(也就是__init__方法中定义self.gru)的时候传入,层的call方法仅接收和单次前向传播相关的动态参数(比如输入张量、初始状态、training标记等),不识别结构配置参数,因此直接抛出参数不存在的错误。
  • 额外说明:你当前的参数配置本身存在矛盾:CuDNN加速的GRU要求recurrent_dropout必须为0,你设置recurrent_dropout=0.2的情况下,即使参数放对位置也无法触发CuDNN加速。
解决方案
  1. 将所有GRU结构配置参数从call方法的调用逻辑中移除,全部放到__init__的GRU实例化代码中。
  2. 根据你的需求选择适配的参数组合:
    • 优先开启CuDNN GPU加速:需关闭recurrent_dropout,仅保留输入侧dropout,初始化代码如下:
    self.gru = tf.keras.layers.GRU(rnn_units,
                                   return_sequences=True,
                                   return_state=True,
                                   reset_after=True,
                                   recurrent_activation='sigmoid',
                                   dropout=0.2,
                                   recurrent_dropout=0
                                   )
    
    • 必须使用recurrent_dropout做正则:放弃CuDNN加速,初始化代码如下:
    self.gru = tf.keras.layers.GRU(rnn_units,
                                   return_sequences=True,
                                   return_state=True,
                                   reset_after=True,
                                   recurrent_activation='sigmoid',
                                   dropout=0.2,
                                   recurrent_dropout=0.2
                                   )
    
  3. 修正call方法中GRU层的调用代码,仅保留动态参数即可:
x, states = self.gru(x, initial_state=states, training=training)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:01