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
答案 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