日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tensorflow2.X tf.data.Dataset详解

發布時間:2023/12/16 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow2.X tf.data.Dataset详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
tf.data.Dataset(variant_tensor)

tf.data.Dataset.from_tensor_slice

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3)) dataset = tf.data.Dataset.from_tensor_slices(aa) for element in dataset:print('element', element)

輸出:
element tf.Tensor([1 2 3], shape=(3,), dtype=int32)
element tf.Tensor([4 5 6], shape=(3,), dtype=int32)

from_tensors( tensors)

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3), name='data') dataset = tf.data.Dataset.from_tensors(aa) for element in dataset:print('element:', element)

輸出:
element: tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)

1.element_spec:數據集元素的類型說明。

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3), name='data') dataset = tf.data.Dataset.from_tensor_slices(aa) print('element_spec:',dataset.element_spec)

輸出:
element_spec: TensorSpec(shape=(3,), dtype=tf.int32, name=None)

2.as_numpy_iterator:使用as_numpy_iterator檢查數據集的內容

a = (1,2,3,4,5,6)
aa = tf.constant(a, shape=(2,3), name=‘data’)
dataset = tf.data.Dataset.from_tensor_slices(aa)
for element in dataset.as_numpy_iterator():
print(‘element:’, element)
輸出結果:
element: [1 2 3]
element: [4 5 6]

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3), name='data') dataset = tf.data.Dataset.from_tensor_slices(aa) print('list: ', list(dataset.as_numpy_iterator()))

輸出結果:
list: [array([1, 2, 3]), array([4, 5, 6])]

3.apply(transformation_func):為數據集提供轉換函數

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(6,), name='data') dataset = tf.data.Dataset.from_tensor_slices(aa) dataset = dataset.apply(dataset_fn) for element in dataset:print('element:', element)

輸出:
element: tf.Tensor(1, shape=(), dtype=int32)
element: tf.Tensor(2, shape=(), dtype=int32)
element: tf.Tensor(3, shape=(), dtype=int32)
element: tf.Tensor(4, shape=(), dtype=int32)

4.batch( batch_size, drop_remainder=False):數據集元素分批

dataset = tf.data.Dataset.range(8) dataset = dataset.batch(3) print(list(dataset.as_numpy_iterator()))

輸出結果:
[array([0, 1, 2], dtype=int64), array([3, 4, 5], dtype=int64), array([6, 7], dtype=int64)]

dataset = tf.data.Dataset.range(8) dataset = dataset.batch(3, True) print(list(dataset.as_numpy_iterator()))

輸出結果:
[array([0, 1, 2], dtype=int64), array([3, 4, 5], dtype=int64)]

5.cache( filename=’’):緩存數據集元素,緩存到文件或內層

dataset = tf.data.Dataset.range(5) dataset = dataset.map(lambda x: x**2) dataset = dataset.cache() #第一次讀取數據將使用“ range”和“ map”生成數據。 print(list(dataset.as_numpy_iterator())) #第2次從緩存中讀取 print(list(dataset.as_numpy_iterator()))

輸出結果:
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16]

dataset = tf.data.Dataset.range(5) dataset = dataset.cache("C:/Users/byroot/Desktop/test/dede") print(list(dataset.as_numpy_iterator()))dataset = tf.data.Dataset.range(10) dataset = dataset.cache("C:/Users/byroot/Desktop/test/dede") print(list(dataset.as_numpy_iterator()))

輸出結果:
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]

6.cardinality():返回數據集的元素總數。

dataset = tf.data.Dataset.range(66) print(dataset.cardinality().numpy())

輸出結果:
66

7.concatenate( dataset):連接數據集 組成新的數據集

a = tf.data.Dataset.range(1, 4) # ==> [ 1, 2, 3 ] b = tf.data.Dataset.range(4, 8) # ==> [ 4, 5, 6, 7 ] ds = a.concatenate(b) list(ds.as_numpy_iterator())

輸出結果:
[1, 2, 3, 4, 5, 6, 7]

8.enumerate( start=0):列舉數據集元素,從start序號開始

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3), name='data') dataset = tf.data.Dataset.from_tensor_slices(aa) dataset = dataset.enumerate(2) for element in dataset.as_numpy_iterator():print('element:', element)

輸出結果:
element: (2, array([1, 2, 3]))
element: (3, array([4, 5, 6]))

a = (1,2,3,4,5,6) aa = tf.constant(a, shape=(2,3), name='data') dataset = tf.data.Dataset.from_tensor_slices(aa) dataset = dataset.enumerate() for element in dataset.as_numpy_iterator():print('element:', element)

輸出結果:
element: (0, array([1, 2, 3]))
element: (1, array([4, 5, 6]))

9.filter(predicate):根據條件過濾元素

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3]) dataset = dataset.filter(lambda x: x < 3) print(list(dataset.as_numpy_iterator()))

輸出結果:
[1, 2]

def filter_fn(x):return tf.math.equal(x, 1) dataset = dataset.filter(filter_fn) print(list(dataset.as_numpy_iterator()))

輸出結果:
[1]

10.flat_map(map_func):將批次的數據集展平為其元素的數據集

dataset = tf.data.Dataset.from_tensor_slices([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) dataset = dataset.flat_map(lambda x: dataset.from_tensor_slices(x)) print(list(dataset.as_numpy_iterator()))

輸出結果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

11.from_generator( generator, output_types, output_shapes=None, args=None)創建一個數據集,其元素由generator生成。

def gen():for i in itertools.count(1):yield (i, [1] * i)dataset = tf.data.Dataset.from_generator(gen,(tf.int64, tf.int64),(tf.TensorShape([]), tf.TensorShape([None])))print(list(dataset.take(3).as_numpy_iterator()))

輸出結果:
[(1, array([1], dtype=int64)), (2, array([1, 1], dtype=int64)), (3, array([1, 1, 1], dtype=int64))]

12.interleave( map_func, cycle_length=None, block_length=None, num_parallel_calls=None, deterministic=None)

map_func:對數據進行處理的函數
cycle_length:并行程度,即并行的去同時處理dataset中的多少個元素
block_length:從上面變換的結果中,每次取多少個結果出來

dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ] dataset = dataset.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(6),cycle_length=3, block_length=4) print(list(dataset.as_numpy_iterator()))

輸出結果:
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 5, 5]

dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ] dataset = dataset.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(6),cycle_length=2, block_length=4) print(list(dataset.as_numpy_iterator()))

輸出結果:
[1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5]

13.list_files( file_pattern, shuffle=None, seed=None):列出所有文件

files = tf.data.Dataset.list_files("C:/Users/byroot/Desktop/test/dede*.txt") print(list(files.as_numpy_iterator())) 輸出結果: [b'C:\\Users\\byroot\\Desktop\\test\\dede3.txt', b'C:\\Users\\byroot\\Desktop\\test\\dede2.txt', b'C:\\Users\\byroot\\Desktop\\test\\dede1.txt']

14.map( map_func, num_parallel_calls=None, deterministic=None):

dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ] dataset = dataset.map(lambda x: x + 1) print(list(dataset.as_numpy_iterator()))

輸出:
[2, 3, 4, 5, 6]

elements = [(1, "foo"), (2, "bar"), (3, "baz")] dataset = tf.data.Dataset.from_generator(lambda: elements, (tf.int32, tf.string)) result = dataset.map(lambda x_int, y_str: x_int) print(list(result.as_numpy_iterator()))

輸出結果:
[1, 2, 3]

elements = ([{"a": 1, "b": "foo"},{"a": 2, "b": "bar"},{"a": 3, "b": "baz"}]) dataset = tf.data.Dataset.from_generator(lambda: elements, {"a": tf.int32, "b": tf.string}) result = dataset.map(lambda d: str(d["a"]) + d["b"]) print(list(result.as_numpy_iterator()))

輸出結果:
[b’Tensor(“args_0:0”, dtype=int32)foo’, b’Tensor(“args_0:0”, dtype=int32)bar’, b’Tensor(“args_0:0”, dtype=int32)baz’]

dataset = tf.data.Dataset.range(3) # `map_func` returns two `tf.Tensor` objects. def g(x):return tf.constant(37.0), tf.constant(["Foo", "Bar", "Baz"]) result = dataset.map(g) print(list(result.as_numpy_iterator()))

輸出結果:
[(37.0, array([b’Foo’, b’Bar’, b’Baz’], dtype=object)), (37.0, array([b’Foo’, b’Bar’, b’Baz’], dtype=object)), (37.0, array([b’Foo’, b’Bar’, b’Baz’], dtype=object))]

15.padded_batch(batch_size, padded_shapes=None, padding_values=None, drop_remainder=False)

A = (tf.data.Dataset.range(1, 5, output_type=tf.int32).map(lambda x: tf.fill([x], x))) print(list(A.as_numpy_iterator()))#[array([1]), array([2, 2]), array([3, 3, 3]), array([4, 4, 4, 4])] # Pad to the smallest per-batch size that fits all elements. B = A.padded_batch(3) print(list(B.as_numpy_iterator()))

輸出:
[array([[1, 0, 0],
[2, 2, 0],
[3, 3, 3]]), array([[4, 4, 4, 4]])]

A = (tf.data.Dataset.range(1, 5, output_type=tf.int32).map(lambda x: tf.fill([x], x))) # Pad to the smallest per-batch size that fits all elements. B = A.padded_batch(2) print(list(B.as_numpy_iterator()))

輸出結果:
[array([[1, 0],
[2, 2]]), array([[3, 3, 3, 0],
[4, 4, 4, 4]])]

A = (tf.data.Dataset.range(1, 5, output_type=tf.int32).map(lambda x: tf.fill([x], x))) C = A.padded_batch(2, padded_shapes=5) print(list(C.as_numpy_iterator()))

輸出結果:
[array([[1, 0, 0, 0, 0],
[2, 2, 0, 0, 0]]), array([[3, 3, 3, 0, 0],
[4, 4, 4, 4, 0]])]

A = (tf.data.Dataset.range(1, 5, output_type=tf.int32).map(lambda x: tf.fill([x], x))) # Pad with a custom value. D = A.padded_batch(2, padded_shapes=5, padding_values=6) print(list(D.as_numpy_iterator()))

輸出:
[array([[1, 6, 6, 6, 6],
[2, 2, 6, 6, 6]]), array([[3, 3, 3, 6, 6],
[4, 4, 4, 4, 6]])]

elements = [([1, 2, 3], [10]),([4, 5], [11, 12])] dataset = tf.data.Dataset.from_generator(lambda: iter(elements), (tf.int32, tf.int32)) dataset = dataset.padded_batch(2,padded_shapes=([4], [None]),padding_values=(-1, 100)) print(list(dataset.as_numpy_iterator()))

輸出:
[(array([[ 1, 2, 3, -1],
[ 4, 5, -1, -1]]), array([[ 10, 100],
[ 11, 12]]))]

elements = [([1, 2, 3], [10]),([4, 5], [11, 12])] dataset = tf.data.Dataset.from_generator(lambda: iter(elements), (tf.int32, tf.int32)) dataset = dataset.padded_batch(2,padded_shapes=([4], [3]),padding_values=(-1, 100)) print(list(dataset.as_numpy_iterator()))

輸出:
[(array([[ 1, 2, 3, -1],
[ 4, 5, -1, -1]]), array([[ 10, 100, 100],
[ 11, 12, 100]]))]

16.prefetch( buffer_size):創建一個數據集,該數據集從另外數據集中預取元素。

dataset = tf.data.Dataset.range(5)#[0, 1, 2, 3, 4] dataset = dataset.prefetch(1) print(list(dataset.as_numpy_iterator()))

輸出:
[0, 1, 2, 3, 4]

17.reduce(initial_state, reduce_func)

將輸入數據集簡化為單個元素。
轉換會在輸入數據集的每個元素上依次調用reduce_func,直到數據集用完為止,以其內部狀態匯總信息。 initial_state參數用于初始狀態,并返回最終狀態作為結果。

deded = tf.data.Dataset.range(5).reduce(np.int64(0), lambda x, _: x + 1).numpy() print(deded)#5 frfr = tf.data.Dataset.range(5).reduce(np.int64(0), lambda x, y: x + y).numpy() print(frfr)#10

18.shard(num_shards, index)

A = tf.data.Dataset.range(10) B = A.shard(num_shards=3, index=0) print(list(B.as_numpy_iterator()))C = A.shard(num_shards=3, index=1) print(list(C.as_numpy_iterator()))D = A.shard(num_shards=3, index=2) print(list(D.as_numpy_iterator()))

輸出:
[0, 3, 6, 9]
[1, 4, 7]
[2, 5, 8]

19.shuffle(buffer_size, seed=None, reshuffle_each_iteration=None):隨機重新排列此數據集的元素。

dataset = tf.data.Dataset.range(5) dataset = dataset.shuffle(2, reshuffle_each_iteration=True) print(list(dataset.as_numpy_iterator())) dataset = dataset.repeat(2) # doctest: +SKIP print(list(dataset.as_numpy_iterator()))

輸出:
[1, 2, 0, 3, 4]
[1, 0, 3, 2, 4, 1, 0, 3, 2, 4]

dataset = tf.data.Dataset.range(5) dataset = dataset.shuffle(3, reshuffle_each_iteration=True) print(list(dataset.as_numpy_iterator())) dataset = dataset.repeat(2) # doctest: +SKIP print(list(dataset.as_numpy_iterator()))

輸出結果:
[2, 3, 0, 4, 1]
[1, 3, 0, 2, 4, 0, 1, 2, 4, 3]

20.skip(count)

dataset = tf.data.Dataset.range(10) dataset = dataset.skip(7) print(list(dataset.as_numpy_iterator()))

輸出:
[7, 8, 9]

21.take(count)

dataset = tf.data.Dataset.range(10) dataset = dataset.take(3) print(list(dataset.as_numpy_iterator()))

輸出:
[0, 1, 2]

22.unbatch():將數據集的元素拆分為多個元素。

elements = [ [1, 2, 3], [1, 2], [1, 2, 3, 4] ] dataset = tf.data.Dataset.from_generator(lambda: elements, tf.int64) dataset = dataset.unbatch() for e in dataset.as_numpy_iterator():print(e)

輸出:
1
2
3
1
2
1
2
3
4

23.window( size, shift=None, stride=1, drop_remainder=False)

size:表示要合并到窗口中的輸入數據集的元素數。 必須是積極的。
shift:表示窗口在每次迭代中移動的輸入元素的數量。 默認為大小。 必須是積極的。
stride:表示滑動窗口中輸入元素的跨度。 必須是積極的。 默認值1表示“保留每個輸入元素”。
drop_remainder:tf.bool標量tf.Tensor,表示如果最后一個窗口的大小小于size,是否應刪除最后一個窗口。

dataset = tf.data.Dataset.range(7).window(2) for window in dataset:print(list(window.as_numpy_iterator()))

輸出:
[0, 1]
[2, 3]
[4, 5]
[6]

dataset = tf.data.Dataset.range(7).window(2, 2, 1, True) for window in dataset:print(list(window.as_numpy_iterator()))

輸出:
[0, 1]
[2, 3]
[4, 5]

dataset = tf.data.Dataset.range(7).window(2, 2, 2, True) for window in dataset:print(list(window.as_numpy_iterator()))

輸出:
[0, 2]
[2, 4]
[4, 6]

總結

以上是生活随笔為你收集整理的tensorflow2.X tf.data.Dataset详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。