我使用来自Tensorflow加载项的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,?].完整的错误和我的代码可以看到这里。
是什么导致了这些维度的翻转?
发布于 2021-08-06 16:33:35
我希望你已经解决了这个问题。如果您还没有解决这个问题,我建议您在VGG16的输出中添加一个扁平层。下面是一个例子:
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")我希望这将是有用的。致以敬意,
安德里亚
https://stackoverflow.com/questions/67125078
复制相似问题