tensorflow:如何用张量来做类似numpy的范围

时间:2016-06-29 10:03:34

标签: tensorflow

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

在上面的代码中,我定义了一个模型,并希望在arg2中的范围,如numpy: for i in numpy.range(arg2),问题是arg2是一个张量,也许来自tf.placeholder(),但是怎么样?

编辑:

实际上,我的代码是这样的:

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"]()]] cpu上的同样问题

所以我不知道,在tensorflow中很多函数如tf.range()只接受python int,但是当我有张量时,我能做什么?这让我发疯了

再次编辑

例如,教程中的mnist,模型在函数inference()中定义,该函数使用tf.placeholder(),位于fully_connected_feed.py的函数run_training()中,如果您想使用此代码获取张量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

再次编辑

我正在做一些关于nlp的事情,arg1可能是长度不同的句子,所以我做了一个max_len,同时记录了arg2中的实际长度

它是使用lstm的编码器和解码器程序,在解码器的阶段,我想添加一个注意模型,所以我必须知道句子的长度来计算句子中每个单词的重要性,但长度是张量,我做不了类似的事情:

for x in len:
   #do something

1 个答案:

答案 0 :(得分: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