【问题标题】:Tensorflow error in triplet_semihard_loss(): "ValueError: Dimensions must be equal"Triplet_semihard_loss() 中的 TensorFlow 错误:“ValueError:尺寸必须相等”
【发布时间】:2021-04-16 12:16:34
【问题描述】:

我正在使用来自 Tensorflow Addons 的 triplet_semihard_loss() 函数来计算特征嵌入的三元组损失。

我的 ResNet-50 的输出 embedding_output(None,8,8,2048)

我的稀疏地面实况标签y 的形状是(None),即批次的大小,使其成为预期的整数 ID 的一维向量。

在我的自定义train_step() 函数中,我调用triplet_semihard_loss,此时在代码执行中显示以下错误:

ValueError: Dimensions must be equal, but are 2048 and 8 for '{{node
 MatMul}} = BatchMatMulV2[T=DT_FLOAT, adj_x=false, adj_y=false](feature,
 transpose_1)' with input shapes: [?,8,8,2048], [2048,8,8,?].

完整的错误和我的代码可以看到here

是什么导致这些维度翻转?

【问题讨论】:

  • 问题解决了吗?我也有类似的问题

标签: tensorflow keras tensorflow2.0


【解决方案1】:

我希望你已经解决了这个问题。 如果你还没有解决,我建议你在 VGG16 的输出端添加一个 Flatten Layer。这是一个例子:

from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 244, 3))
flatten = layers.Flatten()(model.output)
dense = layers.Dense(256, activation=None)(flatten)
normalization = layers.Lambda(lambda x: tf.math.l2_normalize(x, axis=1))(dense)
embedding = Model(model.input, normalization, name="Embedding")

我希望这会很有用。 问候,

安德烈亚

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2021-11-08
    • 1970-01-01
    • 2021-08-29
    • 2019-10-11
    • 1970-01-01
    • 2021-11-22
    • 2021-08-18
    相关资源
    最近更新 更多