2016-06-29 3 views
0
def inference(arg1, arg2): 
    #something to do 
    for x in np.range(arg2): 
      #to do 

в приведенной выше коде, я определить модель, и хочу ранжировать в arg2, как NumPy: for i in numpy.range(arg2), проблема заключается в том, что арг2 является тензором , может быть, от tf.placeholder(), но как ??tensorflow: как сделать NumPy-подобный диапазон с тензором

Edit:

на самом деле, мой следующий код:

def inference(arg1, arg2): 
    #to do 

    return loss 

loss = inference(arg1, arg2) 
#do something about tf.optimizer 

sess = tf.Session() 
sess.run() 

поэтому мой первый вопрос заключается в функции inference() я могу определить сеанс, и называем session.run() еще раз?

второй, я делаю это, но получается, что: tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'tower_3/train/shuffle_batch/random_shuffle_queue': Could not satisfy explicit device specification '/device:GPU:3' because no supported kernel for GPU devices is available. Colocation Debug Info: Colocation group had the following types and devices: QueueEnqueue: CPU QueueSize: CPU QueueClose: CPU QueueDequeueMany: CPU RandomShuffleQueue: CPU [[Node: tower_3/train/shuffle_batch/random_shuffle_queue = RandomShuffleQueue[capacity=3, component_types=[DT_INT64, DT_INT64, DT_INT64], container="", min_after_dequeue=0, seed=0, seed2=0, shapes=[[260], [], []], shared_name="", _device="/device:GPU:3"]()]] же проблема на процессоре

, так что я не знаю, в tensorflow многих функций, таких как tf.range() просто принять питона Int, но когда у меня есть тензор, что я могу сделать? Это сводит меня с ума

Edit снова

, например, mnist в учебники, модель определена в функции inference(), которая использует tf.placeholder() в funciont run_training() из fully_connected_feed.py, это кормить его изображения и этикетки, затем sess.run(), поэтому в функции inference(), если вы хотите, чтобы получить тензор images с этим кодом:

sess = tf.Session() 
sess.run(images) 

это получится:

tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [100,784] [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[100,784], _device="/job:localhost/replica:0/task:0/gpu:0"]()]] [[Node: Placeholder/_2 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_5_Placeholder", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

это выглядит как в тот момент, нет никакого изображения не было скормить тензора images

Edit снова снова

Я делаю что-то о NLP, то arg1, может быть предложение с разной длиной, поэтому я сделал max_len, а записываю реальную длину в arg2

это программа кодировщика и декодера с использованием lstm, в фазе декодера, я хочу добавить модель внимания, поэтому я должен знать длину предложение для вычисления импа ortance каждого слова в предложении, но длина является тензором, я не могу сделать что-то вроде:

for x in len: 
    #do something 
+0

Вам необходимо сначала оценить 'arg2', используя' session.run'. Это дает вам numpy массив назад –

+0

@YaroslavBulatov не работает – wang

+0

Не могли бы вы объяснить, что вы пытаетесь сделать с этим циклом? Вы можете легко создать 'tf.range (arg2)' или использовать цикл 'tf.while()'. Это зависит от того, что вы пытаетесь сделать внутри цикла –

ответ

0

Вы можете запустить оценку на тензор, чтобы получить его значение:

def inference(arg1, arg2): 
    with sess.as_default(): 
     #something to do 
     for x in np.range(arg2.eval()): 
      #to do 

или :

def inference(arg1, arg2): 
    #something to do 
    for x in np.range(sess.run(arg2)): 
     #to do 
Смежные вопросы