trait
Symbolic[NativeOutput] extends AnyRef
Type Members
-
abstract
type
@ <: Layer
Value Members
-
-
final
def
!=(arg0: Any): Boolean
-
final
def
##(): Int
-
def
+(other: String): String
-
def
->[B](y: B): (Symbolic[NativeOutput], B)
-
-
final
def
==(arg0: Any): Boolean
-
final
def
asInstanceOf[T0]: T0
-
def
clone(): AnyRef
-
def
ensuring(cond: (Symbolic[NativeOutput]) ⇒ Boolean, msg: ⇒ Any): Symbolic[NativeOutput]
-
def
ensuring(cond: (Symbolic[NativeOutput]) ⇒ Boolean): Symbolic[NativeOutput]
-
def
ensuring(cond: Boolean, msg: ⇒ Any): Symbolic[NativeOutput]
-
def
ensuring(cond: Boolean): Symbolic[NativeOutput]
-
-
-
def
finalize(): Unit
-
def
formatted(fmtstr: String): String
-
def
forward: ((input: _782.Input)_782.Output) forSome {val _782: Layer { ... /* 2 definitions in type refinement */ }}
-
final
def
getClass(): Class[_]
-
def
hashCode(): Int
-
final
def
isInstanceOf[T0]: Boolean
-
-
final
def
notify(): Unit
-
final
def
notifyAll(): Unit
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
-
def
toLayer: Aux[Input, Aux[OutputData, OutputDelta]]
-
def
toString(): String
-
def
toTape: Aux[Data, Delta]
-
final
def
wait(): Unit
-
final
def
wait(arg0: Long, arg1: Int): Unit
-
final
def
wait(arg0: Long): Unit
-
def
→[B](y: B): (Symbolic[NativeOutput], B)
Shadowed Implicit Value Members
-
val
self: Any
-
val
self: Any
Deprecated Value Members
-
def
x: Symbolic[NativeOutput]
-
def
x: Symbolic[NativeOutput]
Inherited by implicit conversion autoToLayer from
Symbolic[NativeOutput] to Aux[Input, Aux[OutputData, OutputDelta]]
Inherited by implicit conversion ToLayerOps from
Symbolic[NativeOutput] to ToLayerOps[Symbolic[NativeOutput], Input, OutputData, OutputDelta]
Inherited by implicit conversion any2stringadd from
Symbolic[NativeOutput] to StringAdd
Inherited by implicit conversion any2ArrowAssoc from
Symbolic[NativeOutput] to ArrowAssoc[Symbolic[NativeOutput]]
Inherited by implicit conversion any2Ensuring from
Symbolic[NativeOutput] to Ensuring[Symbolic[NativeOutput]]
Provides
@Symbolic
annotation to create symbolic methods, in which you can create Layers from mathematical formulas.Symbolic
is a dependent type class that calculates a specific Layer type according toNativeOutput
. Combining with implicit-dependent-type compiler plugin, it can be treated as a type annotation in the form ofNativeOutput @Symbolic
, convertingNativeOutput
to a specific Layer type.Three usages of
@Symbolic
Implicit parameter types used for symbol methods
In case that the implicit parameter of an method is marked with
@Symbolic
, then this method is symbol method. The implicit parameter type marked with@Symbolic
is the input type of this symbol method. In this case,NativeOutput @Symbolic
will be expanded as:Identity[NativeOutput, Derivative type of NativeOutput]
For example:
In the above code, because the derivative type of
INDArray
is alsoINDArray
, the input typeINDArray @Symbolic
ofsumNetwork
, once expanded, isIdentity[INDArray, INDArray]
Used for symbol method internal variable and return value
A
NativeOutput @Symbolic
inside a symbol method, or at the return position of a symbol method, will be expanded as:For example:
In the above code, the type
INDArray @Symbolic
ofexpScores
is expanded as:The type
Double @Symbolic
ofresult
is expanded as:Used for cases excluding symbol method
(NativeInput => NativeOutput) @Symbolic
outside a symbol method, will be expanded as:For example:
In the above code, type
(INDArray => Double) @Symbolic
ofpredictor
is expanded as:Custom symbol type
The
@Symbolic
determines the mapping relation between the primitive type and derivative by checking Symbolic.ToLiteral implicit value. Therefore,@Symbolic
can be a custom symbol type once you define your own the implicit Symbolic.ToLiteral.For example, if you want to support
Short @Symbolic
, using Float as the derivative type of Short, then you can conduct the follows:Thus, type of
shortNetwork
is expanded as:Layer.Tape#Delta
Symbolic.ToLiteral
Symbolic.Layers.Identity