在张量流中填充 tf.data.Dataset
padding in tf.data.Dataset in tensorflow
代码:
a=training_dataset.map(lambda x,y: (tf.pad(x,tf.constant([[13-int(tf.shape(x)[0]),0],[0,0]])),y))
给出以下错误:
TypeError: in user code:
<ipython-input-32-b25101c2110a>:1 None *
a=training_dataset.map(lambda x,y: (tf.pad(tensor=x,paddings=tf.constant([[13-int(tf.shape(x)[0]),0],[0,0]]),mode="CONSTANT"),y))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py:264 constant **
allow_broadcast=True)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py:282 _constant_impl
allow_broadcast=allow_broadcast))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_util.py:456 make_tensor_proto
_AssertCompatible(values, dtype)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_util.py:333 _AssertCompatible
raise TypeError("Expected any non-tensor type, got a tensor instead.")
TypeError: Expected any non-tensor type, got a tensor instead.
然而,当我使用:
a=training_dataset.map(lambda x,y: (tf.pad(x,tf.constant([[1,0],[0,0]])),y))
以上代码运行良好。
这使我得出结论,有问题:13-tf.shape(x)[0]
但无法理解是什么。
我尝试将 tf.shape(x)[0]
转换为 int(tf.shape(x)[0])
,但仍然出现相同的错误。
我希望代码做什么:
我有一个 tf.data.Dataset
对象,它具有大小为 (None,128)
的可变长度序列,其中第一个维度 (None) 小于 13。我想填充序列,使每个集合的大小为13 即 (13,128)
。
有没有其他方法(如果不能解决上述问题)?
有效的解决方案:
使用:
paddings = tf.concat(([[13-tf.shape(x)[0],0]], [[0,0]]), axis=0)
而不是使用:
paddings = tf.constant([[13-tf.shape(x)[0],0],[0,0]])
适合我。
但是,我还是想不通为什么后面那个不行。
代码:
a=training_dataset.map(lambda x,y: (tf.pad(x,tf.constant([[13-int(tf.shape(x)[0]),0],[0,0]])),y))
给出以下错误:
TypeError: in user code:
<ipython-input-32-b25101c2110a>:1 None *
a=training_dataset.map(lambda x,y: (tf.pad(tensor=x,paddings=tf.constant([[13-int(tf.shape(x)[0]),0],[0,0]]),mode="CONSTANT"),y))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py:264 constant **
allow_broadcast=True)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py:282 _constant_impl
allow_broadcast=allow_broadcast))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_util.py:456 make_tensor_proto
_AssertCompatible(values, dtype)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_util.py:333 _AssertCompatible
raise TypeError("Expected any non-tensor type, got a tensor instead.")
TypeError: Expected any non-tensor type, got a tensor instead.
然而,当我使用:
a=training_dataset.map(lambda x,y: (tf.pad(x,tf.constant([[1,0],[0,0]])),y))
以上代码运行良好。
这使我得出结论,有问题:13-tf.shape(x)[0]
但无法理解是什么。
我尝试将 tf.shape(x)[0]
转换为 int(tf.shape(x)[0])
,但仍然出现相同的错误。
我希望代码做什么:
我有一个 tf.data.Dataset
对象,它具有大小为 (None,128)
的可变长度序列,其中第一个维度 (None) 小于 13。我想填充序列,使每个集合的大小为13 即 (13,128)
。
有没有其他方法(如果不能解决上述问题)?
有效的解决方案:
使用:
paddings = tf.concat(([[13-tf.shape(x)[0],0]], [[0,0]]), axis=0)
而不是使用:
paddings = tf.constant([[13-tf.shape(x)[0],0],[0,0]])
适合我。 但是,我还是想不通为什么后面那个不行。