【发布时间】:2018-09-11 04:08:02
【问题描述】:
我知道__call__ 是什么,但让我感到困惑的是,像 BasicRNNCell 或 tf.nn.rnn_cell.MultiRNNCell 这样的类有这个“调用”方法而不是 _call__ 。这个普通的调用方法是什么?似乎是同一件事,如果不是,那么我没有看到它被调用。 我在没有任何线索的地方找到了这个解释。你能澄清一下吗?
“调用函数是单元逻辑所在的位置。RNNCell 的 __call_ 方法将包装你的调用方法并帮助确定范围和其他后勤工作。” 示例:
def call(self, inputs, state):
total_hidden_size = sum(c._h_above_size for c in self._cells)
# split out the part of the input that stores values of ha
raw_inp = inputs[:, :-total_hidden_size] # [B, I]
raw_h_aboves = inputs[:, -total_hidden_size:] # [B, sum(ha_l)]
ha_splits = [c._h_above_size for c in self._cells]
h_aboves = array_ops.split(value=raw_h_aboves,
num_or_size_splits=ha_splits, axis=1)
z_below = tf.ones([tf.shape(inputs)[0], 1]) # [B, 1]
raw_inp = array_ops.concat([raw_inp, z_below], axis=1) # [B, I + 1]
【问题讨论】:
-
我有类似的问题,并在源代码中弄清楚了。见stackoverflow.com/questions/50989895
标签: tensorflow methods call lstm rnn