ValueError: Dimensions must be equal, but are 32 and 4 for ‘{{node model/distance_layer/sub}} = Sub

在这里插入图片描述

错误表明 inputsanchors的形状在执行减法运算时仍然不兼容。这种情况通常发生在尝试对两个形状不同的张量进行元素操作时。我们需要进一步调整这两个张量的形状以确保它们能够正确进行广播。

从错误信息看,inputs 的形状变为 [32, 1, 8] (批次大小为32,维度为8),而 anchors 的形状为 [4, 8, 1]。我们希望 anchors 在第一维(类别维度)进行广播,因此需要调整 anchors 的形状,使其在中间维度广播,而不是在最后一个维度。

下面是正确调整形状的方法:

class DistanceLayer(Layer):
    def __init__(self, anchors, **kwargs):
        super().__init__(**kwargs)
        self.anchors = tf.constant(anchors, dtype=tf.float32)

    def call(self, inputs):
        # 将inputs形状从[batch_size, features]调整为[batch_size, 1, features]
        inputs_expanded = tf.expand_dims(inputs, 1)
        # 将anchors形状从[num_anchors, features, 1]调整为[1, num_anchors, features]
        anchors_expanded = tf.expand_dims(self.anchors, 0)
        # 计算距离
        return tf.norm(inputs_expanded - anchors_expanded, axis=2)

这段代码中,我添加了对 anchors 的形状调整,使其在计算中可以正确地在批次大小维度进行广播。现在,当你的 inputsanchors 进行减法运算时,anchors 在批次大小维度(batch_size)自动扩展,而 inputs 在类别维度(num_anchors)自动扩展,使得两者能够在特征维度(features)上对齐并进行计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值