Я хотел бы настроить частоту дискретизации во время обучения моей нейронной сети, чтобы протестировать некоторые вещи и посмотреть, что произойдет. Чтобы достичь этого, моя идея заключалась в создании новых потерь и оптимизатора для каждой итерации с использованием одного и того же графика вычислений.
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))