Função de perda para classificação de idade

Sep 11 2020

Estou construindo um modelo da CNN para classificação de idade. Supondo que a idade de uma pessoa esteja entre 1-100, minha última camada linear contém 100 neurônios de saída.

Agora eu quero encontrar uma função de perda apropriada para este problema de classificação.

Eu não desejo usar regressão

Minhas Observações:

  • Não posso usar a perda MSE ou BCE porque eles só funcionam em elementos tão inadequados como se a idade real fosse 25, então haverá a mesma perda para as idades previstas de 26 e 50. (A previsão será de 100 vetores de elementos, pois a última camada tem 100 neurônios.)
  • Eu descobri sobre perda de dobradiça e perda de proximidade de cosseno . Mas eu não acho que eles possam ser usados ​​neste tipo de classificação porque eles estão apenas encontrando semelhanças entre dois vetores, sem dar qualquer importância ou peso aos pares reais previstos próximos (ex a idade real 25 e a idade prevista 26 devem ter uma perda muito baixa )

Alguém pode me sugerir uma função de perda adequada (de preferência em Pytorch) para este problema de classificação?

Editar

Digamos que eu queira uma Função de Perda (L (prevista, real)) tal que (Supondo uma classificação de 5 classes)

let actual = [0,0,1,0,0]

L([0,0,1,0,0], actual) < L([0,1,0,0,0], actual) < L([1,0,0,0,0], actual)
L([0,0,1,0,0], actual) < L([0,0,0,1,0], actual) < L([0,0,0,0,1], actual) 

Respostas

Graph4MeConsultant Sep 12 2020 at 04:18

Se sua rede gera um vetor $x \in \{0,1\}^N$ com $N=100$ e $\sum_{i = 1}^{N} x_{i}= 1$, você pode considerar pesos $\mathbf{W}=(w_{i}) \in \mathbb{R}^{N}$ com $w_{i} :=i$ para $i \in \{1,\ldots,100\}$.

Então, para vetor de predição $x$ e vetor de verdade $y$, você poderia usar a função de perda $L(x,y):= || \mathbf{W}^{T}x - \mathbf{W}^{T}y || = || \mathbf{W}^{T}(x-y)||$