在训练时调整Tensorflow nce_loss中的样本数

时间:2018-05-07 16:59:33

标签: python tensorflow machine-learning loss-function

我想在训练神经网络时调整采样率来测试一些东西,看看会发生什么。为了实现这一点,我的想法是使用相同的计算图为每次迭代创建一个新的损失和优化器。

def optimize(self, negative_sampling_rate):
    return tf.train.GradientDescentOptimizer(self.learning_rate).minimize(self.calc_loss(negative_sampling_rate))

def calc_loss(self, negative_sampling_rate):
    return tf.reduce_mean(tf.nn.nce_loss(
        weights=self.graph.prediction_weights,
        biases=self.graph.prediction_bias,
        labels=self.graph.labels,
        inputs=self.graph.hidden,
        num_sampled=negative_sampling_rate,
        num_classes=self.graph.prediction_weights.shape[1])
    )

def train(self, batch_inputs, batch_labels, negative_sampling_rate):
    feed_dict = {self.graph.X: batch_inputs, self.graph.labels: batch_labels}
    _, loss_val = self.session.run(
        [self.optimize(negative_sampling_rate), self.calc_loss(negative_sampling_rate)], feed_dict=feed_dict
    )
    return loss_val

但是我对优化器有点担心。我听说优化器有内部变量,在每次训练迭代更改。是对所有优化器还是仅对某些或某些优化器都是如此,如果是这样的话,哪种优化器可用于此方法?

然后应该训练神经网络,如:

for step in range(training_steps):
    NN.train(inputs, labels, compute_sampling_rate(step))

1 个答案:

答案 0 :(得分:1)

首先,应该可以更改nce丢失中的样本数,而不会导致优化器出现问题。某些优化器存储的内部变量与图表中可训练变量的历史梯度有关。

其次,如果您确实想要因某种原因重置优化器的状态,我这样做的方法是将优化器放在变量范围内。每当我想重置它,那么我运行. in Pane op。

reset_optimizer