张量流中'call'与'__call__'RNN方法有什么区别?

问题描述 投票:1回答:1

我知道__call__是什么,但令我困惑的是,像BasicRNNCell或tf.nn.rnn_cell.MultiRNNCell之类的某些类具有此'call'方法而不是_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]
tensorflow methods call lstm rnn
1个回答
-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.