Nic*_*ais 4 python keras tensorflow tensorflow-datasets tensorflow2.0
我以不等形状数组列表的形式标记数据:
array([array([1179, 6, 208, 2, 1625, 92, 9, 3870, 3, 2136, 435,
5, 2453, 2180, 44, 1, 226, 166, 3, 4409, 49, 6728,
...
10, 17, 1396, 106, 8002, 7968, 111, 33, 1130, 60, 181,
7988, 7974, 7970])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
以及各自的目标:
Out[74]: array([0, 0, 0, ..., 0, 0, 1], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将它们转换为 padded tf.data.Dataset(),但它不允许我将不相等的形状转换为张量。我会得到这个错误:
ValueError: Can't convert non-rectangular Python sequence to Tensor.
Run Code Online (Sandbox Code Playgroud)
完整的代码在这里。假设我的起点是在之后y = ...:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import tensorflow_datasets as tfds
import numpy as np
(train_data, test_data) = tfds.load('imdb_reviews/subwords8k',
split=(tfds.Split.TRAIN, tfds.Split.TEST),
as_supervised=True)
x = np.array(list(train_data.as_numpy_iterator()))[:, 0]
y = np.array(list(train_data.as_numpy_iterator()))[:, 1]
train_tensor = tf.data.Dataset.from_tensor_slices((x.tolist(), y))\
.padded_batch(batch_size=8, padded_shapes=([None], ()))
Run Code Online (Sandbox Code Playgroud)
我可以选择哪些选项将其转换为填充的批量张量?
如果您的数据存储在 Numpy 数组或 Python 列表中,那么您可以使用tf.data.Dataset.from_generator方法创建数据集,然后填充批次:
train_batches = tf.data.Dataset.from_generator(
lambda: iter(zip(x, y)),
output_types=(tf.int64, tf.int64)
).padded_batch(
batch_size=32,
padded_shapes=([None], ())
)
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用tensorflow_datasets.load函数,则无需使用as_numpy_iterator分离数据和标签,然后将它们放回数据集中!这是多余且低效的。返回的对象tensorflow_datasets.load已经是 的实例tf.data.Dataset。所以,你只需要对padded_batch它们使用:
train_batches = train_data.padded_batch(batch_size=32, padded_shapes=([None], []))
test_batches = test_data.padded_batch(batch_size=32, padded_shapes=([None], []))
Run Code Online (Sandbox Code Playgroud)
padded_shapes请注意,在 TensorFlow 2.2 及更高版本中,如果您只想将所有轴填充到批次中最长的轴(即默认行为),则不再需要提供参数。
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |