Распределить обучение в tensorflow1.4: Распределение обучения не работает, если конечная операция (OP) не является оптимизатором. как я могу его запустить? - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь использовать кластер тензорного потока для обучения модели рекомендаций. Последний метод обновления модели рекомендаций не основан на градиенте, поэтому я вручную вычисляю параметры отклика модели, а затем назначаю параметры. Код следующий:

def single_meta_task(self,indata,global_step,scope_name):
    meta_train_predict_1=[]
    meta_train_loss_1=[]
    task_update_ops_1=[]
    meta_train_target_1=[]
    # task_1
    input=indata[0]
    meta_train_predict_1.append(self.basemodel.forward(input[0][0]))
    self.weights = self.basemodel.get_para(scope_name)
    with tf.control_dependencies(list(self.weights.values())):
        meta_train_target_1.append(input[0][1])
        meta_train_loss_1.append(tf.reduce_mean(self.basemodel.loss_fn(meta_train_target_1[0], meta_train_predict_1[0])))
        task_update_ops_1.append(self.task_optimizer.minimize(loss=meta_train_loss_1[0],global_step=global_step))
    # if update more than one step:
    for i in range(1, self._num_updates):
        with tf.control_dependencies([task_update_ops_1[i-1]]):
            meta_train_predict_1.append(self.basemodel.forward(input[i][0]))
            meta_train_target_1.append(input[i][1])
            meta_train_loss_1.append(tf.reduce_mean(self.basemodel.loss_fn(meta_train_target_1[i], meta_train_predict_1[i])))
            task_update_ops_1.append(self.task_optimizer.minimize(loss=meta_train_loss_1[i],global_step=global_step))
    with tf.control_dependencies([task_update_ops_1[-1]]):
        self.update_weights_1=self.basemodel.get_para(scope_name)
        self.new_weights_1=self.get_new_weights(self.weights,scope_name,self.lr_maml) # the update parameter function
        weight_update_op=self.basemodel.set_para(self.new_weights,scope_name)

Я запускаю weight_update_op в tf.train.MonitoredTrainingSession с кластером tenorflow, но я получил

step: 38 meta_train_loss: 0.6931472 auc: 0.0 auc total: 0.5 time: 57.1792571545
step: 39 meta_train_loss: 0.6931472 auc: 0.5 auc total: 0.5 time: 18.3862159252
step: 40 meta_train_loss: 0.6931472 auc: 0.5 auc total: 0.5 time: 11.3142118454
step: 41 meta_train_loss: 0.6931472 auc: 0.5 auc total: 0.5 time: 12.2699699402

, что означает, что параметры не обновляются и график не отображается.

я меняю поезд распределения на местный одиночный поезд vai tf.Session , тот же код работает хорошо.

может кто-нибудь сказать мне, почему? и как я могу использовать команду распространения, если конечный OP не является оптимизатором?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...