首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Triplet_semihard_loss()中的Tensorflow错误:"ValueError:维度必须相等“

Triplet_semihard_loss()中的Tensorflow错误:"ValueError:维度必须相等“
EN

Stack Overflow用户
提问于 2021-04-16 12:16:34
回答 1查看 175关注 0票数 0

我使用来自Tensorflow加载项的triplet_semihard_loss()函数来计算特性嵌入的三重态损失。

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

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

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

代码语言:javascript
复制
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,?].

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

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

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 16:33:35

我希望你已经解决了这个问题。如果您还没有解决这个问题,我建议您在VGG16的输出中添加一个扁平层。下面是一个例子:

代码语言:javascript
复制
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")

我希望这将是有用的。致以敬意,

安德里亚

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67125078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档