...
Let's take the simple ndarray activation function as an example to see what the ideal state would look like:
(s/def ::ndarray ...#(instance? NDArray %))
(s/def ::act-type #{"relu" "sigmoid" ...})
(s/fdef ::activation ...)
(defn activation
...
([data weight bias kernel num-filter
{:keys [stride dilate pad num-group workspace
no-bias cudnn-tune cudnn-off layout out]
:as opts}]
...
We should also encourage the usage of Clojure data structures as function arguments:
Scala | Clojure |
---|---|
Int | Float | Double | Boolean | String | int | float | double | bool | string |
Array[Int] | Array[...] | Array[NDArray] | vec-of-ints | vec-of-... | vec-of-ndarrays |
scala.collection.immutable.Map | map (i.e. {...}) |
org.apache.mxnet.Shape | vec-of-ints (e.g. [2 3]) |
|
|
Potential Approach(es)
We can potentially use the Scala package's GeneratorBase to create the functions described above. The current challenge is that the generator cannot be called directly from within Clojure and hence we have to rely on reflection instead.
...