Python FutureWarning:要堆栈的数组必须作为“传递”;顺序;类型,例如列表或元组。不推荐对非序列可重用项的支持
我正试图将Tensorflow数据集转换为NumPy数组,但收到了一条弃用警告: FutureWarning:要堆栈的数组必须作为“序列”类型(如列表或元组)传递。从NumPy 1.16开始,不推荐对生成器等非序列可重用项的支持,这将在将来引发错误 做这件事的“新”方式是什么 具有Python FutureWarning:要堆栈的数组必须作为“传递”;顺序;类型,例如列表或元组。不推荐对非序列可重用项的支持,python,numpy,tensorflow,Python,Numpy,Tensorflow,我正试图将Tensorflow数据集转换为NumPy数组,但收到了一条弃用警告: FutureWarning:要堆栈的数组必须作为“序列”类型(如列表或元组)传递。从NumPy 1.16开始,不推荐对生成器等非序列可重用项的支持,这将在将来引发错误 做这件事的“新”方式是什么 具有numpy 1.18.1和tensorflow 2.1.0的可复制示例: import tensorflow as tf import numpy as np ds = tf.data.Dataset.enumera
numpy 1.18.1
和tensorflow 2.1.0
的可复制示例:
import tensorflow as tf
import numpy as np
ds = tf.data.Dataset.enumerate(tf.data.Dataset.range(20, 40))
np.vstack(ds)
我尝试的是:我一次只能用一个维度来做
np.fromiter(ds.map(lambda x, y: x), float)
仅使用
numpy
,并使用生成器表达式:
In [105]: np.stack((np.ones(3) for _ in range(3)))
/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:3254:
FutureWarning: arrays to stack must be passed as a "sequence" type
such as list or tuple. Support for non-sequence iterables such as generators
is deprecated as of NumPy 1.16 and will raise an error in the future.:
Out[105]:
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
使用列表理解创建数组:
In [106]: np.stack([np.ones(3) for _ in range(3)])
Out[106]:
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
我不使用tf
,因此只能猜测:
tf.data.Dataset.enumerate(tf.data.Dataset.range(20, 40))
生产。但据我所知,tensorflow在“生成器式”的张量、潜在执行(管道?)和“渴望式”求值之间有区别,在求值过程中,实际求值的张量和张量表达式生成数组(或类似对象)<代码>np。堆栈尝试将其输入转换为数组
Tf.data.Dataset.enumerate的代码示例:
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.enumerate(start=5)
for element in dataset.as_numpy_iterator():
print(element)
枚举
返回一个interator。您仍然需要对其进行迭代,就像在这个for
循环中一样。或列表(数据集)
您可以使用tfds
执行此操作,您可以查看文档
示例如何使用:
array = tfds.as_numpy(ds)