From d9f1b0b16edeb59281355a855e18a8be343fc33c Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Fri, 08 Aug 2014 19:04:15 +0000
Subject: [PATCH] probably how maxpool layers should be
---
src/softmax_layer.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/src/softmax_layer.c b/src/softmax_layer.c
index 1268423..b6e9fe9 100644
--- a/src/softmax_layer.c
+++ b/src/softmax_layer.c
@@ -1,4 +1,5 @@
#include "softmax_layer.h"
+#include "mini_blas.h"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
@@ -11,6 +12,7 @@
layer->inputs = inputs;
layer->output = calloc(inputs*batch, sizeof(float));
layer->delta = calloc(inputs*batch, sizeof(float));
+ layer->jacobian = calloc(inputs*inputs*batch, sizeof(float));
return layer;
}
@@ -51,6 +53,28 @@
void backward_softmax_layer(const softmax_layer layer, float *input, float *delta)
{
+/*
+ int i,j,b;
+ for(b = 0; b < layer.batch; ++b){
+ for(i = 0; i < layer.inputs; ++i){
+ for(j = 0; j < layer.inputs; ++j){
+ int d = (i==j);
+ layer.jacobian[b*layer.inputs*layer.inputs + i*layer.inputs + j] =
+ layer.output[b*layer.inputs + i] * (d - layer.output[b*layer.inputs + j]);
+ }
+ }
+ }
+ for(b = 0; b < layer.batch; ++b){
+ int M = layer.inputs;
+ int N = 1;
+ int K = layer.inputs;
+ float *A = layer.jacobian + b*layer.inputs*layer.inputs;
+ float *B = layer.delta + b*layer.inputs;
+ float *C = delta + b*layer.inputs;
+ gemm(0,0,M,N,K,1,A,K,B,N,0,C,N);
+ }
+ */
+
int i;
for(i = 0; i < layer.inputs*layer.batch; ++i){
delta[i] = layer.delta[i];
--
Gitblit v1.10.0