2016-11-08 3 views
0

Мне нужно построить свой график structrue в соответствии с текущими входными данными.Может ли тензорный поток изменять структуру графика на каждом шаге?

Это означает, что мне может понадобиться использовать разную структуру графика на каждом этапе поезда.

Но тензорный поток только построить график один раз и использовать его до конца.

Итак, есть ли решение этой проблемы?

простой код, как это:

import tensorflow as tf 

data = [[1, 2, 3], 
     [3, 2, 1]] 
index = 0 


def feed_dict(): 
    return data[index] 

with tf.Session() as sess: 
    embedding = tf.constant([[1, 1, 1], 
          [2, 2, 2], 
          [3, 3, 3], 
          [4, 4, 4]]) 

    words = tf.placeholder(tf.int32, [3]) 
    sess.run(tf.initialize_all_variables()) 
    embed = tf.nn.embedding_lookup(embedding, words) 
    word_list = tf.unpack(embed) 
    result = None 
    if tf.less(tf.reduce_sum(word_list[0]), tf.reduce_sum(word_list[1])).eval(feed_dict={words: feed_dict()}): 
     result = word_list[0] * word_list[1] + word_list[2] 
    else: 
     result = word_list[0] + word_list[1] * word_list[2] 

    for i in xrange(2): 
     print sess.run(result, feed_dict={words: feed_dict()}) 
     index += 1 

Я хочу это может напечатать:

[10, 10, 10] 

[10, 10, 10] 

, но я получаю:

[10, 10, 10] 

[14, 14, 14] 

Это говорит о том, что второй прогон использовать один и тот же график как первый.

Благодарим за чтение! Я буду благодарен за любую помощь.

+0

Я китайский студент, и это мой первый вопрос. Поэтому, надеюсь, я сделал свое описание понятным и правильным. если нет, сообщите мне об этом. Благодаря ! – haolang

+0

Вы можете изменить структуру графика на каждом шагу. Есть штраф за исполнение, возможно, дополнительные 20-100 мс за вызов вызова, в зависимости от размера вашего графика. –

+0

Спасибо! Но как я могу это сделать? Я имею в виду, как будет выглядеть код? – haolang

ответ

0

Ожидаемые результаты.

Во-первых, вы оцениваете tf.less, поэтому result будет всегда быть result = world_list[0] * word_list[1] + word_list[2].

Обратите внимание, что вложение основано на нулевом значении, поэтому в первом случае вы получаете 2 * 3 + 4 = 10, а во втором 4 * 3 + 2 = 14, как напечатано.

Если вы хотите оценить tf.less во время работы, используйте tf.cond.

+0

Спасибо за ваш ответ! Он должен работать! Я попробую это как можно скорее. – haolang

+0

Это сработало! Спасибо ! – haolang

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