首页 > 解决方案 > 如何在训练期间将一些样本扔到一个小批量中

问题描述

我正在使用 AdamOptimizer 来训练一个简单的 DNN 网络。(我使用的是 tf1.4 版本)。而且我想在训练期间
丢弃一批中的一些坏样本。假设我在一个批次中有 4096 个样本,我想丢弃 96 个样本,只使用剩余的 4000 个样本来计算损失并进行反向传播。
我怎样才能做到这一点?
代码设置非常简单,如下所示:


lables = tf.reshape(labels, [batch_size, 1])
logits = tf.reshape(logits, [batch_size, 1])
loss_vector = tf.nn.sigmoid_cross_entropy_with_logits(multi_class_labels=labels,
                                               logits=logits)
loss_scalar = tf.reduce_mean(loss_vector)
opt = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = opt.minimize(loss_scalar, global_step=global_step)

一种可能的解决方案是在 loss_vector 之后和 reduce_mean 之前进行掩码操作。但我不确定这是否是正确的解决方案,我对引擎盖下发生的事情有一些疑问:

  1. 在最小化()操作中,由于输入参数是标量,它如何知道某些输入样本被屏蔽掉了?
  2. 在最小化()操作中,会发生多少次反向传播?
  3. 训练过程中,样本是一个一个的输入到图中,TF怎么知道哪些该保留哪些该丢弃?

标签: pythontensorflow

解决方案


推荐阅读