我知道数据集具有output_shapes,但它显示如下:
数据集:DatasetV1Adapter形状:{item_id_hist:(?,?),标签:(?,?),client_platform:(?,),入口:(?,),item_id:(?,),标签:(? ,),模式:(?,),时间:(?,),user_id:(?,)},类型:{item_id_hist:tf.int64,标签:tf.int64,client_platform:tf.string,入口:tf。字符串,item_id:tf.int64,标签:tf.int64,模式:tf.int64,时间:tf.int64,user_id:tf.int64}
如何获取我的数据总数?
答案 0 :(得分:1)
代码如下:
dataset_to_numpy = list(dataset.as_numpy_iterator())
shape = tf.shape(dataset_to_numpy)
print(shape)
它产生这样的输出:
tf.Tensor([1080 64 64 3], shape=(4,), dtype=int32)
编写代码很简单,但迭代数据集仍然需要时间。
有关 tf.data.Dataset
的详细信息,请查看此 link。
答案 1 :(得分:0)
可以知道长度的地方:
tf.data.experimental.cardinality(dataset)
但是如果失败了,那么很重要的一点是,要知道(通常)对TensorFlow Dataset
进行了惰性计算,因此这意味着在一般情况下,我们可能需要遍历每条记录才能找到长度数据集。
例如,假设您已启用急切执行功能,并且它的一个很小的“玩具”数据集可以轻松地容纳在内存中,则可以将其enumerate
插入新列表并获取最后一个索引(然后添加1,因为列表是零索引):
dataset_length = [i for i,_ in enumerate(dataset)][-1] + 1
当然,这充其量是无效的,并且对于大型数据集,将完全失败,因为所有内容都需要放入列表的内存中。在这种情况下,除了遍历保持手动计数的记录外,我看不到其他任何选择。
答案 2 :(得分:0)
要查看元素形状和类型,请直接打印数据集元素,而不是使用 as_numpy_iterator。 - https://www.tensorflow.org/api_docs/python/tf/data/Dataset
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
for element in dataset:
print(element)
中断 for 循环以查看任何张量的形状
dataset = tf.data.Dataset.from_tensor_slices((X_s, y_s))
for element in dataset:
print(element)
break
此处输出两个 numpy 数组并打印每个数组的形状
(<tf.Tensor: shape=(13,), dtype=float32, numpy=
array([ 0.9521966 , 0.68100524, 1.973123 , 0.7639558 , -0.2563337 ,
2.394438 , -1.0058318 , 0.01544279, -0.69663054, 1.0873381 ,
-2.2745786 , -0.71442884, -2.1488726 ], dtype=float32)>, <tf.Tensor: shape=(2,), dtype=float32, numpy=array([0., 1.], dtype=float32)>)