Documentation

LeanMlir.Proofs.Nets.EfficientNet.EfficientNetParamGrad

EfficientNet-B0 — every parameter gradient node IS the loss's derivative in that parameter #

efficientnet_net_tiedG says each of the 262 parameter gradient nodes denotes its layer's parameter Jacobian contracted with the cotangent the emitted backward chain threads to it, the chain's top being the smoothed-loss cotangent and each block's cotangent its certified VJP's backward. enet_net_lossGrad composes them: for any loss L of the logits whose gradient at the net's output is g, every node is ∂L/∂θ of the WHOLE net efficientnetForwardBFull with that one parameter varied. enet_net_lossGrad_smoothedCE discharges hL for the label-smoothed loss the artifacts ship.

How. MobileNetV2ParamGrad's shape:

Hypotheses. B0Weights.EpsPos (every BN ε > 0), as in the tie; there is no smoothness hypothesis. For the smoothed loss, every example's target sums to one and 0 < nCls. Stochastic depth and classifier dropout are the tie's optional sites sd / cd here too (EfficientNetStepTieG's Scope): the loss is read at efficientnetForwardBFullDrop, a skip block's body sees the loss u ↦ Gn (dropPathOpt s u + v) whose gradient at the body output is dropPathOpt s dyOut (enet_resid_lossTiedG), the chain threads mbResidDropWHasVJP, and the head reads the dropped activation at the dense and pulls g back through the mask (headDoFwdBHasVJP).

Scope. One replica, at either precision: every conv and depthwise weight node is stated on the renderers' switch (convWeightGradBAt bf16 id …, depthwiseWeightGradBAt bf16 id …, …; Foundation.GradNodesBAt), so bf16 := true is the bf16 kind the efficientnetin*bf16 artifacts emit — efficientnetin_emarmsdp64dropdowxeps0001bf16, the book's ImageNet run, among them — read over ℝ at the identity rounding (Bf16Erasure), and bf16 := false the f32 artifacts'.

theorem Proofs.EnetTieG.seB_eq_gateMul (N : ℕ) {c h w r : ℕ} (W₁ : Mat c r) (b₁ : Vec r) (W₂ : Mat r c) (b₂ : Vec c) (x : Vec (N * (c * h * w))) :
seB N W₁ b₁ W₂ b₂ x = BackLinks.seGateMulB N c h w x (sigmoid (N * c) (StableHLO.batchMap N (dense W₂ b₂) (swish (N * r) (StableHLO.batchMap N (dense W₁ b₁) (StableHLO.batchMap N (globalAvgPoolFlat c h w) x)))))

The batched SE block, split at the gate. seB is the gated product of the block input with the sigmoid of the excite dense's output, the squeeze path computed on the whole batch — the spelling of the tie's SE activations s e1 z e2.

noncomputable def Proofs.EnetTieG.enetSeGE2 (N : ℕ) {c h w : ℕ} (Gse : Vec (N * (c * h * w)) → Vec 1) (dr : Vec (N * (c * h * w))) :
Vec (N * c) → Vec 1

The loss at the excite dense's output (the sigmoid's input), the SE input dr held fixed. Gse is the loss at the SE output.

Equations
Instances For
    noncomputable def Proofs.EnetTieG.enetSeGE1 (N : ℕ) {c h w r : ℕ} (Gse : Vec (N * (c * h * w)) → Vec 1) (dr : Vec (N * (c * h * w))) (W₂ : Mat r c) (b₂ : Vec c) :
    Vec (N * r) → Vec 1

    The loss at the reduce dense's output (the swish's input), dr held fixed.

    Equations
    Instances For
      theorem Proofs.EnetTieG.enetSe_hasGradAt {N c h w r : ℕ} (W₁ : Mat c r) (b₁ : Vec r) (W₂ : Mat r c) (b₂ : Vec c) (dr : Vec (N * (c * h * w))) {Gse : Vec (N * (c * h * w)) → Vec 1} {cot : Vec (N * (c * h * w))} (hG : HasGradAt Gse (seB N W₁ b₁ W₂ b₂ dr) cot) :
      have e1 := StableHLO.batchMap N (dense W₁ b₁) (StableHLO.batchMap N (globalAvgPoolFlat c h w) dr); have e2 := StableHLO.batchMap N (dense W₂ b₂) (swish (N * r) e1); have cotE2 := BackLinks.sigBackB (N * c) e2 (BackLinks.gateCotB N c h w dr cot); HasGradAt (enetSeGE2 N Gse dr) e2 cotE2 ∧ HasGradAt (enetSeGE1 N Gse dr W₂ b₂) e1 (BackLinks.swBackB (N * r) e1 (StableHLO.rowDenseBackFlat N r c W₂ cotE2))

      The SE gate's two cotangents are loss gradients: from the gradient cot at the SE output, the loss at the excite pre-activation has gradient σ'(e2) · gateCotB dr cot (the tie's cotE2), and at the reduce pre-activation the tie's cotE1.

      def Proofs.EnetTieG.enetSeLossTiedB {N c h w r : ℕ} (xN cotN : String) (W₁ : Mat c r) (b₁ : Vec r) (W₂ : Mat r c) (b₂ : Vec c) (dr : Vec (N * (c * h * w))) (Ψ : Mat c r → Vec r → Mat r c → Vec c → Vec 1) (cot : Vec (N * (c * h * w))) :

      SE, every parameter node a loss derivative — the reduce and excite dense W/b nodes the tie states, Ψ the loss as a function of (W₁, b₁, W₂, b₂) with the SE input dr fixed.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem Proofs.EnetTieG.enet_se_lossTiedB {N c h w r : ℕ} (xN cotN : String) (W₁ : Mat c r) (b₁ : Vec r) (W₂ : Mat r c) (b₂ : Vec c) (dr : Vec (N * (c * h * w))) {Gse : Vec (N * (c * h * w)) → Vec 1} {cot : Vec (N * (c * h * w))} (hG : HasGradAt Gse (seB N W₁ b₁ W₂ b₂ dr) cot) {Ψ : Mat c r → Vec r → Mat r c → Vec c → Vec 1} (hΨ : ∀ (a : Mat c r) (b : Vec r) (a' : Mat r c) (b' : Vec c), Ψ a b a' b' = Gse (seB N a b a' b' dr)) :
        enetSeLossTiedB xN cotN W₁ b₁ W₂ b₂ dr Ψ cot
        noncomputable def Proofs.EnetTieG.enetTailDn (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (dc : Vec (N * (mid * h * w))) :
        Vec (N * (mid * h * w))

        The depthwise BN's output.

        Equations
        Instances For
          noncomputable def Proofs.EnetTieG.enetTailDr (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (dc : Vec (N * (mid * h * w))) :
          Vec (N * (mid * h * w))

          The depthwise swish's output (the SE input).

          Equations
          Instances For
            noncomputable def Proofs.EnetTieG.enetTailSe (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (dc : Vec (N * (mid * h * w))) :
            Vec (N * (mid * h * w))

            The SE output.

            Equations
            Instances For
              noncomputable def Proofs.EnetTieG.enetTailPc (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (dc : Vec (N * (mid * h * w))) :
              Vec (N * (oc * h * w))

              The project conv's output.

              Equations
              Instances For
                noncomputable def Proofs.EnetTieG.enetTailB (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (dc : Vec (N * (mid * h * w))) :
                Vec (N * (oc * h * w))

                The tail's output, the project BN's.

                Equations
                Instances For
                  noncomputable def Proofs.EnetTieG.enetTailGPc (N h w : ℕ) {mid oc r : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (t : EnTail mid oc r) :
                  Vec (N * (oc * h * w)) → Vec 1

                  The loss at the project conv's output.

                  Equations
                  Instances For
                    noncomputable def Proofs.EnetTieG.enetTailGSe (N h w : ℕ) {mid oc r : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (t : EnTail mid oc r) :
                    Vec (N * (mid * h * w)) → Vec 1

                    The loss at the SE output.

                    Equations
                    Instances For
                      noncomputable def Proofs.EnetTieG.enetTailGDn (N h w : ℕ) {mid oc r : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (t : EnTail mid oc r) :
                      Vec (N * (mid * h * w)) → Vec 1

                      The loss at the depthwise BN's output.

                      Equations
                      Instances For
                        noncomputable def Proofs.EnetTieG.enetTailGDc (N h w : ℕ) {mid oc r : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (t : EnTail mid oc r) :
                        Vec (N * (mid * h * w)) → Vec 1

                        The loss at the depthwise conv's output.

                        Equations
                        Instances For
                          noncomputable def Proofs.EnetTieG.enetTailCotPbn (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (hp : 0 < t.pε) (dc : Vec (N * (mid * h * w))) (dy : Vec (N * (oc * h * w))) :
                          Vec (N * (oc * h * w))

                          The tie's cotPbn: the cotangent at the project conv's output.

                          Equations
                          Instances For
                            noncomputable def Proofs.EnetTieG.enetTailCotSeOut (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (hp : 0 < t.pε) (dc : Vec (N * (mid * h * w))) (dy : Vec (N * (oc * h * w))) :
                            Vec (N * (mid * h * w))

                            The tie's cotSeOut: the cotangent at the SE output.

                            Equations
                            Instances For
                              noncomputable def Proofs.EnetTieG.enetTailCotDn (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (hp : 0 < t.pε) (dc : Vec (N * (mid * h * w))) (dy : Vec (N * (oc * h * w))) :
                              Vec (N * (mid * h * w))

                              The tie's cotDn: the cotangent at the depthwise BN's output.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                noncomputable def Proofs.EnetTieG.enetTailCotDc (N h w : ℕ) {mid oc r : ℕ} (t : EnTail mid oc r) (hd : 0 < t.dε) (hp : 0 < t.pε) (dc : Vec (N * (mid * h * w))) (dy : Vec (N * (oc * h * w))) :
                                Vec (N * (mid * h * w))

                                The tie's cotDc: the cotangent at the depthwise conv's output.

                                Equations
                                Instances For
                                  theorem Proofs.EnetTieG.enetTail_hasGradAt {N h w mid oc r : ℕ} (t : EnTail mid oc r) (hd : 0 < t.dε) (hp : 0 < t.pε) (dc : Vec (N * (mid * h * w))) {Gb : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGb : HasGradAt Gb (enetTailB N h w t dc) dy) :
                                  HasGradAt (enetTailGPc N h w Gb t) (enetTailPc N h w t dc) (enetTailCotPbn N h w t hp dc dy) ∧ HasGradAt (enetTailGSe N h w Gb t) (enetTailSe N h w t dc) (enetTailCotSeOut N h w t hp dc dy) ∧ HasGradAt (enetTailGDn N h w Gb t) (enetTailDn N h w t dc) (enetTailCotDn N h w t hp dc dy) ∧ HasGradAt (enetTailGDc N h w Gb t) dc (enetTailCotDc N h w t hd hp dc dy)

                                  The tail's cotangents are loss gradients, each stage one HasGradAt.comp through its certified VJP.

                                  noncomputable def Proofs.EnetTieG.enetExpEc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * h * w))) :
                                  Vec (N * (mid * h * w))

                                  The expand conv's output.

                                  Equations
                                  Instances For
                                    noncomputable def Proofs.EnetTieG.enetExpEr (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * h * w))) :
                                    Vec (N * (mid * h * w))

                                    The expand swish's output (the depthwise input).

                                    Equations
                                    Instances For
                                      noncomputable def Proofs.EnetTieG.enetExpDc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * h * w))) :
                                      Vec (N * (mid * h * w))

                                      The depthwise conv's output.

                                      Equations
                                      Instances For
                                        noncomputable def Proofs.EnetTieG.enetExpGEn (N h w : ℕ) {ic mid oc r kh kw : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (p : MBW ic mid oc r kh kw) :
                                        Vec (N * (mid * h * w)) → Vec 1

                                        The loss at the expand BN's output.

                                        Equations
                                        Instances For
                                          noncomputable def Proofs.EnetTieG.enetExpGEc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (p : MBW ic mid oc r kh kw) :
                                          Vec (N * (mid * h * w)) → Vec 1

                                          The loss at the expand conv's output.

                                          Equations
                                          Instances For
                                            theorem Proofs.EnetTieG.enetExp_hasGradAt {N h w ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (xin : Vec (N * (ic * h * w))) {Gb : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGb : HasGradAt Gb (mbExpW N h w p xin) dy) :
                                            have cotDc := enetTailCotDc N h w p.toEnTail ⋯ ⋯ (enetExpDc N h w p xin) dy; have cotEn := BackLinks.swBackB (N * (mid * h * w)) (StableHLO.bnBatchLA N mid h w p.eε p.eγ p.eβ (enetExpEc N h w p xin)) (BackLinks.dInB N p.dW p.db cotDc); HasGradAt (enetExpGEn N h w Gb p) (StableHLO.bnBatchLA N mid h w p.eε p.eγ p.eβ (enetExpEc N h w p xin)) cotEn ∧ HasGradAt (enetExpGEc N h w Gb p) (enetExpEc N h w p xin) (BackLinks.bnBackB N mid h w p.eε ⋯ p.eγ p.eβ (enetExpEc N h w p xin) cotEn)
                                            def Proofs.EnetTieG.enetExpLossTiedG {N h w ic mid oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * h * w))) (Φ : MBW ic mid oc r kh kw → Vec 1) (dyOut : Vec (N * (oc * h * w))) :

                                            Stride-1 expand body, every parameter node a loss derivative — the thirteen nodes enetExpTiedG ties (its BN pairs split into γ and β), at the tie's forward activations and cotangents, Φ the loss at the body output as a function of the block's weight record.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              theorem Proofs.EnetTieG.enet_exp_lossTiedG {N h w ic mid oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * h * w))) {Gb : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGb : HasGradAt Gb (mbExpW N h w p xin) dy) {Φ : MBW ic mid oc r kh kw → Vec 1} (hΦ : ∀ (p' : MBW ic mid oc r kh kw), Φ p' = Gb (mbExpW N h w p' xin)) :
                                              enetExpLossTiedG xN vN epsStr cotN p hq bf16 xin Φ dy

                                              The stride-1 expand bundle, from the loss Gb at the body output. A widening block (b9, b16) is this at Gb := Gn.

                                              theorem Proofs.EnetTieG.enet_resid_lossTiedG {N h w mid r kh kw c : ℕ} (xN vN epsStr cotN : String) (p : MBW c mid c r kh kw) (hq : p.EpsPos) (bf16 : Bool) (s : Option (Vec N)) (v : Vec (N * (c * h * w))) {Gn : Vec (N * (c * h * w)) → Vec 1} {dy : Vec (N * (c * h * w))} (hGn : HasGradAt Gn (mbResidDropW N h w p s v) dy) {Φ : MBW c mid c r kh kw → Vec 1} (hΦ : ∀ (p' : MBW c mid c r kh kw), Φ p' = Gn (mbResidDropW N h w p' s v)) :
                                              enetExpLossTiedG xN vN epsStr cotN p hq bf16 v Φ (dropPathOpt N (c * h * w) s dy)

                                              A skip block's thirteen nodes, through its drop site. The identity skip is a constant once a body parameter varies, so the loss at the branch output u ↦ Gn (dropPathOpt s u + v) has gradient dropPathOpt s dyOut at the body output (the site's VJP is itself) and the body bundle applies there; none is the drop-free block at dyOut.

                                              noncomputable def Proofs.EnetTieG.enetStrEc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) :
                                              Vec (N * (mid * (2 * h) * (2 * w)))

                                              The expand conv's output, at the input grid 2h × 2w.

                                              Equations
                                              Instances For
                                                noncomputable def Proofs.EnetTieG.enetStrEr (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) :
                                                Vec (N * (mid * (2 * h) * (2 * w)))

                                                The expand swish's output (the strided depthwise's input).

                                                Equations
                                                Instances For
                                                  noncomputable def Proofs.EnetTieG.enetStrDc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) :
                                                  Vec (N * (mid * h * w))

                                                  The strided depthwise conv's output.

                                                  Equations
                                                  Instances For
                                                    noncomputable def Proofs.EnetTieG.enetStrGEn (N h w : ℕ) {ic mid oc r kh kw : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (p : MBW ic mid oc r kh kw) :
                                                    Vec (N * (mid * (2 * h) * (2 * w))) → Vec 1

                                                    The loss at the expand BN's output.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      noncomputable def Proofs.EnetTieG.enetStrGEc (N h w : ℕ) {ic mid oc r kh kw : ℕ} (Gb : Vec (N * (oc * h * w)) → Vec 1) (p : MBW ic mid oc r kh kw) :
                                                      Vec (N * (mid * (2 * h) * (2 * w))) → Vec 1

                                                      The loss at the expand conv's output.

                                                      Equations
                                                      Instances For
                                                        theorem Proofs.EnetTieG.enetStr_hasGradAt {N h w ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) {Gb : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGb : HasGradAt Gb (mbStridedW N h w p xin) dy) :
                                                        have cotDc := enetTailCotDc N h w p.toEnTail ⋯ ⋯ (enetStrDc N h w p xin) dy; have cotEn := BackLinks.swBackB (N * (mid * (2 * h) * (2 * w))) (StableHLO.bnBatchLA N mid (2 * h) (2 * w) p.eε p.eγ p.eβ (enetStrEc N h w p xin)) (BackLinks.dStridedXlaInB N p.dW p.db cotDc); HasGradAt (enetStrGEn N h w Gb p) (StableHLO.bnBatchLA N mid (2 * h) (2 * w) p.eε p.eγ p.eβ (enetStrEc N h w p xin)) cotEn ∧ HasGradAt (enetStrGEc N h w Gb p) (enetStrEc N h w p xin) (BackLinks.bnBackB N mid (2 * h) (2 * w) p.eε ⋯ p.eγ p.eβ (enetStrEc N h w p xin) cotEn)
                                                        def Proofs.EnetTieG.enetStridedLossTiedG {N h w ic mid oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) (Φ : MBW ic mid oc r kh kw → Vec 1) (dyOut : Vec (N * (oc * h * w))) :

                                                        Stride-2 block, every parameter node a loss derivative — the thirteen nodes enetStridedTiedG ties; the depthwise nodes are the XLA-SAME strided ones.

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For
                                                          theorem Proofs.EnetTieG.enet_strided_lossTiedG {N h w ic mid oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * (2 * h) * (2 * w)))) {Gn : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGn : HasGradAt Gn (mbStridedW N h w p xin) dy) {Φ : MBW ic mid oc r kh kw → Vec 1} (hΦ : ∀ (p' : MBW ic mid oc r kh kw), Φ p' = Gn (mbStridedW N h w p' xin)) :
                                                          enetStridedLossTiedG xN vN epsStr cotN p hq bf16 xin Φ dy
                                                          def Proofs.EnetTieG.enetNoExpLossTiedG {N h w ic oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBWNoExp ic oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * h * w))) (Φ : MBWNoExp ic oc r kh kw → Vec 1) (dyOut : Vec (N * (oc * h * w))) :

                                                          No-expand block, every parameter node a loss derivative — the ten nodes enetNoExpTiedG ties.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            theorem Proofs.EnetTieG.enet_noexp_lossTiedG {N h w ic oc r kh kw : ℕ} (xN vN epsStr cotN : String) (p : MBWNoExp ic oc r kh kw) (hq : p.EpsPos) (bf16 : Bool) (xin : Vec (N * (ic * h * w))) {Gn : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGn : HasGradAt Gn (mbNoExpW N h w p xin) dy) {Φ : MBWNoExp ic oc r kh kw → Vec 1} (hΦ : ∀ (p' : MBWNoExp ic oc r kh kw), Φ p' = Gn (mbNoExpW N h w p' xin)) :
                                                            enetNoExpLossTiedG xN vN epsStr cotN p hq bf16 xin Φ dy
                                                            def Proofs.EnetTieG.enetStemLossTiedG {N h w ic oc kHs kWs : ℕ} (xN vN epsStr cotN : String) (εs : ℝ) (hεs : 0 < εs) (Ws : Kernel4 oc ic kHs kWs) (bs γs βs : Vec oc) (bf16 : Bool) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (Φ : Kernel4 oc ic kHs kWs → Vec oc → Vec oc → Vec oc → Vec 1) (dyStem : Vec (N * (oc * h * w))) :

                                                            Stem, every parameter node a loss derivative — the four nodes enetStemTiedG ties, Φ the loss as a function of the stem's (W, b, γ, β).

                                                            Equations
                                                            • One or more equations did not get rendered due to their size.
                                                            Instances For
                                                              theorem Proofs.EnetTieG.enet_stem_lossTiedG {N h w ic oc kHs kWs : ℕ} (xN vN epsStr cotN : String) (εs : ℝ) (hεs : 0 < εs) (Ws : Kernel4 oc ic kHs kWs) (bs γs βs : Vec oc) (bf16 : Bool) (x : Vec (N * (ic * (2 * h) * (2 * w)))) {Gn : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hGn : HasGradAt Gn (stemB N Ws bs εs γs βs x) dy) {Φ : Kernel4 oc ic kHs kWs → Vec oc → Vec oc → Vec oc → Vec 1} (hΦ : ∀ (W : Kernel4 oc ic kHs kWs) (b γ β : Vec oc), Φ W b γ β = Gn (stemB N W b εs γ β x)) :
                                                              enetStemLossTiedG xN vN epsStr cotN εs hεs Ws bs γs βs bf16 x Φ dy
                                                              def Proofs.EnetTieG.enetHeadLossTiedG {N h w c oc nC : ℕ} (xN vN epsStr cotN dN : String) (εh : ℝ) (hεh : 0 < εh) (Wh : Kernel4 oc c 1 1) (bh γh βh : Vec oc) (Wfc : Mat oc nC) (bfc : Vec nC) (bf16 : Bool) (cd : Option (Vec (N * oc))) (xhead : Vec (N * (c * h * w))) (Φ : Kernel4 oc c 1 1 → Vec oc → Vec oc → Vec oc → Mat oc nC → Vec nC → Vec 1) (g : Vec (N * nC)) :

                                                              Head, every parameter node a loss derivative — the six nodes enetHeadTiedG ties, at the loss cotangent g, Φ the loss as a function of (hW, hb, hγ, hβ, Wfc, bfc).

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                theorem Proofs.EnetTieG.enet_head_lossTiedG {N h w c oc nC : ℕ} (xN vN epsStr cotN dN : String) (εh : ℝ) (hεh : 0 < εh) (Wh : Kernel4 oc c 1 1) (bh γh βh : Vec oc) (Wfc : Mat oc nC) (bfc : Vec nC) (bf16 : Bool) (cd : Option (Vec (N * oc))) (xhead : Vec (N * (c * h * w))) {L : Vec (N * nC) → Vec 1} {g : Vec (N * nC)} (hL : HasGradAt L (headDoFwdB N Wh bh εh γh βh Wfc bfc cd xhead) g) {Φ : Kernel4 oc c 1 1 → Vec oc → Vec oc → Vec oc → Mat oc nC → Vec nC → Vec 1} (hΦ : ∀ (W : Kernel4 oc c 1 1) (b γ β : Vec oc) (Wd : Mat oc nC) (bd : Vec nC), Φ W b γ β Wd bd = L (headDoFwdB N W b εh γ β Wd bd cd xhead)) :
                                                                enetHeadLossTiedG xN vN epsStr cotN dN εh hεh Wh bh γh βh Wfc bfc bf16 cd xhead Φ g
                                                                theorem Proofs.EnetTieG.enetNoExpW_hasGradAt_comp {N h w ic oc r kh kw : ℕ} (p : MBWNoExp ic oc r kh kw) (hq : p.EpsPos) (v : Vec (N * (ic * h * w))) {G : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hG : HasGradAt G (mbNoExpW N h w p v) dy) :
                                                                HasGradAt (fun (y : Vec (N * (ic * h * w))) => G (mbNoExpW N h w p y)) v ((mbNoExpWHasVJP N h w p ⋯ ⋯).backward v dy)

                                                                Pull the loss gradient back through the t = 1 block's certified VJP.

                                                                theorem Proofs.EnetTieG.enetStridedW_hasGradAt_comp {N h w ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (v : Vec (N * (ic * (2 * h) * (2 * w)))) {G : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hG : HasGradAt G (mbStridedW N h w p v) dy) :
                                                                HasGradAt (fun (y : Vec (N * (ic * (2 * h) * (2 * w)))) => G (mbStridedW N h w p y)) v ((mbStridedWHasVJP N h w p ⋯ ⋯ ⋯).backward v dy)

                                                                …through a stride-2 block.

                                                                theorem Proofs.EnetTieG.enetResidW_hasGradAt_comp {N h w c mid r kh kw : ℕ} (p : MBW c mid c r kh kw) (hq : p.EpsPos) (s : Option (Vec N)) (v : Vec (N * (c * h * w))) {G : Vec (N * (c * h * w)) → Vec 1} {dy : Vec (N * (c * h * w))} (hG : HasGradAt G (mbResidDropW N h w p s v) dy) :
                                                                HasGradAt (fun (y : Vec (N * (c * h * w))) => G (mbResidDropW N h w p s y)) v ((mbResidDropWHasVJP N h w p s ⋯ ⋯ ⋯).backward v dy)

                                                                …through a skip block, at its drop site.

                                                                theorem Proofs.EnetTieG.enetExpW_hasGradAt_comp {N h w ic mid oc r kh kw : ℕ} (p : MBW ic mid oc r kh kw) (hq : p.EpsPos) (v : Vec (N * (ic * h * w))) {G : Vec (N * (oc * h * w)) → Vec 1} {dy : Vec (N * (oc * h * w))} (hG : HasGradAt G (mbExpW N h w p v) dy) :
                                                                HasGradAt (fun (y : Vec (N * (ic * h * w))) => G (mbExpW N h w p y)) v ((mbExpWHasVJP N h w p ⋯ ⋯ ⋯).backward v dy)

                                                                …and through a widening block.

                                                                noncomputable def Proofs.EnetTieG.enetPreB0 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) :
                                                                Vec (N * (3 * 224 * 224)) → Vec (N * (32 * 112 * 112))

                                                                The stem's output — block b1's input (the tie's a0).

                                                                Equations
                                                                Instances For
                                                                  noncomputable def Proofs.EnetTieG.enetPreB1 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) :
                                                                  Vec (N * (3 * 224 * 224)) → Vec (N * (16 * 112 * 112))

                                                                  Block b1's output (the tie's a1).

                                                                  Equations
                                                                  Instances For
                                                                    noncomputable def Proofs.EnetTieG.enetPreB2 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) :
                                                                    Vec (N * (3 * 224 * 224)) → Vec (N * (24 * 56 * 56))

                                                                    Block b2's output (the tie's a2).

                                                                    Equations
                                                                    Instances For
                                                                      noncomputable def Proofs.EnetTieG.enetPreB3 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                      Vec (N * (3 * 224 * 224)) → Vec (N * (24 * 56 * 56))

                                                                      Block b3's output (the tie's a3).

                                                                      Equations
                                                                      Instances For
                                                                        noncomputable def Proofs.EnetTieG.enetPreB4 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                        Vec (N * (3 * 224 * 224)) → Vec (N * (40 * 28 * 28))

                                                                        Block b4's output (the tie's a4).

                                                                        Equations
                                                                        Instances For
                                                                          noncomputable def Proofs.EnetTieG.enetPreB5 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                          Vec (N * (3 * 224 * 224)) → Vec (N * (40 * 28 * 28))

                                                                          Block b5's output (the tie's a5).

                                                                          Equations
                                                                          Instances For
                                                                            noncomputable def Proofs.EnetTieG.enetPreB6 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                            Vec (N * (3 * 224 * 224)) → Vec (N * (80 * 14 * 14))

                                                                            Block b6's output (the tie's a6).

                                                                            Equations
                                                                            Instances For
                                                                              noncomputable def Proofs.EnetTieG.enetPreB7 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                              Vec (N * (3 * 224 * 224)) → Vec (N * (80 * 14 * 14))

                                                                              Block b7's output (the tie's a7).

                                                                              Equations
                                                                              Instances For
                                                                                noncomputable def Proofs.EnetTieG.enetPreB8 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                Vec (N * (3 * 224 * 224)) → Vec (N * (80 * 14 * 14))

                                                                                Block b8's output (the tie's a8).

                                                                                Equations
                                                                                Instances For
                                                                                  noncomputable def Proofs.EnetTieG.enetPreB9 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                  Vec (N * (3 * 224 * 224)) → Vec (N * (112 * 14 * 14))

                                                                                  Block b9's output (the tie's a9).

                                                                                  Equations
                                                                                  Instances For
                                                                                    noncomputable def Proofs.EnetTieG.enetPreB10 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                    Vec (N * (3 * 224 * 224)) → Vec (N * (112 * 14 * 14))

                                                                                    Block b10's output (the tie's a10).

                                                                                    Equations
                                                                                    Instances For
                                                                                      noncomputable def Proofs.EnetTieG.enetPreB11 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                      Vec (N * (3 * 224 * 224)) → Vec (N * (112 * 14 * 14))

                                                                                      Block b11's output (the tie's a11).

                                                                                      Equations
                                                                                      Instances For
                                                                                        noncomputable def Proofs.EnetTieG.enetPreB12 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                        Vec (N * (3 * 224 * 224)) → Vec (N * (192 * 7 * 7))

                                                                                        Block b12's output (the tie's a12).

                                                                                        Equations
                                                                                        Instances For
                                                                                          noncomputable def Proofs.EnetTieG.enetPreB13 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                          Vec (N * (3 * 224 * 224)) → Vec (N * (192 * 7 * 7))

                                                                                          Block b13's output (the tie's a13).

                                                                                          Equations
                                                                                          Instances For
                                                                                            noncomputable def Proofs.EnetTieG.enetPreB14 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                            Vec (N * (3 * 224 * 224)) → Vec (N * (192 * 7 * 7))

                                                                                            Block b14's output (the tie's a14).

                                                                                            Equations
                                                                                            Instances For
                                                                                              noncomputable def Proofs.EnetTieG.enetPreB15 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                              Vec (N * (3 * 224 * 224)) → Vec (N * (192 * 7 * 7))

                                                                                              Block b15's output (the tie's a15).

                                                                                              Equations
                                                                                              Instances For
                                                                                                noncomputable def Proofs.EnetTieG.enetPreB16 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) :
                                                                                                Vec (N * (3 * 224 * 224)) → Vec (N * (320 * 7 * 7))

                                                                                                Block b16's output (the tie's a16).

                                                                                                Equations
                                                                                                Instances For
                                                                                                  theorem Proofs.EnetTieG.enetPreB0_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB0 N w x = stemB N w.sW w.sb w.sε w.sγ w.sβ x
                                                                                                  theorem Proofs.EnetTieG.enetPreB1_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB1 N w x = mbNoExpW N 112 112 w.b1 (enetPreB0 N w x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB2_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB2 N w x = mbStridedW N 56 56 w.b2 (enetPreB1 N w x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB3_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB3 N w sd x = mbResidDropW N 56 56 w.b3 (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) (enetPreB2 N w x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB4_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB4 N w sd x = mbStridedW N 28 28 w.b4 (enetPreB3 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB5_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB5 N w sd x = mbResidDropW N 28 28 w.b5 (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) (enetPreB4 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB6_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB6 N w sd x = mbStridedW N 14 14 w.b6 (enetPreB5 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB7_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB7 N w sd x = mbResidDropW N 14 14 w.b7 (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) (enetPreB6 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB8_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB8 N w sd x = mbResidDropW N 14 14 w.b8 (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) (enetPreB7 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB9_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB9 N w sd x = mbExpW N 14 14 w.b9 (enetPreB8 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB10_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB10 N w sd x = mbResidDropW N 14 14 w.b10 (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) (enetPreB9 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB11_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB11 N w sd x = mbResidDropW N 14 14 w.b11 (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) (enetPreB10 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB12_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB12 N w sd x = mbStridedW N 7 7 w.b12 (enetPreB11 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB13_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB13 N w sd x = mbResidDropW N 7 7 w.b13 (Option.map (fun (f : Fin 9 → Vec N) => f 6) sd) (enetPreB12 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB14_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB14 N w sd x = mbResidDropW N 7 7 w.b14 (Option.map (fun (f : Fin 9 → Vec N) => f 7) sd) (enetPreB13 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB15_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB15 N w sd x = mbResidDropW N 7 7 w.b15 (Option.map (fun (f : Fin 9 → Vec N) => f 8) sd) (enetPreB14 N w sd x)
                                                                                                  theorem Proofs.EnetTieG.enetPreB16_apply (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (x : Vec (N * (3 * 224 * 224))) :
                                                                                                  enetPreB16 N w sd x = mbExpW N 7 7 w.b16 (enetPreB15 N w sd x)
                                                                                                  noncomputable def Proofs.EnetTieG.enetSufB16 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (cd : Option (Vec (N * 1280))) :
                                                                                                  Vec (N * (320 * 7 * 7)) → Vec (N * nCls)

                                                                                                  The net after block b16 — the head.

                                                                                                  Equations
                                                                                                  Instances For
                                                                                                    noncomputable def Proofs.EnetTieG.enetSufB15 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (cd : Option (Vec (N * 1280))) :
                                                                                                    Vec (N * (192 * 7 * 7)) → Vec (N * nCls)

                                                                                                    The net after block b15: block b16, then the rest.

                                                                                                    Equations
                                                                                                    Instances For
                                                                                                      noncomputable def Proofs.EnetTieG.enetSufB14 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                      Vec (N * (192 * 7 * 7)) → Vec (N * nCls)

                                                                                                      The net after block b14: block b15, then the rest.

                                                                                                      Equations
                                                                                                      Instances For
                                                                                                        noncomputable def Proofs.EnetTieG.enetSufB13 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                        Vec (N * (192 * 7 * 7)) → Vec (N * nCls)

                                                                                                        The net after block b13: block b14, then the rest.

                                                                                                        Equations
                                                                                                        Instances For
                                                                                                          noncomputable def Proofs.EnetTieG.enetSufB12 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                          Vec (N * (192 * 7 * 7)) → Vec (N * nCls)

                                                                                                          The net after block b12: block b13, then the rest.

                                                                                                          Equations
                                                                                                          Instances For
                                                                                                            noncomputable def Proofs.EnetTieG.enetSufB11 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                            Vec (N * (112 * 14 * 14)) → Vec (N * nCls)

                                                                                                            The net after block b11: block b12, then the rest.

                                                                                                            Equations
                                                                                                            Instances For
                                                                                                              noncomputable def Proofs.EnetTieG.enetSufB10 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                              Vec (N * (112 * 14 * 14)) → Vec (N * nCls)

                                                                                                              The net after block b10: block b11, then the rest.

                                                                                                              Equations
                                                                                                              Instances For
                                                                                                                noncomputable def Proofs.EnetTieG.enetSufB9 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                Vec (N * (112 * 14 * 14)) → Vec (N * nCls)

                                                                                                                The net after block b9: block b10, then the rest.

                                                                                                                Equations
                                                                                                                Instances For
                                                                                                                  noncomputable def Proofs.EnetTieG.enetSufB8 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                  Vec (N * (80 * 14 * 14)) → Vec (N * nCls)

                                                                                                                  The net after block b8: block b9, then the rest.

                                                                                                                  Equations
                                                                                                                  Instances For
                                                                                                                    noncomputable def Proofs.EnetTieG.enetSufB7 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                    Vec (N * (80 * 14 * 14)) → Vec (N * nCls)

                                                                                                                    The net after block b7: block b8, then the rest.

                                                                                                                    Equations
                                                                                                                    Instances For
                                                                                                                      noncomputable def Proofs.EnetTieG.enetSufB6 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                      Vec (N * (80 * 14 * 14)) → Vec (N * nCls)

                                                                                                                      The net after block b6: block b7, then the rest.

                                                                                                                      Equations
                                                                                                                      Instances For
                                                                                                                        noncomputable def Proofs.EnetTieG.enetSufB5 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                        Vec (N * (40 * 28 * 28)) → Vec (N * nCls)

                                                                                                                        The net after block b5: block b6, then the rest.

                                                                                                                        Equations
                                                                                                                        Instances For
                                                                                                                          noncomputable def Proofs.EnetTieG.enetSufB4 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                          Vec (N * (40 * 28 * 28)) → Vec (N * nCls)

                                                                                                                          The net after block b4: block b5, then the rest.

                                                                                                                          Equations
                                                                                                                          Instances For
                                                                                                                            noncomputable def Proofs.EnetTieG.enetSufB3 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                            Vec (N * (24 * 56 * 56)) → Vec (N * nCls)

                                                                                                                            The net after block b3: block b4, then the rest.

                                                                                                                            Equations
                                                                                                                            Instances For
                                                                                                                              noncomputable def Proofs.EnetTieG.enetSufB2 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                              Vec (N * (24 * 56 * 56)) → Vec (N * nCls)

                                                                                                                              The net after block b2: block b3, then the rest.

                                                                                                                              Equations
                                                                                                                              Instances For
                                                                                                                                noncomputable def Proofs.EnetTieG.enetSufB1 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                                Vec (N * (16 * 112 * 112)) → Vec (N * nCls)

                                                                                                                                The net after block b1: block b2, then the rest.

                                                                                                                                Equations
                                                                                                                                Instances For
                                                                                                                                  noncomputable def Proofs.EnetTieG.enetSufStem (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                                  Vec (N * (32 * 112 * 112)) → Vec (N * nCls)

                                                                                                                                  The net after the stem: block b1, then the rest.

                                                                                                                                  Equations
                                                                                                                                  Instances For
                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_stem (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (W : Kernel4 32 3 3 3) (b γ β : Vec 32) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := W, sb := b, sε := w.sε, sγ := γ, sβ := β, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufStem N w sd cd (stemB N W b w.sε γ β x)

                                                                                                                                    The net with the stem's parameters varied is the suffix after the stem at the varied stem.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b1 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBWNoExp 32 16 8 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := p, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB1 N w sd cd (mbNoExpW N 112 112 p (enetPreB0 N w x))

                                                                                                                                    The net with block b1's weights varied is the suffix after b1 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b2 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 16 96 24 4 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := p, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB2 N w sd cd (mbStridedW N 56 56 p (enetPreB1 N w x))

                                                                                                                                    The net with block b2's weights varied is the suffix after b2 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b3 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 24 144 24 6 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := p, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB3 N w sd cd (mbResidDropW N 56 56 p (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) (enetPreB2 N w x))

                                                                                                                                    The net with block b3's weights varied is the suffix after b3 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b4 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 24 144 40 6 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := p, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB4 N w sd cd (mbStridedW N 28 28 p (enetPreB3 N w sd x))

                                                                                                                                    The net with block b4's weights varied is the suffix after b4 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b5 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 40 240 40 10 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := p, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB5 N w sd cd (mbResidDropW N 28 28 p (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) (enetPreB4 N w sd x))

                                                                                                                                    The net with block b5's weights varied is the suffix after b5 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b6 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 40 240 80 10 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := p, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB6 N w sd cd (mbStridedW N 14 14 p (enetPreB5 N w sd x))

                                                                                                                                    The net with block b6's weights varied is the suffix after b6 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b7 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 80 480 80 20 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := p, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB7 N w sd cd (mbResidDropW N 14 14 p (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) (enetPreB6 N w sd x))

                                                                                                                                    The net with block b7's weights varied is the suffix after b7 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b8 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 80 480 80 20 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := p, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB8 N w sd cd (mbResidDropW N 14 14 p (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) (enetPreB7 N w sd x))

                                                                                                                                    The net with block b8's weights varied is the suffix after b8 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b9 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 80 480 112 20 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := p, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB9 N w sd cd (mbExpW N 14 14 p (enetPreB8 N w sd x))

                                                                                                                                    The net with block b9's weights varied is the suffix after b9 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b10 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 112 672 112 28 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := p, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB10 N w sd cd (mbResidDropW N 14 14 p (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) (enetPreB9 N w sd x))

                                                                                                                                    The net with block b10's weights varied is the suffix after b10 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b11 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 112 672 112 28 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := p, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB11 N w sd cd (mbResidDropW N 14 14 p (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) (enetPreB10 N w sd x))

                                                                                                                                    The net with block b11's weights varied is the suffix after b11 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b12 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 112 672 192 28 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := p, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB12 N w sd cd (mbStridedW N 7 7 p (enetPreB11 N w sd x))

                                                                                                                                    The net with block b12's weights varied is the suffix after b12 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b13 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 192 1152 192 48 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := p, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB13 N w sd cd (mbResidDropW N 7 7 p (Option.map (fun (f : Fin 9 → Vec N) => f 6) sd) (enetPreB12 N w sd x))

                                                                                                                                    The net with block b13's weights varied is the suffix after b13 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b14 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 192 1152 192 48 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := p, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB14 N w sd cd (mbResidDropW N 7 7 p (Option.map (fun (f : Fin 9 → Vec N) => f 7) sd) (enetPreB13 N w sd x))

                                                                                                                                    The net with block b14's weights varied is the suffix after b14 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b15 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 192 1152 192 48 5 5) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := p, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB15 N w cd (mbResidDropW N 7 7 p (Option.map (fun (f : Fin 9 → Vec N) => f 8) sd) (enetPreB14 N w sd x))

                                                                                                                                    The net with block b15's weights varied is the suffix after b15 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_b16 (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (p : MBW 192 1152 320 48 3 3) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := p, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x = enetSufB16 N w cd (mbExpW N 7 7 p (enetPreB15 N w sd x))

                                                                                                                                    The net with block b16's weights varied is the suffix after b16 at the varied block.

                                                                                                                                    theorem Proofs.EnetTieG.enet_factor_head (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (W : Kernel4 1280 320 1 1) (b γ β : Vec 1280) (Wd : Mat 1280 nCls) (bd : Vec nCls) :
                                                                                                                                    efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := W, hb := b, hε := w.hε, hγ := γ, hβ := β, fcW := Wd, fcb := bd } sd cd x = headDoFwdB N W b w.hε γ β Wd bd cd (enetPreB16 N w sd x)

                                                                                                                                    The net with the head varied is the head at the varied parameters.

                                                                                                                                    theorem Proofs.EnetTieG.enet_forward_eq_head (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (x : Vec (N * (3 * 224 * 224))) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) :
                                                                                                                                    efficientnetForwardBFullDrop N w sd cd x = headDoFwdB N w.hW w.hb w.hε w.hγ w.hβ w.fcW w.fcb cd (enetPreB16 N w sd x)

                                                                                                                                    The net's output is the head at block b16's output.

                                                                                                                                    def Proofs.EnetTieG.EnetNetLossTiedG (xN vN epsStr cotN dN : String) (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (hεw : w.EpsPos) (bf16 : Bool) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (x : Vec (N * (3 * 224 * 224))) (L : Vec (N * nCls) → Vec 1) (g : Vec (N * nCls)) :

                                                                                                                                    Every EfficientNet-B0 parameter gradient node is the derivative of L in that parameter, for a loss L of the logits and g the cotangent the chain starts from: the 262 nodes efficientnet_net_tiedG ties, each at the cotangent the certified block VJPs thread to it from g, stated against L of efficientnetForwardBFull with that one parameter varied.

                                                                                                                                    Equations
                                                                                                                                    • One or more equations did not get rendered due to their size.
                                                                                                                                    Instances For
                                                                                                                                      theorem Proofs.EnetTieG.enet_net_lossGrad (xN vN epsStr cotN dN : String) (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (hεw : w.EpsPos) (bf16 : Bool) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (x : Vec (N * (3 * 224 * 224))) {L : Vec (N * nCls) → Vec 1} {g : Vec (N * nCls)} (hL : HasGradAt L (efficientnetForwardBFullDrop N w sd cd x) g) :
                                                                                                                                      EnetNetLossTiedG xN vN epsStr cotN dN N w hεw bf16 sd cd x L g

                                                                                                                                      Every EfficientNet-B0 parameter gradient node is the derivative of the loss in that parameter. For any loss L of the logits with gradient g at the net's output, each of the 262 nodes efficientnet_net_tiedG ties — at the same cotangent — is ∂L/∂θ of the WHOLE net, efficientnetForwardBFull with that one parameter varied (a stem field, a block's weight record w.bk := p with one slot changed, or a head field).

                                                                                                                                      Hypothesis: every BN ε positive (B0Weights.EpsPos), as in the tie. The loss enters only through hL; enet_net_lossGrad_smoothedCE discharges it for the loss the artifacts ship.

                                                                                                                                      theorem Proofs.EnetTieG.enet_net_lossGrad_smoothedCE (xN vN epsStr cotN dN aStr negAK bStr logN ohN : String) (N : ℕ) {nCls : ℕ} (hK : 0 < nCls) (α B : ℝ) (w : B0Weights nCls) (hεw : w.EpsPos) (bf16 : Bool) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (x : Vec (N * (3 * 224 * 224))) (t : Vec (N * (1 * nCls))) (ht : ∀ (n : Fin N), ∑ k : Fin nCls, targetRow N nCls t n k = 1) :
                                                                                                                                      EnetNetLossTiedG xN vN epsStr cotN dN N w hεw bf16 sd cd x (smoothedBatchLoss N nCls α B t) (BackLinks.unrowB N nCls (StableHLO.den (smoothedLossCotGraph N nCls α B aStr negAK bStr logN ohN (BackLinks.rowB N nCls (efficientnetForwardBFullDrop N w sd cd x)) t)))

                                                                                                                                      The loss the artifacts ship: every node is the derivative of the batched label-smoothed cross-entropy smoothedBatchLoss, g the six-op cotangent the render emits — the tie's own g, whose logits headFwdB … a16 are efficientnetForwardBFullDrop N w sd cd x.

                                                                                                                                      theorem Proofs.EnetTieG.enet_net_tied_lossGrad (xN vN epsStr cotN dN : String) (N : ℕ) {nCls : ℕ} (w : B0Weights nCls) (hεw : w.EpsPos) (bf16 : Bool) (sd : Option (Fin 9 → Vec N)) (cd : Option (Vec (N * 1280))) (aStr negAK bStr logN ohN : String) (α B : ℝ) (x : Vec (N * (3 * 224 * 224))) (t : Vec (N * (1 * nCls))) (hK : 0 < nCls) (ht : ∀ (n : Fin N), ∑ k : Fin nCls, targetRow N nCls t n k = 1) :
                                                                                                                                      have a0 := stemB N w.sW w.sb w.sε w.sγ w.sβ x; have a1 := mbNoExpW N 112 112 w.b1 a0; have a2 := mbStridedW N 56 56 w.b2 a1; have a3 := mbResidDropW N 56 56 w.b3 (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) a2; have a4 := mbStridedW N 28 28 w.b4 a3; have a5 := mbResidDropW N 28 28 w.b5 (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) a4; have a6 := mbStridedW N 14 14 w.b6 a5; have a7 := mbResidDropW N 14 14 w.b7 (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) a6; have a8 := mbResidDropW N 14 14 w.b8 (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) a7; have a9 := mbExpW N 14 14 w.b9 a8; have a10 := mbResidDropW N 14 14 w.b10 (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) a9; have a11 := mbResidDropW N 14 14 w.b11 (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) a10; have a12 := mbStridedW N 7 7 w.b12 a11; have a13 := mbResidDropW N 7 7 w.b13 (Option.map (fun (f : Fin 9 → Vec N) => f 6) sd) a12; have a14 := mbResidDropW N 7 7 w.b14 (Option.map (fun (f : Fin 9 → Vec N) => f 7) sd) a13; have a15 := mbResidDropW N 7 7 w.b15 (Option.map (fun (f : Fin 9 → Vec N) => f 8) sd) a14; have a16 := mbExpW N 7 7 w.b16 a15; have g := BackLinks.unrowB N nCls (StableHLO.den (smoothedLossCotGraph N nCls α B aStr negAK bStr logN ohN (BackLinks.rowB N nCls (headDoFwdB N w.hW w.hb w.hε w.hγ w.hβ w.fcW w.fcb cd a16)) t)); have dy16 := (headDoFwdBHasVJP N w.hW w.hb w.hε ⋯ w.hγ w.hβ w.fcW w.fcb cd).backward a16 g; have dy15 := (mbExpWHasVJP N 7 7 w.b16 ⋯ ⋯ ⋯).backward a15 dy16; have dy14 := (mbResidDropWHasVJP N 7 7 w.b15 (Option.map (fun (f : Fin 9 → Vec N) => f 8) sd) ⋯ ⋯ ⋯).backward a14 dy15; have dy13 := (mbResidDropWHasVJP N 7 7 w.b14 (Option.map (fun (f : Fin 9 → Vec N) => f 7) sd) ⋯ ⋯ ⋯).backward a13 dy14; have dy12 := (mbResidDropWHasVJP N 7 7 w.b13 (Option.map (fun (f : Fin 9 → Vec N) => f 6) sd) ⋯ ⋯ ⋯).backward a12 dy13; have dy11 := (mbStridedWHasVJP N 7 7 w.b12 ⋯ ⋯ ⋯).backward a11 dy12; have dy10 := (mbResidDropWHasVJP N 14 14 w.b11 (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) ⋯ ⋯ ⋯).backward a10 dy11; have dy9 := (mbResidDropWHasVJP N 14 14 w.b10 (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) ⋯ ⋯ ⋯).backward a9 dy10; have dy8 := (mbExpWHasVJP N 14 14 w.b9 ⋯ ⋯ ⋯).backward a8 dy9; have dy7 := (mbResidDropWHasVJP N 14 14 w.b8 (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) ⋯ ⋯ ⋯).backward a7 dy8; have dy6 := (mbResidDropWHasVJP N 14 14 w.b7 (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) ⋯ ⋯ ⋯).backward a6 dy7; have dy5 := (mbStridedWHasVJP N 14 14 w.b6 ⋯ ⋯ ⋯).backward a5 dy6; have dy4 := (mbResidDropWHasVJP N 28 28 w.b5 (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) ⋯ ⋯ ⋯).backward a4 dy5; have dy3 := (mbStridedWHasVJP N 28 28 w.b4 ⋯ ⋯ ⋯).backward a3 dy4; have dy2 := (mbResidDropWHasVJP N 56 56 w.b3 (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) ⋯ ⋯ ⋯).backward a2 dy3; have dy1 := (mbStridedWHasVJP N 56 56 w.b2 ⋯ ⋯ ⋯).backward a1 dy2; have dy0 := (mbNoExpWHasVJP N 112 112 w.b1 ⋯ ⋯).backward a0 dy1; have L := smoothedBatchLoss N nCls α B t; (enetStemTiedG xN vN epsStr cotN w.sε ⋯ w.sW w.sb w.sγ w.sβ bf16 x dy0 ∧ enetStemLossTiedG xN vN epsStr cotN w.sε ⋯ w.sW w.sb w.sγ w.sβ bf16 x (fun (W : Kernel4 32 3 3 3) (b γ β : Vec 32) => L (efficientnetForwardBFullDrop N { sW := W, sb := b, sε := w.sε, sγ := γ, sβ := β, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) dy0) ∧ (enetNoExpTiedGAt xN vN epsStr cotN 112 112 w.b1 ⋯ ⋯ bf16 a0 dy1 ∧ enetNoExpLossTiedG xN vN epsStr cotN w.b1 ⋯ bf16 a0 (fun (p : MBWNoExp 32 16 8 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := p, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) dy1) ∧ (enetStridedTiedGAt xN vN epsStr cotN 56 56 w.b2 ⋯ ⋯ ⋯ bf16 a1 dy2 ∧ enetStridedLossTiedG xN vN epsStr cotN w.b2 ⋯ bf16 a1 (fun (p : MBW 16 96 24 4 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := p, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) dy2) ∧ (enetExpTiedGAt xN vN epsStr cotN 56 56 w.b3 ⋯ ⋯ ⋯ bf16 a2 (dropPathOpt N (24 * 56 * 56) (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) dy3) ∧ enetExpLossTiedG xN vN epsStr cotN w.b3 ⋯ bf16 a2 (fun (p : MBW 24 144 24 6 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := p, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) (dropPathOpt N (24 * 56 * 56) (Option.map (fun (f : Fin 9 → Vec N) => f 0) sd) dy3)) ∧ (enetStridedTiedGAt xN vN epsStr cotN 28 28 w.b4 ⋯ ⋯ ⋯ bf16 a3 dy4 ∧ enetStridedLossTiedG xN vN epsStr cotN w.b4 ⋯ bf16 a3 (fun (p : MBW 24 144 40 6 5 5) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := p, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) dy4) ∧ (enetExpTiedGAt xN vN epsStr cotN 28 28 w.b5 ⋯ ⋯ ⋯ bf16 a4 (dropPathOpt N (40 * 28 * 28) (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) dy5) ∧ enetExpLossTiedG xN vN epsStr cotN w.b5 ⋯ bf16 a4 (fun (p : MBW 40 240 40 10 5 5) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := p, b6 := w.b6, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) (dropPathOpt N (40 * 28 * 28) (Option.map (fun (f : Fin 9 → Vec N) => f 1) sd) dy5)) ∧ (enetStridedTiedGAt xN vN epsStr cotN 14 14 w.b6 ⋯ ⋯ ⋯ bf16 a5 dy6 ∧ enetStridedLossTiedG xN vN epsStr cotN w.b6 ⋯ bf16 a5 (fun (p : MBW 40 240 80 10 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := p, b7 := w.b7, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) dy6) ∧ (enetExpTiedGAt xN vN epsStr cotN 14 14 w.b7 ⋯ ⋯ ⋯ bf16 a6 (dropPathOpt N (80 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) dy7) ∧ enetExpLossTiedG xN vN epsStr cotN w.b7 ⋯ bf16 a6 (fun (p : MBW 80 480 80 20 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := p, b8 := w.b8, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) (dropPathOpt N (80 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 2) sd) dy7)) ∧ (enetExpTiedGAt xN vN epsStr cotN 14 14 w.b8 ⋯ ⋯ ⋯ bf16 a7 (dropPathOpt N (80 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) dy8) ∧ enetExpLossTiedG xN vN epsStr cotN w.b8 ⋯ bf16 a7 (fun (p : MBW 80 480 80 20 3 3) => L (efficientnetForwardBFullDrop N { sW := w.sW, sb := w.sb, sε := w.sε, sγ := w.sγ, sβ := w.sβ, b1 := w.b1, b2 := w.b2, b3 := w.b3, b4 := w.b4, b5 := w.b5, b6 := w.b6, b7 := w.b7, b8 := p, b9 := w.b9, b10 := w.b10, b11 := w.b11, b12 := w.b12, b13 := w.b13, b14 := w.b14, b15 := w.b15, b16 := w.b16, hW := w.hW, hb := w.hb, hε := w.hε, hγ := w.hγ, hβ := w.hβ, fcW := w.fcW, fcb := w.fcb } sd cd x)) (dropPathOpt N (80 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 3) sd) dy8)) ∧ (enetExpTiedGAt xN vN epsStr cotN 14 14 w.b9 ⋯ ⋯ ⋯ bf16 a8 dy9 ∧ enetExpLossTiedG xN vN epsStr cotN w.b9 ⋯ bf16 a8 (fun (p : MBW 80 480 112 20 5 5) => L (efficientnetForwardBFullDrop N ⋯ sd cd x)) dy9) ∧ (enetExpTiedGAt xN vN epsStr cotN 14 14 w.b10 ⋯ ⋯ ⋯ bf16 a9 (dropPathOpt N (112 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) dy10) ∧ enetExpLossTiedG xN vN epsStr cotN w.b10 ⋯ bf16 a9 (fun (p : MBW 112 672 112 28 5 5) => L ⋯) (dropPathOpt N (112 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 4) sd) dy10)) ∧ (enetExpTiedGAt xN vN epsStr cotN 14 14 w.b11 ⋯ ⋯ ⋯ bf16 a10 (dropPathOpt N (112 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) dy11) ∧ enetExpLossTiedG xN vN epsStr cotN w.b11 ⋯ bf16 a10 (fun (p : MBW 112 672 112 28 5 5) => ⋯) (dropPathOpt N (112 * 14 * 14) (Option.map (fun (f : Fin 9 → Vec N) => f 5) sd) dy11)) ∧ (enetStridedTiedGAt xN vN epsStr cotN 7 7 w.b12 ⋯ ⋯ ⋯ bf16 a11 dy12 ∧ enetStridedLossTiedG xN vN epsStr cotN w.b12 ⋯ bf16 a11 ⋯ dy12) ∧ (⋯ ∧ ⋯) ∧ ⋯ ∧ ⋯

                                                                                                                                      The emitted EfficientNet-B0 step's gradient nodes ARE the loss's gradient, at one chain. For each of the 262 parameter slots, at ONE cotangent chain (the tie's own, from the emitted smoothed-loss cotangent g): the node denotes its layer's Jacobian against the chain cotangent (efficientnet_net_tiedG), and the batched smoothed loss of efficientnetForwardBFull with that one slot varied is differentiable there with the node as its gradient (enet_net_lossGrad_smoothedCE). The tie spells each block input as its own let; the proof rewrites the loss side's enetPre* into those lets (enetPreB0_apply, …) and the loss side's logits into the tie's (enet_forward_eq_head).