过去每当我使用tensorflow的keras api时,我都会使用model.compile指定模型的损失函数。我目前正在开发一个存储库,它使用“add_loss”来指定 model.call 内部的损失函数。或者至少,这就是我假设正在发生的事情,因为我找不到此方法的任何文档(即https://www.tensorflow.org/api_docs/python/tf/keras/Model上没有),并且我也找不到任何使用此方法的教程。更重要的是,我什至无法弄清楚它在源代码中的定义位置。
class TRPO(Model):
def __init__(self, obs_dim, act_dim, hid1_mult, kl_targ, init_logvar, eta, **kwargs):
super(TRPO, self).__init__(**kwargs)
self.kl_targ = kl_targ
self.eta = eta
self.beta = self.add_weight('beta', initializer='zeros', trainable=False)
self.policy = PolicyNN(obs_dim, act_dim, hid1_mult, init_logvar)
self.logprob = LogProb()
self.kl_entropy = KLEntropy()
def call(self, inputs):
obs, act, adv, old_means, old_logvars, old_logp = inputs
new_means, new_logvars = self.policy(obs)
new_logp = self.logprob([act, new_means, new_logvars])
kl, entropy = self.kl_entropy([old_means, old_logvars,
new_means, new_logvars])
loss1 = -K.mean(adv * K.exp(new_logp - old_logp))
loss2 = K.mean(self.beta * …Run Code Online (Sandbox Code Playgroud) test = [1,2]
one, two = test[:]
print(one)
print(two)
one, two = test[:] if len(test)==2 else test[0], test[0]
print(one)
print(two)
Run Code Online (Sandbox Code Playgroud)
输出:
1, 2, [1, 2], 1
Run Code Online (Sandbox Code Playgroud)
为什么在if用作三元运算符时解压列表会失败?