【问题标题】:Summation of tensors and weights changing dimensions张量和权重变化维度的总和
【发布时间】:2021-01-20 11:10:33
【问题描述】:

我正在尝试在 keras 中创建自定义层,但遇到了一个奇怪的问题。当我在返回答案之前对张量求和时,尺寸会发生变化。当我将偏置权重与两个张量相加时会发生这种情况,请参见下面的代码。

    summation = tf.math.add(biTensorVector, normalTensorVector)

    print('summation1 ',summation)

    summation = tf.math.add(summation,self.b)

    print('summation2 ',summation)

给了

summation1  Tensor("sequential/ntn/Add:0", shape=(5, None), dtype=float32)
summation2 Tensor("sequential/ntn/Add_1:0", shape=(5, 5), dtype=float32)

哪个肯定应该给出输出形状 (5,None)?

self.b 初始化为:

self.b = self.add_weight(name='b',shape=(self.k,),
                                  initializer='zeros',
                              trainable=True)

不应该将权重 self.b 广播为形状 (5,None) 然后添加到求和中,而不是删除 None 维度吗?任何澄清将不胜感激。

None 的大小来自层的初始化,假设它与None 一起使用它应该与我假设的任意数量的样本一起使用?所以我很困惑。

我应该补充一下,我刚刚尝试了 + 运算符,我遇到了同样的问题。

【问题讨论】:

    标签: python tensorflow keras keras-layer


    【解决方案1】:

    biTensorVectornormalTensorVector 的形状可能是 (5, None)。所以添加它们会得到 (5, None),因为第二维是未知的。

    self.b 的形状是(无,5)。添加 (5, None) 和 (None, 5) 总是得到 (5, 5) (或错误)。所以keras知道第二次加法的结果是(5, 5)。

    【讨论】:

    • self.b 的形状被声明为 (5, ),所以我不明白你的意思,抱歉?您对前两个张量的尺寸是正确的。我认为将 (5, ) 张量添加到 (5, None) 会保留尺寸吗?由于None 维度,我也无法平铺self.b
    • @Adsmeach 据我了解,keras 会自动添加批量维度
    • 问题已解决,我对第一个 summation 进行了转置,并保留了尺寸。不能说我理解为什么(因为 self.b 尺寸确实与转置前的总和一致)但我很高兴它现在正在工作。感谢您的帮助!
    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2017-09-05
    • 2022-07-26
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多