小编Jac*_*cob的帖子

Tensorflow、Keras:在多类分类中,准确率很高,但大多数类别的精度、召回率和 f1 分数为零

一般说明: 我的代码工作正常,但结果是有线的。我不知道问题出在

  • 网络结构,
  • 或者我向网络提供数据的方式,
  • 或其他任何东西。

我为这个错误苦苦挣扎了几个星期,到目前为止我已经改变了损失函数、优化器、数据生成器等,但我无法解决它。我很感激任何帮助。如果以下信息还不够,请告诉我。

研究领域: 我正在使用tensorflow、keras进行多类分类。该数据集有 36 个二元人类属性。我使用了resnet50,然后对于身体的每个部分(头部,上半身,下半身,鞋子,配件),我都在网络中添加了一个单独的分支。该网络有 1 个输入图像,带有 36 个标签和 36 个输出节点(具有 sigmoid 激活的 36 个定义层)。

问题: 问题是 keras 报告的准确性很高,但大多数输出​​的 f1-score 非常低或为零(即使我在编译网络时使用 f1-score 作为指标,f1-socre验证非常糟糕)。

a训练结束后,当我在预测模式下使用网络时,对于某些类,它始终返回一/零。这意味着网络无法学习(即使我使用加权损失函数或焦点损失函数。)

为什么奇怪呢?因为,最先进的方法即使在第一个 epoch 之后也会报告较高的 f1 分数(例如https://github.com/chufengt/iccv19_attribute,我已在我的 PC 中运行它并在一个 epoch 后获得了良好的结果)。

部分代码:

        print("setup model ...")
        input_image = KL.Input(args.img_input_shape, name= "input_1")
        C1, C2, C3, C4, C5 = resnet_graph(input_image, architecture="resnet50", stage5=False, train_bn=True)
        output_layers = merged_model (input_features=C4)
        model = Model(inputs=input_image, outputs=output_layers, name='SoftBiometrics_Model')

...

        print("model compiling ...")
        OPTIM = optimizers.Adadelta(lr=args.learning_rate, rho=0.95)
        model.compile(optimizer=OPTIM, loss=binary_focal_loss(alpha=.25, gamma=2), metrics=['acc',get_f1]) …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow multiclass-classification

7
推荐指数
1
解决办法
6543
查看次数

最小化两个张量的余弦相似度并输出一个标量。火炬

我使用Pytorch余弦相似度函数如下。我有两个特征向量,我的目标是使它们彼此不同。所以,我想我可以最小化它们的余弦相似度。我对我的编码方式有一些疑问。感谢您对以下问题的建议。

  1. 我不知道为什么这里有一些负值val1

  2. 我已经完成了三个步骤来转换val1为标量。我的做法正确吗?还有其他办法吗?

  3. 为了最小化相似性,我使用了1/var1. 这是执行此操作的标准方法吗?如果我使用它正确吗1-var1

    def loss_func(feat1, feat2):
         cosine_loss = torch.nn.CosineSimilarity(dim=1, eps=1e-6)
         val1 = cosine_loss(feat1, feat2).tolist()
         # 1. calculate the absolute values of each element,
         # 2. sum all values together,
         # 3. divide it by the number of values
         val1 = 1/(sum(list(map(abs, val1)))/int(len(val1)))
         val1 = torch.tensor(val1, device='cuda', requires_grad=True)
         return val1 
    
    Run Code Online (Sandbox Code Playgroud)

cosine-similarity pytorch

0
推荐指数
1
解决办法
7068
查看次数

如何检查两个变量之一是否为 none?就像 if (mask1 | mask2) 是 None 一样:

表达式if (mask1 | mask2) is None:返回此错误

TypeError: unsupported operand type(s) for |: 'int' and 'NoneType'
Run Code Online (Sandbox Code Playgroud)

如何检查两个变量之一是否为None

python

-1
推荐指数
1
解决办法
99
查看次数