Keras optimizer.get_updates(), K.function()のパラメータで[]は何ですか?

投稿者: Anonymous

    def critic_optimizer(self):
        #placeholder for target???
        disc_reward = K.placeholder(shape=(None,1))
        #output of critic
        value = self.critic.output
        #MSE error
        loss = K.mean(K.square(disc_reward - value))

        optimizer = Adam(lr=self.critic_lr)
        #what is the second [] parameter???
        updates = optimizer.get_updates(self.critic.trainable_weights, [], loss)
        #[] is an empty list for outputs?  https://www.tensorflow.org/api_docs/python/tf/keras/backend/function
        train = K.function([self.critic.input, disc_reward], [], updates=updates)
        return train

上記はA2CをKerasにて書いた例ですが、パラメータの[]が何か分かりません。

以下のメソッドでコールされてます。

def train_model(self, state, action, target, advantages):

        self.actor.optimizer([state, action, advantages])

        self.critic.optimizer([state, target])

ソースはこちらです:ソース

Keras及びTensorflowのドキュメンテーションを読んでも、メソッドのパラメータが全部載っていませんでしたが、メソッドのパラメーターが載っている書籍がありましたら教えてください。

解決

https://keras.io/backend/#function

このFunctionには「出力がない」という意味ではないでしょうか。


Tensorflowバックエンドの実装が
https://github.com/keras-team/keras/blob/2.2.4/keras/backend/tensorflow_backend.py#L2724
https://github.com/keras-team/keras/blob/2.2.4/keras/backend/tensorflow_backend.py#L2509
このあたりです。

outputs[]を指定すると、ここ
https://github.com/keras-team/keras/blob/2.2.4/keras/backend/tensorflow_backend.py#L2676

    return fetched[:len(self.outputs)]

に効いてきて、長さ0のリストが返ります。

「出力がない」という指定なので出力を見る必要はなく、実際質問のコードでも

    self.critic.optimizer([state, target])

として結果を捨てています。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *