用法
window(
size, shift=None, stride=1, drop_remainder=False, name=None
)
參數
-
size
tf.int64
標量tf.Tensor
,表示要組合到窗口中的輸入數據集元素的數量。必須是積極的。 -
shift
(可選。)tf.int64
標量tf.Tensor
,表示窗口在每次迭代中移動的輸入元素的數量。默認為size
。必須是積極的。 -
stride
(可選。)tf.int64
標量tf.Tensor
,表示滑動窗口中輸入元素的步幅。必須是積極的。默認值 1 表示“保留每個輸入元素”。 -
drop_remainder
(可選。)一個tf.bool
標量tf.Tensor
,表示如果最後一個窗口的大小小於size
,則是否應刪除它們。 -
name
(可選。) tf.data 操作的名稱。
返回
-
Dataset
ADataset
的(嵌套的)窗口。每個窗口都是平麵元素的有限數據集。
返回"windows" 的數據集。
每個"window" 都是一個數據集,其中包含輸入數據集元素的子集。這些是大小為 size
的有限數據集(如果沒有足夠的輸入元素來填充窗口並且 drop_remainder
評估為 False
,則可能更少)。
例如:
dataset = tf.data.Dataset.range(7).window(3)
for window in dataset:
print(window)
<...Dataset element_spec=TensorSpec(shape=(), dtype=tf.int64, name=None)>
<...Dataset element_spec=TensorSpec(shape=(), dtype=tf.int64, name=None)>
<...Dataset element_spec=TensorSpec(shape=(), dtype=tf.int64, name=None)>
由於窗口是數據集,因此可以對其進行迭代:
for window in dataset:
print([item.numpy() for item in window])
[0, 1, 2]
[3, 4, 5]
[6]
轉移
shift
參數確定要在每個窗口的開始之間移動的輸入元素的數量。如果窗口和元素都從 0 開始編號,則窗口 k
中的第一個元素將是輸入數據集的元素 k * shift
。特別是,第一個窗口的第一個元素將始終是輸入數據集的第一個元素。
dataset = tf.data.Dataset.range(7).window(3, shift=1,
drop_remainder=True)
for window in dataset:
print(list(window.as_numpy_iterator()))
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
跨步
stride
參數確定窗口內輸入元素之間的步幅。
dataset = tf.data.Dataset.range(7).window(3, shift=1, stride=2,
drop_remainder=True)
for window in dataset:
print(list(window.as_numpy_iterator()))
[0, 2, 4]
[1, 3, 5]
[2, 4, 6]
嵌套元素
當window
轉換應用於元素是嵌套結構的數據集時,它會生成一個數據集,其中元素具有相同的嵌套結構,但每個葉子都被一個窗口替換。換句話說,嵌套應用在窗口之外,而不是在窗口內部。
類型簽名是:
def window(
self:Dataset[Nest[T]], ...
) -> Dataset[Nest[Dataset[T]]]
將 window
應用於 Dataset
的元組給出一個窗口元組:
dataset = tf.data.Dataset.from_tensor_slices(([1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]))
dataset = dataset.window(2)
windows = next(iter(dataset))
windows
(<...Dataset element_spec=TensorSpec(shape=(), dtype=tf.int32, name=None)>,
<...Dataset element_spec=TensorSpec(shape=(), dtype=tf.int32, name=None)>)
def to_numpy(ds):
return list(ds.as_numpy_iterator())
for windows in dataset:
print(to_numpy(windows[0]), to_numpy(windows[1]))
[1, 2] [6, 7]
[3, 4] [8, 9]
[5] [10]
將 window
應用於字典的 Dataset
會給出 Datasets
的字典:
dataset = tf.data.Dataset.from_tensor_slices({'a':[1, 2, 3],
'b':[4, 5, 6],
'c':[7, 8, 9]})
dataset = dataset.window(2)
def to_numpy(ds):
return list(ds.as_numpy_iterator())
for windows in dataset:
print(tf.nest.map_structure(to_numpy, windows))
{'a':[1, 2], 'b':[4, 5], 'c':[7, 8]}
{'a':[3], 'b':[6], 'c':[9]}
展平窗口數據集
Dataset.flat_map
和 Dataset.interleave
方法可用於將窗口數據集展平為單個數據集。
flat_map
的參數是一個從數據集中獲取元素並返回 Dataset
的函數。 flat_map
按順序將生成的數據集鏈接在一起。
例如,要將每個窗口變成密集張量:
size = 3
dataset = tf.data.Dataset.range(7).window(size, shift=1,
drop_remainder=True)
batched = dataset.flat_map(lambda x:x.batch(3))
for batch in batched:
print(batch.numpy())
[0 1 2]
[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]
相關用法
- Python tf.data.TextLineDataset.with_options用法及代碼示例
- Python tf.data.TextLineDataset.reduce用法及代碼示例
- Python tf.data.TextLineDataset.as_numpy_iterator用法及代碼示例
- Python tf.data.TextLineDataset.random用法及代碼示例
- Python tf.data.TextLineDataset.take_while用法及代碼示例
- Python tf.data.TextLineDataset.from_tensor_slices用法及代碼示例
- Python tf.data.TextLineDataset.take用法及代碼示例
- Python tf.data.TextLineDataset.apply用法及代碼示例
- Python tf.data.TextLineDataset.batch用法及代碼示例
- Python tf.data.TextLineDataset.skip用法及代碼示例
- Python tf.data.TextLineDataset.from_generator用法及代碼示例
- Python tf.data.TextLineDataset.padded_batch用法及代碼示例
- Python tf.data.TextLineDataset.concatenate用法及代碼示例
- Python tf.data.TextLineDataset.get_single_element用法及代碼示例
- Python tf.data.TextLineDataset.interleave用法及代碼示例
- Python tf.data.TextLineDataset.scan用法及代碼示例
- Python tf.data.TextLineDataset.bucket_by_sequence_length用法及代碼示例
- Python tf.data.TextLineDataset.choose_from_datasets用法及代碼示例
- Python tf.data.TextLineDataset.prefetch用法及代碼示例
- Python tf.data.TextLineDataset.group_by_window用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.data.TextLineDataset.window。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。