1

TensorFlow 插件损失

我使用上述文章研究 Triplet Loss。标签的数字是从 0 到 9 尝试下面的代码。

for images_batch, labels_batch in train_dataset:
print('images batch shape:', images_batch.shape)
print('labels batch', labels_batch.shape)
print(labels_batch)
break

然后我确认模型如下所示?

型号:“sequential_1”
_________________________________________________________________
层(类型)输出形状参数#   
==================================================== ================
conv2d_2 (Conv2D) (无, 28, 28, 64) 320       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (无, 14, 14, 64) 0         
_________________________________________________________________
dropout_2(辍学)(无,14,14,64)0         
_________________________________________________________________
conv2d_3 (Conv2D) (无, 14, 14, 32) 8224      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (无, 7, 7, 32) 0         
_________________________________________________________________
dropout_3(辍学)(无,7,7,32)0         
_________________________________________________________________
flatten_1(展平)(无,1568)0         
_________________________________________________________________
dense_1(密集)(无,256)401664    
_________________________________________________________________
lambda_1 (Lambda) (无, 256) 0         
==================================================== ================
总参数:410,208
可训练参数:410,208
不可训练参数:0
_________________________________________________________________

但是,我有一个问题。最后一层的输出数字 256 是什么意思?我认为一般来说,当我们使用 MNIST 时,输出层的编号为 10,并将输出的编号更改为分类的、单热的。在这种情况下,我真的不知道为什么输出层的数字是256,标签仍然像0到9。请详细说明一下。

4

1 回答 1

0

正如在 FaceNet 论文中首次介绍的那样,TripletLoss 是一种损失函数,它训练神经网络紧密嵌入同一类的特征,同时最大化不同类嵌入之间的距离。为此,选择一个锚点以及一个负样本和一个正样本。

这是教程的第一行。模型的输出不是分类,而是可以可视化的嵌入。
正如上面引用中提到的,这个神经网络的目的是学习参数,使不同类的嵌入之间的距离最大。

如果您向下滚动教程,您可以看到可视化的嵌入。您可以将嵌入视为多维空间上的点。每个示例都有自己的标签,反过来,也会有自己的嵌入。

您可以使用这些嵌入而不是图像来训练您的分类器。

于 2020-08-30T04:38:08.273 回答