2017-01-13 2 views
2

Я пытаюсь определить двухмерный placeholder в тензорном потоке, однако я не знаю, размер этого заранее. Поэтому я определяю другое местозаполнитель, но, похоже, он вообще не работает. Вот минимальный пример:Использование placeholder как формы в тензорном потоке

import tensorflow as tf 

batchSize = tf.placeholder(tf.int32) 
input = tf.placeholder(tf.int32, [batchSize, 5]) 

Сообщение об ошибке:

Traceback (most recent call last): 
    File "C:/Users/v-zhaom/OneDrive/testconv/test_placeholder.py", line 5, in <module> 
    input = tf.placeholder(tf.int32, [batchSize, 5]) 
    File "C:\Python35\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1579, in placeholder 
    shape = tensor_shape.as_shape(shape) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 821, in as_shape 
    return TensorShape(shape) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 457, in __init__ 
    self._dims = [as_dimension(d) for d in dims_iter] 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 457, in <listcomp> 
    self._dims = [as_dimension(d) for d in dims_iter] 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 378, in as_dimension 
    return Dimension(value) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 33, in __init__ 
    self._value = int(value) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tensor' 

Затем я попытался собрать форму, так что у меня это:

input = tf.placeholder(tf.int32, tf.pack([batchSize, 5])) 

не работает либо:

Traceback (most recent call last): 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 451, in __init__ 
    dims_iter = iter(dims) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 510, in __iter__ 
    raise TypeError("'Tensor' object is not iterable.") 
TypeError: 'Tensor' object is not iterable. 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:/Users/v-zhaom/OneDrive/testconv/test_placeholder.py", line 5, in <module> 
    input = tf.placeholder(tf.int32, tf.pack([batchSize, 5])) 
    File "C:\Python35\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1579, in placeholder 
    shape = tensor_shape.as_shape(shape) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 821, in as_shape 
    return TensorShape(shape) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 454, in __init__ 
    self._dims = [as_dimension(dims)] 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 378, in as_dimension 
    return Dimension(value) 
    File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 33, in __init__ 
    self._value = int(value) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tensor' 

ответ

2

Используйте None, если у вас нет знать длину в каком-либо измерении заранее, например.

input = tf.placeholder(tf.int32, [None, 5]) 

Когда вы подаете этот заполнитель надлежащий массив формы (batch_size, 5), это динамическая форма будет установлена ​​правильно, т.е.

sess.run(tf.shape(input), feed_dict={input: np.zeros(dtype=np.int32, shape=(10, 5))}) 

вернется

array([10, 5], dtype=int32) 

, как и ожидалось

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