2016-11-30 4 views
0

В настоящее время я использую Tensorflow для глубокого обучения, которое я разрабатываю на работе. Я не могу вдаваться в подробности о приложении, но код - это что-то вроде настроенного Word2Vec, но стоимость каждого слова-вектора-представления должна вычисляться индивидуально. :График тензорного потока слишком большой

def cost_function(word_vector, other_word_vectors): 
    # cost for a single training example needs to be computed 
    # separately, and it depends on the vector representations 
    # of some other words, depending on the training instance 
    return tf.nn.tanh(some_mathematical_computation) 

Проблема такого подхода заключается в том, что размер графа стремится взорвать столько, что compute_gradients операция занимает много времени. Мало того, время, затраченное на compute_gradients, линейно увеличивается с размером графика. tf.stop_gradients по какой-то причине не помогает. Что помогает инициализировать новый tf.Graph и новый tf.Session() для каждых нескольких учебных экземпляров (называйте это мини-пакетом), выполняя несколько таких вычислений параллельно (называйте это мини-пакетной коллекцией), а затем комбинируя результаты и сохраняя их для следующей мини-партии-коллекции.

def learning(mini_batch): 
    with tf.Graph().as_default() as g: 
     with tf.Session() as sess: 
      self.perform_learning_on_batch(mini_batch, sess) 
      return resultant_model 

def collection_learn(mini_batch_collection): 
    models = run_learning_in_parallel() 
    return combine_model(models) 

def master(): 
    initial_model = something 
    for mini_batch_collection in dataset: 
     new_model = collection_learn(mini_batch_collection) 

Есть ли лучший способ для параллельного обучения для такого приложения?

ответ

0

Динамическое создание графиков TensorFlow не будет столь же эффективным, как повторное использование графика. Не смотря на ваш код, трудно сказать больше, но сворачивание всей условной логики в TensorFlow заставит эту проблему уйти. В противном случае попытка кэширования генерируемых графов также должна помочь.

+0

Спасибо ... Я закончил использовать простую реализацию снижения градиента ливня. Не удалось обойти это с помощью тензорного потока. Любая идея, если бы помочь динамическая структура графика (например, pytorch)? –

+0

Линейный спуск градиента - это то, что модели тензорного потока используются по умолчанию для распределенного и параллельного обучения. –

Смежные вопросы