From 913d355ec1cf34aad71fdd75202fc3b0309e63a0 Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Thu, 28 Jan 2016 20:30:38 +0000
Subject: [PATCH] lots of stuff

---
 src/cost_layer.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/cost_layer.c b/src/cost_layer.c
index 7593490..39ae809 100644
--- a/src/cost_layer.c
+++ b/src/cost_layer.c
@@ -11,7 +11,8 @@
 {
     if (strcmp(s, "sse")==0) return SSE;
     if (strcmp(s, "masked")==0) return MASKED;
-    fprintf(stderr, "Couldn't find activation function %s, going with SSE\n", s);
+    if (strcmp(s, "smooth")==0) return SMOOTH;
+    fprintf(stderr, "Couldn't find cost type %s, going with SSE\n", s);
     return SSE;
 }
 
@@ -22,6 +23,8 @@
             return "sse";
         case MASKED:
             return "masked";
+        case SMOOTH:
+            return "smooth";
     }
     return "sse";
 }
@@ -65,8 +68,12 @@
             if(state.truth[i] == SECRET_NUM) state.input[i] = SECRET_NUM;
         }
     }
-    copy_cpu(l.batch*l.inputs, state.truth, 1, l.delta, 1);
-    axpy_cpu(l.batch*l.inputs, -1, state.input, 1, l.delta, 1);
+    if(l.cost_type == SMOOTH){
+        smooth_l1_cpu(l.batch*l.inputs, state.input, state.truth, l.delta);
+    } else {
+        copy_cpu(l.batch*l.inputs, state.truth, 1, l.delta, 1);
+        axpy_cpu(l.batch*l.inputs, -1, state.input, 1, l.delta, 1);
+    }
     *(l.output) = dot_cpu(l.batch*l.inputs, l.delta, 1, l.delta, 1);
     //printf("cost: %f\n", *l.output);
 }
@@ -95,8 +102,12 @@
         mask_ongpu(l.batch*l.inputs, state.input, SECRET_NUM, state.truth);
     }
 
-    copy_ongpu(l.batch*l.inputs, state.truth, 1, l.delta_gpu, 1);
-    axpy_ongpu(l.batch*l.inputs, -1, state.input, 1, l.delta_gpu, 1);
+    if(l.cost_type == SMOOTH){
+        smooth_l1_gpu(l.batch*l.inputs, state.input, state.truth, l.delta_gpu);
+    } else {
+        copy_ongpu(l.batch*l.inputs, state.truth, 1, l.delta_gpu, 1);
+        axpy_ongpu(l.batch*l.inputs, -1, state.input, 1, l.delta_gpu, 1);
+    }
 
     cuda_pull_array(l.delta_gpu, l.delta, l.batch*l.inputs);
     *(l.output) = dot_cpu(l.batch*l.inputs, l.delta, 1, l.delta, 1);

--
Gitblit v1.10.0