' call'有什么区别? vs' __致电__'张量流中的RNN方法?

时间:2018-04-01 21:34:39

标签: tensorflow methods call lstm rnn

我知道what__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]

1 个答案:

答案 0 :(得分:-1)

在tensorflow2.0中,如果通过子类化tf.keras.Model定义网络,则需要在call()中实现模型的前向传递。

https://www.tensorflow.org/api_docs/python/tf/keras/Model