| 3615 | // ggml_sum_rows |
| 3616 | |
| 3617 | struct ggml_tensor * ggml_sum_rows( |
| 3618 | struct ggml_context * ctx, |
| 3619 | struct ggml_tensor * a) { |
| 3620 | bool is_node = false; |
| 3621 | |
| 3622 | if (a->grad) { |
| 3623 | is_node = true; |
| 3624 | } |
| 3625 | |
| 3626 | int64_t ne[4] = {1,1,1,1}; |
| 3627 | for (int i=1; i<a->n_dims; ++i) { |
| 3628 | ne[i] = a->ne[i]; |
| 3629 | } |
| 3630 | |
| 3631 | struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, a->n_dims, ne); |
| 3632 | |
| 3633 | result->op = GGML_OP_SUM_ROWS; |
| 3634 | result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; |
| 3635 | result->src[0] = a; |
| 3636 | |
| 3637 | return result; |
| 3638 | } |
| 3639 | |
| 3640 | // ggml_mean |
| 3641 | |