张量和权重变化维度的求和
Summation of tensors and weights changing dimensions
我正在尝试在 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
一起工作,它应该与我假设的任何数量的样本一起工作?因此,为什么我很困惑。
我应该补充一下,我刚刚尝试了 +
运算符,我遇到了同样的问题。
biTensorVector
、normalTensorVector
的形状大概是(5,None)。所以添加它们得到 (5, None) 因为第二个维度是未知的。
self.b
的形状是 (None, 5)。添加 (5, None) 和 (None, 5) 总是得到 (5, 5) (或错误)。所以keras知道第二次相加的结果是(5, 5).
我正在尝试在 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
一起工作,它应该与我假设的任何数量的样本一起工作?因此,为什么我很困惑。
我应该补充一下,我刚刚尝试了 +
运算符,我遇到了同样的问题。
biTensorVector
、normalTensorVector
的形状大概是(5,None)。所以添加它们得到 (5, None) 因为第二个维度是未知的。
self.b
的形状是 (None, 5)。添加 (5, None) 和 (None, 5) 总是得到 (5, 5) (或错误)。所以keras知道第二次相加的结果是(5, 5).