gpt4 book ai didi

python - tensorflow 中具有未指定维度的张量

转载 作者:IT老高 更新时间:2023-10-28 20:31:35 29 4
gpt4 key购买 nike

我正在玩 tensorflow,但遇到了以下代码的问题:

def _init_parameters(self, input_data, labels):

# the input shape is (batch_size, input_size)
input_size = tf.shape(input_data)[1]

# labels in one-hot format have shape (batch_size, num_classes)
num_classes = tf.shape(labels)[1]

stddev = 1.0 / tf.cast(input_size, tf.float32)

w_shape = tf.pack([input_size, num_classes], 'w-shape')
normal_dist = tf.truncated_normal(w_shape, stddev=stddev, name='normaldist')
self.w = tf.Variable(normal_dist, name='weights')

(我正在使用 this question 中建议的 tf.pack ,因为我遇到了同样的错误)

当我运行它时(从调用此脚本的较大脚本中),我收到此错误:

ValueError: initial_value must have a shape specified: Tensor("normaldist:0", shape=TensorShape([Dimension(None), Dimension(None)]), dtype=float32)

我试图在交互式 shell 中复制该过程。实际上,normal_dist 的尺寸是未指定的,尽管提供的值确实存在:

In [70]: input_size.eval()
Out[70]: 4

In [71]: num_classes.eval()
Out[71]: 3

In [72]: w_shape.eval()
Out[72]: array([4, 3], dtype=int32)

In [73]: normal_dist.eval()
Out[73]:
array([[-0.27035281, -0.223277 , 0.14694688],
[-0.16527176, 0.02180306, 0.00807841],
[ 0.22624688, 0.36425814, -0.03099642],
[ 0.25575709, -0.02765726, -0.26169327]], dtype=float32)

In [78]: normal_dist.get_shape()
Out[78]: TensorShape([Dimension(None), Dimension(None)])

这很奇怪。 Tensorflow 生成向量但不能说出它的形状。我做错了吗?

最佳答案

正如 Ishamael 所说,所有张量都具有静态形状,这在图构建时是已知的,并且可以使用 Tensor.get_shape() 访问;和一个动态形状,它只在运行时才知道,可以通过获取张量的值或将其传递给像 tf.shape 这样的运算符来访问.在许多情况下,静态形状和动态形状是相同的,但它们可以不同 - 静态形状可以部分定义 - 以便让动态形状从一个步骤到下一步发生变化。

在您的代码中,normal_dist 具有部分定义的静态形状,因为 w_shape 是一个计算值。 (TensorFlow 有时会尝试评估这些计算值在图构建时,但它卡在 tf.pack。)它推断形状 TensorShape([Dimension(None), Dimension(None)]) ,意思是“行列数未知的矩阵”,因为它知道 w_shape 是一个长度为 2 的向量,所以得到的 normal_dist 必须是 2-维度。

您有两种选择来处理这个问题。您可以按照 Ishamael 的建议设置静态形状,但这需要您在图形构建时了解形状。例如,以下可能有效:

normal_dist.set_shape([input_data.get_shape()[1], labels.get_shape()[1]])

或者,您可以将 validate_shape=False 传递给 tf.Variable constructor .这允许您创建具有部分定义形状的变量,但它限制了稍后可以在图中推断的静态形状信息的数量。

关于python - tensorflow 中具有未指定维度的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com