我正在尝试在 Tensorflow 2.1中转换shape
a 的属性,但出现此错误:Tensor
AttributeError: 'Tensor' object has no attribute 'numpy'
我已经检查过的输出tf.executing eagerly()
是True
,
一点上下文:我tf.data.Dataset
从 TFRecords 加载 a,然后应用map
. 映射函数正在尝试将shape
数据集样本之一的属性转换Tensor
为 numpy:
def _parse_and_decode(serialized_example):
""" parse and decode each image """
features = tf.io.parse_single_example(
serialized_example,
features={
'encoded_image': tf.io.FixedLenFeature([], tf.string),
'kp_flat': tf.io.VarLenFeature(tf.int64),
'kp_shape': tf.io.FixedLenFeature([3], tf.int64),
}
)
image = tf.io.decode_png(features['encoded_image'], dtype=tf.uint8)
image = tf.cast(image, tf.float32)
kp_shape = features['kp_shape']
kp_flat = tf.sparse.to_dense(features['kp_flat'])
kp = tf.reshape(kp_flat, kp_shape)
return image, kp
def read_tfrecords(records_dir, batch_size=1):
# Read dataset from tfrecords
tfrecords_files = glob.glob(os.path.join(records_dir, '*'))
dataset = tf.data.TFRecordDataset(tfrecords_files)
dataset = dataset.map(_parse_and_decode, num_parallel_calls=batch_size)
return dataset
def transform(img, labels):
img_shape = img.shape # type: <class 'tensorflow.python.framework.ops.Tensor'>`
img_shape = img_shape.numpy() # <-- Throws the error
# ...
dataset = read_tfrecords(records_dir)
这会引发错误:
dataset.map(transform, num_parallel_calls=1)
虽然这非常有效:
for img, labels in dataset.take(1):
print(img.shape.numpy())
编辑:尝试访问img.numpy()
而不是img.shape.numpy()
在变压器和上面的代码中导致相同的行为。
我检查了类型,img_shape
它是<class 'tensorflow.python.framework.ops.Tensor'>
。
有没有人在新版本的 Tensorflow 中解决了这类问题?