Tensorflow计算图表外的损失

时间:2019-05-04 18:53:16

标签: python tensorflow machine-learning loss gradients

是否可以在张量图之外计算损失? 我正在编写一个演员评论算法,当我要应用渐变时,我必须调用渐变正向传递。

在每一步上,我都调用前向通行证以获取我的登录信息和值:

# collect data
for _ in range(NUM_STEPS):
   sample = self.model.get_sample(s)
   pong_actions = self.get_action(sample)
   s_, r, d, i = self.envs.step(pong_actions)
   states.append(s)
   actions.append(np.expand_dims(sample, axis=1))
   rewards.append(np.expand_dims(np.float32(r), axis=1))
   masks.append(np.expand_dims(np.float32(1 - d), axis=1))

   # do some stuff....

再次更新网络

def update_network(self, states, qvals, actions):
    dict = {self.inputs: states, self.qvals: qvals, self.actions: actions}
    loss, _ = self.sess.run([self.loss, self.train_op], feed_dict=dict)
    return loss

如果要执行反向传播步骤,则必须使用收集的状态再次调用前向传递。

我已经拥有计算损失所需的所有值。第二个前向传递只是使网络参考权重。 如果我从图表中计算出损失并放入优化器中,则速度会更快。然后,我不必再次调用前向通行证。

更快:

# collect data
for _ in range(NUM_STEPS):
    dist, v = self.model.forward(s)
    pong_actions, a = self.get_action(dist)
    s_, r, d, i = self.envs.step(pong_actions)

    log_probs.append(dist.log_prob(a))
    entropies.append(dist.entropy())
    values.append(v)
    rewards.append(np.expand_dims(np.float32(r), axis=1))
    masks.append(np.expand_dims(np.float32(1 - d), axis=1))

   # do some stuff....

   # Calculate loss
   loss = ...
def update_network(self, loss):
    dict = {self.loss: loss}
    self.sess.run(self.train_op, feed_dict=dict)

工作流程为: 提要状态>使用pred采取操作>收集状态和操作>提要计算损失的状态和操作>反向传播

更好的工作流程是: 提要状态>使用pred采取措施>使用pred>反向传播器来计算损失

第二个工作流程的问题是错误ValueError: No gradients provided for any variable,因为缺少前向通行证

0 个答案:

没有答案