当我使用tf.print时,为什么张量形状是不同的



我制作了如下的简单数据集。

x_data = [[0, 0],
[0, 1],
[1, 0],
[1, 1]]
y_data = [[0],
[1],
[1],
[0]]

我使用from_tensor_slices对其进行切片:(我不知道张量切片函数的确切作用…)

dataset = tf.data.Dataset.from_tensor_slices((x_data, y_data)).batch(len(x_data))

当我使用print函数打印数据集时,它显示如下:

<BatchDataset shapes: ((None, 2), (None, 1)), types: (tf.int32, tf.int32)>

当我使用for循环打印时,它显示如下:

tf.Tensor(
[[0 0]
[0 1]
[1 0]
[1 1]], shape=(4, 2), dtype=int32) 
tf.Tensor(
[[0]
[1]
[1]
[0]], shape=(4, 1), dtype=int32)

问题是:

在我的想法中,张量形状应该是(4,2)(4,1),因为矩阵的行是4。

为什么当我使用print时,它显示(None,2)(None,1)

以及如何在没有for循环的情况下打印张量的值?

1-什么是from_tensor_slices

  • 使用from_tensor_slices时,它会根据输入张量创建张量流数据集

2-使用tensorflow数据集有什么好处?

  • 它使您使用数据集所需的一切都变得非常简单。也就是说,你可以很容易地将它们制作成shufflebatch,通过map对数据进行预处理,甚至可以像model.fit(dataset)等轻松地输入到你的模型中

3-为什么print函数显示BatchDataset而不是值?

  • dataset变量是BatchDataset类中的一个对象(因为您像dataset=from_tensor_slices((x,y)).batch(bs)一样定义它)。它不是一个python列表,渴望张量,numpy数组和。。。通过CCD_ 21函数查看其值

4-如何查看存储在tf数据集中的值?

  • 您可以使用此类中的take()函数来访问其值:
one_batch = dataset.take(1) # it takes 1 batch of data from dataset
# each batch is a tuple (like what you passed in from_tensor_slices) 
# you passed x and y. So, it returns a batch of x and y
for x,y in one_batch:      
print(x.shape)
print(y.shape)
#(4,2) (batch_size, num_features)
#(4,1) (batch_size, labels_dim)

5-BatchDataset对象变量中的(None,2)(None,1)是什么?

  • x=(None,2)y=(None,1)的大小。第一个维度是None。形状中的None意味着该数据集中x的第一个维度(第一个维度是样本数)可以是任何东西,但第二个维度是2。对于CCD_ 31也是同样的规则

6-如何在没有for循环的情况下打印值?

  • 实际上,对于性能处理,它的作用就像生成器。不能一次打印所有值。可以逐个(逐批)访问其元素

相关内容

  • 没有找到相关文章

最新更新