From 3856e63dab1b28aaec4133b6b0ec2a44ebf8cf46 Mon Sep 17 00:00:00 2001 From: Qi Liu Date: Tue, 21 Jun 2016 15:42:22 +0800 Subject: complete bp of softmax layer --- nerv/lib/matrix/generic/mmatrix.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'nerv/lib/matrix/generic/mmatrix.c') diff --git a/nerv/lib/matrix/generic/mmatrix.c b/nerv/lib/matrix/generic/mmatrix.c index e76d4fb..54360d5 100644 --- a/nerv/lib/matrix/generic/mmatrix.c +++ b/nerv/lib/matrix/generic/mmatrix.c @@ -243,6 +243,26 @@ void nerv_matrix_(add_row)(Matrix *b, const Matrix *a, double beta, NERV_SET_STATUS(status, NERV_NORMAL, 0); } +void nerv_matrix_(add_col)(Matrix *b, const Matrix *a, double beta, + MContext *context, Status *status) { + if (a->nrow != b->nrow) + NERV_EXIT_STATUS(status, MAT_MISMATCH_DIM, 0); + if (a->ncol != 1) + NERV_EXIT_STATUS(status, MAT_COL_VECTOR_EXP, 0); + MATRIX_ELEM *arow = MATRIX_ELEM_PTR(a); + MATRIX_ELEM *brow = MATRIX_ELEM_PTR(b); + int i, j; + size_t astride = a->stride, bstride = b->stride; + for (i = 0; i < b->nrow; i++) + { + for (j = 0; j < b->ncol; j++) + brow[j] += arow[0] * beta; + arow = MATRIX_NEXT_ROW_PTR(arow, astride); + brow = MATRIX_NEXT_ROW_PTR(brow, bstride); + } + NERV_SET_STATUS(status, NERV_NORMAL, 0); +} + void nerv_matrix_(clip)(Matrix *self, double val1, double val2, MContext *context, Status *status) { int i, j; -- cgit v1.2.3