56996

[code]

        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
    
[/code]

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

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

[code]

    def train_model(self, state, action, target, advantages):
    
            self.actor.optimizer([state, action, advantages])
    
            self.critic.optimizer([state, target])
    
[/code]

ソースはこちらです：[ソース](https://github.com/Hyeokreal/Actor-Critic-Continuous-
Keras/blob/master/a2c_continuous.py)

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


CC BY-SA 4.0
2019-07-28T08:53:44.817
56985
2019-07-29T00:11:59.870
29239
question
python keras
Keras optimizer.get_updates(), K.function()のパラメータで[]は何ですか？


回答になっていない気がしますが、  
helpだと、以下のように見えます。  
この領域、初心者につき、情報が間違えているかもしれません。

[code]

    >>> from tensorflow.keras.optimizers import RMSprop, SGD, Adam
    >>> help(Adam)
    Help on class Adam in module tensorflow.python.keras.optimizer_v2.adam:
    
    class Adam(tensorflow.python.keras.optimizer_v2.optimizer_v2.OptimizerV2)
     |  Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False, name='Adam', **kwargs)
     |
    
    ...
     |
     |  get_updates(self, loss, params)
     |
    
[/code]

バージョンでインターフェースが変更され、それの置き換えがデコレータで実施されているようです。

[code]

    def get_updates_arg_preprocessing(args, kwargs): 
    # Old interface: (params, constraints, loss) 
    # New interface: (loss, params) 
    if len(args) > 4:
    ...
    
    
[/code]

という置き換えです。よって、[ ]は、constraintsで制約のようですが、不要のようです。


CC BY-SA 4.0
2019-07-28T15:00:23.787
56989
2019-07-28T23:16:51.327
2019-07-28T23:16:51.327
31548
31548
56985
answer


<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>

[code]

        return fetched[:len(self.outputs)]
    
[/code]

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

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

[code]

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

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


CC BY-SA 4.0
2019-07-29T00:11:59.870
56996
2019-07-29T00:11:59.870
12274
56985
answer