小编d_g*_*_gg的帖子

如何在 Keras 中使用“有状态”变量/张量创建自定义层?

我想请您帮助创建我的自定义图层。我想做的实际上非常简单:生成一个带有“状态”变量的输出层,即其值在每个批次中更新的张量。

为了使一切更清楚,以下是我想做的事情的片段:

def call(self, inputs)

   c = self.constant
   m = self.extra_constant

   update = inputs*m + c 
   X_new = self.X_old + update 

   outputs = X_new

   self.X_old = X_new   

   return outputs
Run Code Online (Sandbox Code Playgroud)

这里的想法很简单:

  • X_old中初始化为0def__ init__(self, ...)
  • update被计算为层输入的函数
  • 计算该层的输出(即X_new
  • 的值X_old设置为等于X_new,以便在下一批中X_old不再等于零,而是等于X_new前一批。

我发现它K.update可以完成这项工作,如示例所示:

 X_new = K.update(self.X_old, self.X_old + update)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果我尝试将层的输出定义为:

outputs = X_new

return outputs
Run Code Online (Sandbox Code Playgroud)

当我尝试 model.fit() 时,我会收到以下错误:

ValueError: An operation has `None` for gradient. Please make sure that all of …
Run Code Online (Sandbox Code Playgroud)

stateful layer keras tensorflow recurrent-neural-network

5
推荐指数
1
解决办法
2204
查看次数