Hello! Is it possible to set user defined activation function for a layer in neural network?
If this feature is not yet part of WL, are there any plans for such an addition as it would be very helpful.
Hello! Is it possible to set user defined activation function for a layer in neural network?
If this feature is not yet part of WL, are there any plans for such an addition as it would be very helpful.
ElementwiseLayer[f] allows you to define a layer with a custom activation function f applied to each element of the input:
@narendra : out of curiosity, is there are particular activation you are trying to implement yourself?
@Sebastian Bodenstein Yes, I am currently writing a paper on activation functions based on fractional calculus. I am currently implementing it in python, however Wolfram would be much better fit for it due to it having inbuilt functions from fractional calculus from which I derive my specific function.
However when I try to use it with ElementwiseLayer, it gives an error of ElementwiseLayer::invscf: my_func could not be symbolically evaluated as a unary scalar function.
(Interestingly, it is a unary scalar function because it can be plotted using only one variable and gives out scalar values when individually applied over scalar values)
@narendra it is always helpful to post a complete code resulting in the error: http://wolfr.am/READ-1ST
@Sébastien Guillet While I can not disclose the exact details as I am currently not finished writing the paper yet, ElementWiseLayer does not do well with many functions beyond the normal commonly used ones.
Example: The recently popular Swish Activation Function which performs better than ReLU in most cases. It is defined as x*sigmoid(x)
elem = ElementwiseLayer[x*LogisticSigmoid[x]]
gives an error
ElementwiseLayer::invscf: x LogisticSigmoid[x] could not be
symbolically evaluated as a unary scalar function.
This is the same error I am receiving whenever the complexity of function is a little more than exponential or tanh.
True! @narendra I recommend reading tutorial on Pure Functions:
Here’s an example how to implement somewhat more complex like differential equations: ODEs, SDEs, etc. into ElementwiseLayer[…]:
DiffEq in Neural Net
(Open picture into new tab to see it in full size!)
Depending on the result representation with or without Normal[…] to get the value(s).