src/tensor/loss_ops_LAWS.bend
bendtorch-core@0.1.0.0 · 98 lines · 12 definitions
1import Base
2import bendtorch-core@0.1.0.0/src/tensor/elementwise.bend as Elementwise
3
4
5
6
7
8
9
10law scalar_divide:
11 for +left: F32
12 for +right: F32
13 {Elementwise.scalar(Elementwise.Divide{}, left, right) == F32.div(left, right) : F32}
14
15
16law scalar_exp_left:
17 for +left: F32
18 for +right: F32
19 {Elementwise.scalar(Elementwise.ExpLeft{}, left, right) == F32.exp(left) : F32}
20
21
22law scalar_log_left:
23 for +left: F32
24 for +right: F32
25 {Elementwise.scalar(Elementwise.LogLeft{}, left, right) == F32.log(left) : F32}
26
27
28law scalar_matches_same:
29 for +left: F32
30 for +right: F32
31 for same: {U32.is_eq(Elementwise.bits(left), Elementwise.bits(right)) == True{} : Bool}
32 {Elementwise.scalar(Elementwise.Matches{}, left, right) == 1.0 : F32}
33
34law scalar_matches_other:
35 for +left: F32
36 for +right: F32
37 for other: {U32.is_eq(Elementwise.bits(left), Elementwise.bits(right)) == False{} : Bool}
38 {Elementwise.scalar(Elementwise.Matches{}, left, right) == 0.0 : F32}
39
40
41
42law scalar_pick_negated_target:
43 for +left: F32
44 for +right: F32
45 for target: {Elementwise.is_one(right) == True{} : Bool}
46 {Elementwise.scalar(Elementwise.PickNegated{}, left, right) == F32.neg(left) : F32}
47
48law scalar_pick_negated_other:
49 for +left: F32
50 for +right: F32
51 for other: {Elementwise.is_one(right) == False{} : Bool}
52 {Elementwise.scalar(Elementwise.PickNegated{}, left, right) == 0.0 : F32}
53
54
55
56
57
58
59law scalar_mse_grad:
60 for +scale: F32
61 for +left: F32
62 for +right: F32
63 {Elementwise.scalar(Elementwise.MseGrad{scale}, left, right) == F32.mul(F32.mul(scale, right), left) : F32}
64
65
66
67law scalar_one_hot_grad_target:
68 for +count: F32
69 for +left: F32
70 for +right: F32
71 for target: {Elementwise.is_one(right) == True{} : Bool}
72 {Elementwise.scalar(Elementwise.OneHotGrad{count}, left, right) == F32.neg(F32.div(left, count)) : F32}
73
74law scalar_one_hot_grad_other:
75 for +count: F32
76 for +left: F32
77 for +right: F32
78 for other: {Elementwise.is_one(right) == False{} : Bool}
79 {Elementwise.scalar(Elementwise.OneHotGrad{count}, left, right) == 0.0 : F32}
80
81
82
83
84
85law scalar_softmax_grad_one_class:
86 for +count: F32
87 for +left: F32
88 for +right: F32
89 {Elementwise.scalar(Elementwise.SoftmaxGrad{count, True{}}, left, right) ==
90 F32.neg(F32.mul(F32.exp(right), F32.neg(F32.div(left, count)))) : F32}
91
92
93law scalar_softmax_grad_classes:
94 for +count: F32
95 for +left: F32
96 for +right: F32
97 {Elementwise.scalar(Elementwise.SoftmaxGrad{count, False{}}, left, right) ==
98 F32.neg(F32.mul(F32.exp(right), F32.add(F32.neg(F32.div(left, count)), 0.0))) : F32}