【问题标题】:What does a -1 mean in the shape of a tensor input?-1 在张量输入的形状中意味着什么?
【发布时间】:2021-02-10 01:33:10
【问题描述】:

我有一个 TensorFlowJS 模型,其输入如下所示:

{"name":"dense_3_input","shape":[-1,25],"dtype":"float32"}

-1 是什么意思?

模型的构建方式是使用Dense(1, input_dim=25, activation="sigmoid"),所以我不知道 -1 来自哪里,也不知道如何正确创建它正在寻找的张量。

如果我通过一个张量

tf.tensor([0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1])

我收到此错误。

Error: The shape of dict['dense_3_input'] provided in model.execute(dict) must be [-1,25], but was [25]

当传递上述 25 0/1 的输入时,该模型在 python 中正常工作。转换为 TensorFlowJS 模型是否无法正常工作?任何见解将不胜感激。

【问题讨论】:

  • 尝试在您的列表周围添加另一个环绕的 []。 -1 表示变量/未确定的数字。
  • @mark-h 哇!谢谢!我假设我需要将我的数据映射到一个张量数组,而不是用我的数据数组创建一个张量。我会添加一个答案。
  • 太棒了,我也把我的作为答案加入了

标签: tensorflow tensorflow.js tensorflowjs-converter


【解决方案1】:

-1 在张量的维度中意味着将根据其他维度计算该维度的大小。张量形状应该是其他维度大小的乘积的倍数才能起作用

tensor size: 25, shape [-1, 25] => [1, 25]

                 shape [-1, 5] => [5, 5]

                 shape [-1, 3] => will not work

当我们不知道张量的大小但知道它将是某些值的倍数时,它很有用。

在问题的例子中,初始张量可以重塑:

  • tf.tensor([0, 1...]).reshape([-1, 25])

  • 可以直接构造成二维张量tf.tensor([[0, 1...]])

【讨论】:

  • 谢谢!我遇到了类似的问题,但我的有点不同,a_init(shape=(input_shape[-1], self.units),dtype='float32'),那么这里的input_shape[-1] 是什么意思?
【解决方案2】:

正如@mark-h 的评论中所述,问题是我使用tf.tensor([0, 1...]) 将单个值数组传递给张量。 [-1, 25] 表示存在数量不确定的数组,其中包含输入所期望的 25 个值。

将我的张量更改为 tf.tensor([[0, 1...]]) 解决了这个问题。

【讨论】:

    【解决方案3】:

    -1 表示一个不确定的数字,因为它可以是任何你想要的。

    如果你传入的是一个形状为[25]的张量,你需要加上括号,所以形状变成了[1,25],这将是有效的。

    试试:

    tf.tensor([[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]])
    

    【讨论】:

    • 你确定吗? null 不是形状占位符吗?
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2018-09-20
    • 2017-09-01
    • 2022-07-08
    • 1970-01-01
    • 2017-06-22
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多