- void LogisticRegression_softmax(LogisticRegression *this, double *x) {
- int i;
- double max = 0.0;
- double sum = 0.0;
-
-
- for(i=0; i<this->n_out; i++) if(max < x[i]) max = x[i];
- for(i=0; i<this->n_out; i++) {
- x[i] = exp(x[i] - max);
- sum += x[i];
- }
-
- for(i=0; i<this->n_out; i++) x[i] /= sum;
- }
發現它和文獻中對softmax模型中參數優化的迭代公式中是不同!其實,若是沒有那個求最大值的過程,直接取指數運算就同樣的。而加一個求最大值的好處在於避免數據的絕對值太小,數據絕對值過小可能會致使計算一直停留在零而沒法進行。就像對數似然函數,似然函數取對數防止機率太小同樣。函數