-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCDerivative.m
More file actions
executable file
·56 lines (56 loc) · 1.74 KB
/
Copy pathCDerivative.m
File metadata and controls
executable file
·56 lines (56 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function [Der, DerC] = CDerivative(type, X, Y)
% Derivatives of Complex-valued activation functions.
% Der = w.r.t variable x, and DerC = w.r.t. conjugate of x
% Refer to the paper for notations and explantions.
switch type
case 'splitTanh'
DR = 1 - real(Y).^2;
DI = 1 - imag(Y).^2;
Der = 0.5*(DR + DI);
DerC = 0.5*(DR - DI);
case 'splitSigm'
DR = real(Y).*(1 - real(Y));
DI = imag(Y).*(1 - imag(Y));
Der = 0.5*(DR + DI);
DerC = 0.5*(DR - DI);
case 'linear'
Der = ones(size(X));
DerC = zeros(size(X));
case 'sech'
Der = -tanh(X).*Y;
DerC = zeros(size(X));
case 'tanh'
Der = sech(X).^2;
DerC = zeros(size(X));
case 'sinh'
Der = cosh(X);
DerC = zeros(size(X));
case 'tan'
Der = sec(X).^2;
DerC = zeros(size(X));
case 'sin'
Der = cos(X);
DerC = zeros(size(X));
case 'atan'
Der = 1./(1 + X.^2);
DerC = zeros(size(X));
case 'asin'
Der = 1./sqrt(1 - X.^2);
DerC = zeros(size(X));
case 'acos'
Der = -1./sqrt(1 - X.^2);
DerC = zeros(size(X));
case 'George'
Denom = (1 + X.*conj(X)).^2;
Der = 1./Denom;
DerC = (-X.^2)./Denom;
case 'atanh'
Der = 1./(1 - X.^2);
DerC = zeros(size(X));
case 'asinh'
Der = 1./sqrt((1 + X.^2));
DerC = zeros(size(X));
otherwise
error('Unknnown Activation Function');
end
end