为什么用圆括号指定形状而用方括号指定形状时Tensorflow会抱怨?

2024-03-29 09:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

当我指定tf.random_normal([1])时,它工作得很好,但是当我指定tf.random_normal((1))时,我得到

ValueError: Shape must be rank 1 but is rank 0 for 'random_normal_24/RandomStandardNormal' (op: 'RandomStandardNormal') with input shapes: [].

这种行为适用于许多需要在Tensorflow中输入形状的函数。在

这正常吗?还是虫子?许多教程和书籍都使用圆括号,但似乎方括号应该是基于行为的正确方式。在


Tags: forinputistfwithrandombebut
2条回答

在python中,具有单个元素的元组是标量。因此(1) == 1。在

如果要显式地创建包含单个元素的元组,则必须使用语法:(1,)。在

相反,在python中,可以使用方括号:[1] != 1创建一个包含单个元素的列表。在

但是,在定义形状时,您应该更倾向于使用元组而不是列表,因为在python中,创建元组比创建数组更有效(tuple是一个不可变的对象,而list不是)。因此,python解释器可以进行很多优化,比如常量折叠和移动对象,而列表必须被复制)。在

这不是一个特定于TensorFlow的问题。在Python中,(1)1相同。您需要一个难看的语法(1,)来指定一个元素元组。在

相关问题 更多 >