diff --git a/dev_swift/03_minibatch_training.ipynb b/dev_swift/03_minibatch_training.ipynb index 6887bfebd..719858553 100644 --- a/dev_swift/03_minibatch_training.ipynb +++ b/dev_swift/03_minibatch_training.ipynb @@ -779,7 +779,7 @@ " lossFunc: @escaping @differentiable (Opt.Model.Output, @nondiff Label) -> Tensor\n", ") where Opt.Model: Layer,\n", " Opt.Model.Input: TensorGroup,\n", - " Opt.Model.CotangentVector == Opt.Model.AllDifferentiableVariables,\n", + " Opt.Model.TangentVector == Opt.Model.AllDifferentiableVariables,\n", " Opt.Scalar: TensorFlowFloatingPoint\n", "{\n", " for batch in ds {\n", diff --git a/dev_swift/07_batchnorm.ipynb b/dev_swift/07_batchnorm.ipynb index 4821b0ea5..660827704 100644 --- a/dev_swift/07_batchnorm.ipynb +++ b/dev_swift/07_batchnorm.ipynb @@ -236,8 +236,8 @@ "\n", " @differentiating(forward)\n", " func gradForward(_ input: Input) ->\n", - " (value: Output, pullback: (Self.Output.CotangentVector) ->\n", - " (Self.CotangentVector, Self.Input.CotangentVector)) {\n", + " (value: Output, pullback: (Self.Output.TangentVector) ->\n", + " (Self.TangentVector, Self.Input.TangentVector)) {\n", " switch Context.local.learningPhase {\n", " case .training:\n", " return valueWithPullback(at: input) { $0.forwardTraining ($1) }\n", @@ -382,9 +382,9 @@ " static func _vjpFusedBatchNorm(\n", " _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar\n", " ) -> (BatchNormResult, \n", - " (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, \n", - " Tensor.CotangentVector, \n", - " Tensor.CotangentVector)) {\n", + " (BatchNormResult.TangentVector) -> (Tensor.TangentVector, \n", + " Tensor.TangentVector, \n", + " Tensor.TangentVector)) {\n", " let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon)\n", " \n", " return (\n", diff --git a/dev_swift/07b_batchnorm_lesson.ipynb b/dev_swift/07b_batchnorm_lesson.ipynb index 5c4bb7d14..63a89c780 100644 --- a/dev_swift/07b_batchnorm_lesson.ipynb +++ b/dev_swift/07b_batchnorm_lesson.ipynb @@ -177,8 +177,8 @@ "\n", " @differentiating(forward)\n", " func gradForward(_ input: Input) ->\n", - " (value: Output, pullback: (Self.Output.CotangentVector) ->\n", - " (Self.CotangentVector, Self.Input.CotangentVector)) {\n", + " (value: Output, pullback: (Self.Output.TangentVector) ->\n", + " (Self.TangentVector, Self.Input.TangentVector)) {\n", " switch Context.local.learningPhase {\n", " case .training: return valueWithPullback(at: input) { $0.forwardTraining($1) }\n", " case .inference: return valueWithPullback(at: input) { $0.forwardInference($1) }\n", @@ -260,7 +260,7 @@ "source": [ "//export\n", "public struct ConvNorm: FALayer\n", - " where NormType.AllDifferentiableVariables == NormType.CotangentVector {\n", + " where NormType.AllDifferentiableVariables == NormType.TangentVector {\n", " public var conv: FANoBiasConv2D\n", " public var norm: NormType\n", " \n", @@ -285,7 +285,7 @@ "source": [ "//export\n", "public struct CnnModelNormed: FALayer\n", - " where NormType.AllDifferentiableVariables == NormType.CotangentVector {\n", + " where NormType.AllDifferentiableVariables == NormType.TangentVector {\n", " public var convs: [ConvNorm]\n", " public var pool = FAGlobalAvgPool2D()\n", " public var linear: FADense\n", @@ -416,10 +416,10 @@ "\n", "func xlaCompiled(\n", " _ fn: @escaping @differentiable (T) -> U) -> CompiledFunction\n", - " where T.CotangentVector : TensorGroup, U.CotangentVector : TensorGroup {\n", + " where T.TangentVector : TensorGroup, U.TangentVector : TensorGroup {\n", " let xlaCompiledFn: (T) -> U = _graph(fn, useXLA: true)\n", " let xlaCompiledPullback = _graph(\n", - " { (pbArgs: PullbackArgs) in\n", + " { (pbArgs: PullbackArgs) in\n", " pullback(at: pbArgs.input, in: fn)(pbArgs.cotangent) },\n", " useXLA: true\n", " )\n", diff --git a/dev_swift/09_optimizer.ipynb b/dev_swift/09_optimizer.ipynb index a776ec6a6..a756f6282 100644 --- a/dev_swift/09_optimizer.ipynb +++ b/dev_swift/09_optimizer.ipynb @@ -264,7 +264,7 @@ "source": [ "//export\n", "public class StatefulOptimizer\n", - " where Model.AllDifferentiableVariables == Model.CotangentVector {\n", + " where Model.AllDifferentiableVariables == Model.TangentVector {\n", " public typealias ModelKeyPath = WritableKeyPath\n", " public typealias SplitDict = [ModelKeyPath: Int]\n", " public var hpGroups: [[String:Float]]\n", @@ -291,7 +291,7 @@ " \n", " public func update(\n", " _ variables: inout Model.AllDifferentiableVariables,\n", - " along direction: Model.CotangentVector\n", + " along direction: Model.TangentVector\n", " ) {\n", " for kp in variables.keyPaths {\n", " var 𝛁p = direction[keyPath: kp]\n", @@ -949,7 +949,7 @@ "source": [ "// export\n", "extension Learner where Opt.Scalar: BinaryFloatingPoint, \n", - " Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{\n", + " Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{\n", " public class ParamScheduler: Delegate {\n", " public override var order: Int { return 1 }\n", " public typealias ScheduleFunc = (Float) -> Float\n", @@ -1011,7 +1011,7 @@ "source": [ "// export\n", "extension Learner where Opt.Scalar: BinaryFloatingPoint, \n", - " Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{\n", + " Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{\n", "\n", " public func addOneCycleDelegates(_ lrMax: Float, pctStart:Float=0.25, divStart: Float = 10, divEnd: Float = 1e5, \n", " moms: (Float,Float,Float) = (0.95,0.85,0.95)) {\n", diff --git a/dev_swift/11_imagenette.ipynb b/dev_swift/11_imagenette.ipynb index ea42ffe35..2d086ae9f 100644 --- a/dev_swift/11_imagenette.ipynb +++ b/dev_swift/11_imagenette.ipynb @@ -312,12 +312,12 @@ " @differentiating(callAsFunction)\n", " func gradForward(_ input: Input) ->\n", " (value: Input,\n", - " pullback: (Self.Input.CotangentVector) ->\n", - " (Self.CotangentVector, Self.Input.CotangentVector)) {\n", + " pullback: (Self.Input.TangentVector) ->\n", + " (Self.TangentVector, Self.Input.TangentVector)) {\n", " if isOn {\n", " return valueWithPullback(at: input) { $0.forward($1) } \n", " } else {\n", - " return (input, { (Self.CotangentVector.zero, $0) }) \n", + " return (input, { (Self.TangentVector.zero, $0) }) \n", " }\n", " }\n", "}" diff --git a/dev_swift/FastaiNotebook_07_batchnorm/Sources/FastaiNotebook_07_batchnorm/07_batchnorm.swift b/dev_swift/FastaiNotebook_07_batchnorm/Sources/FastaiNotebook_07_batchnorm/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_07_batchnorm/Sources/FastaiNotebook_07_batchnorm/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_07_batchnorm/Sources/FastaiNotebook_07_batchnorm/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_08_data_block/Sources/FastaiNotebook_08_data_block/07_batchnorm.swift b/dev_swift/FastaiNotebook_08_data_block/Sources/FastaiNotebook_08_data_block/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_08_data_block/Sources/FastaiNotebook_08_data_block/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_08_data_block/Sources/FastaiNotebook_08_data_block/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_08a_heterogeneous_dictionary/Sources/FastaiNotebook_08a_heterogeneous_dictionary/07_batchnorm.swift b/dev_swift/FastaiNotebook_08a_heterogeneous_dictionary/Sources/FastaiNotebook_08a_heterogeneous_dictionary/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_08a_heterogeneous_dictionary/Sources/FastaiNotebook_08a_heterogeneous_dictionary/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_08a_heterogeneous_dictionary/Sources/FastaiNotebook_08a_heterogeneous_dictionary/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_08c_data_block_generic/Sources/FastaiNotebook_08c_data_block_generic/07_batchnorm.swift b/dev_swift/FastaiNotebook_08c_data_block_generic/Sources/FastaiNotebook_08c_data_block_generic/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_08c_data_block_generic/Sources/FastaiNotebook_08c_data_block_generic/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_08c_data_block_generic/Sources/FastaiNotebook_08c_data_block_generic/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/07_batchnorm.swift b/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/09_optimizer.swift b/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/09_optimizer.swift index 205c159b9..3f74b2dcd 100644 --- a/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/09_optimizer.swift +++ b/dev_swift/FastaiNotebook_09_optimizer/Sources/FastaiNotebook_09_optimizer/09_optimizer.swift @@ -58,7 +58,7 @@ public func initState(for model: Model, names: [String]) } public class StatefulOptimizer - where Model.AllDifferentiableVariables == Model.CotangentVector { + where Model.AllDifferentiableVariables == Model.TangentVector { public typealias ModelKeyPath = WritableKeyPath public typealias SplitDict = [ModelKeyPath: Int] public var hpGroups: [[String:Float]] @@ -85,7 +85,7 @@ public class StatefulOptimizer public func update( _ variables: inout Model.AllDifferentiableVariables, - along direction: Model.CotangentVector + along direction: Model.TangentVector ) { for kp in variables.keyPaths { var 𝛁p = direction[keyPath: kp] @@ -273,7 +273,7 @@ public extension StatefulOptimizer { } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public class ParamScheduler: Delegate { public override var order: Int { return 1 } public typealias ScheduleFunc = (Float) -> Float @@ -312,7 +312,7 @@ public func oneCycleSchedulers(_ lrMax: Float, pctStart:Float=0.25, divStart: Fl } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public func addOneCycleDelegates(_ lrMax: Float, pctStart:Float=0.25, divStart: Float = 10, divEnd: Float = 1e5, moms: (Float,Float,Float) = (0.95,0.85,0.95)) { diff --git a/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/07_batchnorm.swift b/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/09_optimizer.swift b/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/09_optimizer.swift index 205c159b9..3f74b2dcd 100644 --- a/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/09_optimizer.swift +++ b/dev_swift/FastaiNotebook_10_mixup_ls/Sources/FastaiNotebook_10_mixup_ls/09_optimizer.swift @@ -58,7 +58,7 @@ public func initState(for model: Model, names: [String]) } public class StatefulOptimizer - where Model.AllDifferentiableVariables == Model.CotangentVector { + where Model.AllDifferentiableVariables == Model.TangentVector { public typealias ModelKeyPath = WritableKeyPath public typealias SplitDict = [ModelKeyPath: Int] public var hpGroups: [[String:Float]] @@ -85,7 +85,7 @@ public class StatefulOptimizer public func update( _ variables: inout Model.AllDifferentiableVariables, - along direction: Model.CotangentVector + along direction: Model.TangentVector ) { for kp in variables.keyPaths { var 𝛁p = direction[keyPath: kp] @@ -273,7 +273,7 @@ public extension StatefulOptimizer { } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public class ParamScheduler: Delegate { public override var order: Int { return 1 } public typealias ScheduleFunc = (Float) -> Float @@ -312,7 +312,7 @@ public func oneCycleSchedulers(_ lrMax: Float, pctStart:Float=0.25, divStart: Fl } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public func addOneCycleDelegates(_ lrMax: Float, pctStart:Float=0.25, divStart: Float = 10, divEnd: Float = 1e5, moms: (Float,Float,Float) = (0.95,0.85,0.95)) { diff --git a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/07_batchnorm.swift b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/07_batchnorm.swift index 06bffeef8..69fb13a20 100644 --- a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/07_batchnorm.swift +++ b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/07_batchnorm.swift @@ -38,8 +38,8 @@ extension LearningPhaseDependent { @differentiating(forward) func gradForward(_ input: Input) -> - (value: Output, pullback: (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Output, pullback: (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining ($1) } @@ -154,9 +154,9 @@ public struct TFBatchNorm: LearningPhaseDepende static func _vjpFusedBatchNorm( _ x : Tensor, scale: Tensor, offset: Tensor, epsilon: Scalar ) -> (BatchNormResult, - (BatchNormResult.CotangentVector) -> (Tensor.CotangentVector, - Tensor.CotangentVector, - Tensor.CotangentVector)) { + (BatchNormResult.TangentVector) -> (Tensor.TangentVector, + Tensor.TangentVector, + Tensor.TangentVector)) { let bnresult = fusedBatchNorm(x, scale: scale, offset: offset, epsilon: epsilon) return ( diff --git a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/09_optimizer.swift b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/09_optimizer.swift index 205c159b9..3f74b2dcd 100644 --- a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/09_optimizer.swift +++ b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/09_optimizer.swift @@ -58,7 +58,7 @@ public func initState(for model: Model, names: [String]) } public class StatefulOptimizer - where Model.AllDifferentiableVariables == Model.CotangentVector { + where Model.AllDifferentiableVariables == Model.TangentVector { public typealias ModelKeyPath = WritableKeyPath public typealias SplitDict = [ModelKeyPath: Int] public var hpGroups: [[String:Float]] @@ -85,7 +85,7 @@ public class StatefulOptimizer public func update( _ variables: inout Model.AllDifferentiableVariables, - along direction: Model.CotangentVector + along direction: Model.TangentVector ) { for kp in variables.keyPaths { var 𝛁p = direction[keyPath: kp] @@ -273,7 +273,7 @@ public extension StatefulOptimizer { } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public class ParamScheduler: Delegate { public override var order: Int { return 1 } public typealias ScheduleFunc = (Float) -> Float @@ -312,7 +312,7 @@ public func oneCycleSchedulers(_ lrMax: Float, pctStart:Float=0.25, divStart: Fl } extension Learner where Opt.Scalar: BinaryFloatingPoint, - Opt.Model.AllDifferentiableVariables == Opt.Model.CotangentVector{ + Opt.Model.AllDifferentiableVariables == Opt.Model.TangentVector{ public func addOneCycleDelegates(_ lrMax: Float, pctStart:Float=0.25, divStart: Float = 10, divEnd: Float = 1e5, moms: (Float,Float,Float) = (0.95,0.85,0.95)) { diff --git a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/11_imagenette.swift b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/11_imagenette.swift index be95b875f..ea9438f45 100644 --- a/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/11_imagenette.swift +++ b/dev_swift/FastaiNotebook_11_imagenette/Sources/FastaiNotebook_11_imagenette/11_imagenette.swift @@ -44,12 +44,12 @@ public extension SwitchableLayer { @differentiating(callAsFunction) func gradForward(_ input: Input) -> (value: Input, - pullback: (Self.Input.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + pullback: (Self.Input.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { if isOn { return valueWithPullback(at: input) { $0.forward($1) } } else { - return (input, { (Self.CotangentVector.zero, $0) }) + return (input, { (Self.TangentVector.zero, $0) }) } } } diff --git a/dev_swift/Runnable11/Sources/Runnable11/01a_fastai_layers.swift b/dev_swift/Runnable11/Sources/Runnable11/01a_fastai_layers.swift index 29fdd341b..b99950c67 100644 --- a/dev_swift/Runnable11/Sources/Runnable11/01a_fastai_layers.swift +++ b/dev_swift/Runnable11/Sources/Runnable11/01a_fastai_layers.swift @@ -52,7 +52,7 @@ public extension FALayer { } func callGrad(_ input: Input) -> - (Output, (Self.Output.CotangentVector) -> (Self.CotangentVector, Self.Input.CotangentVector)) { + (Output, (Self.Output.TangentVector) -> (Self.TangentVector, Self.Input.TangentVector)) { return Swift.valueWithPullback(at: self, input) { (m, i) in m.forward(i) } } } @@ -288,24 +288,24 @@ extension Array: Layer where Element: Layer, Element.Input == Element.Output { } public func _vjpApplied(_ input: Input) - -> (Output, (Output.CotangentVector) -> (Array.CotangentVector, Input.CotangentVector)) + -> (Output, (Output.TangentVector) -> (Array.TangentVector, Input.TangentVector)) { var activation = input - var pullbacks: [(Input.CotangentVector) -> (Element.CotangentVector, Input.CotangentVector)] = [] + var pullbacks: [(Input.TangentVector) -> (Element.TangentVector, Input.TangentVector)] = [] for layer in self { let (newActivation, newPullback) = layer.valueWithPullback(at: activation) { $0($1) } activation = newActivation pullbacks.append(newPullback) } - func pullback(_ v: Input.CotangentVector) -> (Array.CotangentVector, Input.CotangentVector) { + func pullback(_ v: Input.TangentVector) -> (Array.TangentVector, Input.TangentVector) { var activationGradient = v - var layerGradients: [Element.CotangentVector] = [] + var layerGradients: [Element.TangentVector] = [] for pullback in pullbacks.reversed() { let (newLayerGradient, newActivationGradient) = pullback(activationGradient) activationGradient = newActivationGradient layerGradients.append(newLayerGradient) } - return (Array.CotangentVector(layerGradients.reversed()), activationGradient) + return (Array.TangentVector(layerGradients.reversed()), activationGradient) } return (activation, pullback) } diff --git a/dev_swift/Runnable11/Sources/Runnable11/04_callbacks.swift b/dev_swift/Runnable11/Sources/Runnable11/04_callbacks.swift index 1c7ea127e..5a9c0d4aa 100644 --- a/dev_swift/Runnable11/Sources/Runnable11/04_callbacks.swift +++ b/dev_swift/Runnable11/Sources/Runnable11/04_callbacks.swift @@ -115,7 +115,7 @@ public final class Learner - (Output, (Self.Output.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (Output, (Self.Output.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { switch Context.local.learningPhase { case .training: return valueWithPullback(at: input) { $0.forwardTraining(to: $1) } diff --git a/dev_swift/Runnable11/Sources/Runnable11/09_optimizer.swift b/dev_swift/Runnable11/Sources/Runnable11/09_optimizer.swift index 8d603bc5d..6a8164b4c 100644 --- a/dev_swift/Runnable11/Sources/Runnable11/09_optimizer.swift +++ b/dev_swift/Runnable11/Sources/Runnable11/09_optimizer.swift @@ -43,7 +43,7 @@ public extension Tensor where Scalar: Numeric { } public class StatefulOptimizer - where Model.AllDifferentiableVariables == Model.CotangentVector{ + where Model.AllDifferentiableVariables == Model.TangentVector{ public var configs: [HeterogeneousDictionary] public var splitFunc: (Int) -> Int public var states: [String: Model.AllDifferentiableVariables] @@ -78,7 +78,7 @@ public class StatefulOptimizer public func update( _ model: inout Model.AllDifferentiableVariables, - along direction: Model.CotangentVector + along direction: Model.TangentVector ) { for (i,kp) in model.keyPaths.enumerated() { var grad = direction[keyPath: kp] diff --git a/dev_swift/Runnable11/Sources/Runnable11/main.swift b/dev_swift/Runnable11/Sources/Runnable11/main.swift index 567893e93..546c09f56 100644 --- a/dev_swift/Runnable11/Sources/Runnable11/main.swift +++ b/dev_swift/Runnable11/Sources/Runnable11/main.swift @@ -59,10 +59,10 @@ public extension SwitchableLayer { @differentiating(call) func gradForward(_ input: Input) -> - (value: Input, pullback: (Self.Input.CotangentVector) -> - (Self.CotangentVector, Self.Input.CotangentVector)) { + (value: Input, pullback: (Self.Input.TangentVector) -> + (Self.TangentVector, Self.Input.TangentVector)) { if isOn { return valueWithPullback(at: input) { $0.forward($1) } } - else { return (input, {v in return (Self.CotangentVector.zero, v)}) } + else { return (input, {v in return (Self.TangentVector.zero, v)}) } } } diff --git a/dev_swift/audio.ipynb b/dev_swift/audio.ipynb index 2f3cb0dff..c6d0dbb93 100644 --- a/dev_swift/audio.ipynb +++ b/dev_swift/audio.ipynb @@ -597,10 +597,10 @@ "\n", " @differentiating(call)\n", " func gradForward(_ input: Input) ->\n", - " (value: Input, pullback: (Self.Input.CotangentVector) ->\n", - " (Self.CotangentVector, Self.Input.CotangentVector)) {\n", + " (value: Input, pullback: (Self.Input.TangentVector) ->\n", + " (Self.TangentVector, Self.Input.TangentVector)) {\n", " if isOn { return valueWithPullback(at: input) { $0.forward($1) } }\n", - " else { return (input, {v in return (Self.CotangentVector.zero, v)}) }\n", + " else { return (input, {v in return (Self.TangentVector.zero, v)}) }\n", " }\n", "}" ]