public protocol Differentiable
Тип, математически представляющий дифференцируемое многообразие, касательные пространства которого конечномерны.
Тип, представляющий производные дифференцируемого значения.
Математически это эквивалентно касательному расслоению дифференцируемого многообразия, представленного дифференцируемым типом.
Декларация
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Хода
self
по данному направлению. В римановой геометрии, это эквивалентно экспоненциальной карте, которая движетсяself
на геодезической поверхности вдоль заданного касательного вектора.Декларация
mutating mutating func move(along direction: TangentVector)
Затвор , который производит нулевой касательный вектор а, захватив минимально необходимую информацию от
self
.move(along: zeroTangentVectorInitializer())
не должны изменятьself
.В некоторых случаях, нулевой касательный вектор
self
равноTangentVector.zero
. В других случаях, нулевой вектор касательной зависит от информации вself
, таких как форма для п-мерного массива типа. Для дифференцируемого программирования, более эффективно использует память , чтобы определить пользовательскоеzeroTangentVectorInitializer
свойства , которое возвращает замыкание , которое захватывает и использует только необходимую информацию для создания нулевого касательного вектора а. Например:struct Vector { var scalars: [Float] var count: Int { scalars.count } init(scalars: [Float]) { ... } init(repeating repeatedElement: Float, count: Int) { ... } } extension Vector: AdditiveArithmetic { ... } extension Vector: Differentiable { typealias TangentVector = Vector @noDerivative var zeroTangentVectorInitializer: () -> TangentVector { let count = self.count return { TangentVector(repeating: 0, count: count) } } }
Декларация
var zeroTangentVectorInitializer: () -> TangentVector { get }
Касательный вектор инициализации с помощью
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
не должны изменятьself
.Декларация
var zeroTangentVector: TangentVector { get }
Декларация
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Применяется данное замыкание производной
self
.Возвращает
self
как тождественной функции. Когда возвращаемое значение используется в контексте, где оно дифференцировано относительно, применяет данное замыкание к производной возвращаемого значения.Декларация
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Возвращает выходные вычисляется путем применения последовательности слоев для вывода предыдущего слоя, за исключением того, что вход первого слоя является
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
Возвращаемое значение
Вывод последнего слоя после последовательного нанесения.
Возвращает выходные вычисляется путем применения последовательности слоев для вывода предыдущего слоя, за исключением того, что вход первого слоя является
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
Возвращаемое значение
Вывод последнего слоя после последовательного нанесения.
Возвращает выходные вычисляется путем применения последовательности слоев для вывода предыдущего слоя, за исключением того, что вход первого слоя является
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
l4
Четвертый слой.
Возвращаемое значение
Вывод последнего слоя после последовательного нанесения.
Возвращает выходные вычисляется путем применения последовательности слоев для вывода предыдущего слоя, за исключением того, что вход первого слоя является
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
l4
Третий слой.
l5
Пятый слой.
Возвращаемое значение
Вывод последнего слоя после последовательного нанесения.
Возвращает выходные вычисляется путем применения последовательности слоев для вывода предыдущего слоя, за исключением того, что вход первого слоя является
self
.Декларация
@differentiable public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer, L6: Layer>( through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5, _ l6: L6 ) -> L6.Output where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input, L4.Output == L5.Input, L5.Output == L6.Input
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
l4
Третий слой.
l5
Пятый слой.
l6
Шестой слой.
Возвращаемое значение
Вывод последнего слоя после последовательного нанесения.