4
4
removeall , unique , product , mode , argmax , argmax_random_tie , isclose , gaussian ,
5
5
dotproduct , vector_add , scalar_vector_product , weighted_sample_with_replacement ,
6
6
weighted_sampler , num_or_str , normalize , clip , sigmoid , print_table ,
7
- open_data , sigmoid_derivative , probability , norm , matrix_multiplication , relu , relu_derivative
7
+ open_data , sigmoid_derivative , probability , norm , matrix_multiplication , relu , relu_derivative ,
8
+ tanh , tanh_derivative , leaky_relu , leaky_relu_derivative , elu , elu_derivative
8
9
)
9
10
10
11
import copy
@@ -746,8 +747,15 @@ def BackPropagationLearner(dataset, net, learning_rate, epochs, activation=sigmo
746
747
# The activation function used is relu or sigmoid function
747
748
if node .activation == sigmoid :
748
749
delta [- 1 ] = [sigmoid_derivative (o_nodes [i ].value ) * err [i ] for i in range (o_units )]
749
- else :
750
+ elif node . activation == relu :
750
751
delta [- 1 ] = [relu_derivative (o_nodes [i ].value ) * err [i ] for i in range (o_units )]
752
+ elif node .activation == tanh :
753
+ delta [- 1 ] = [tanh_derivative (o_nodes [i ].value ) * err [i ] for i in range (o_units )]
754
+ elif node .activation == elu :
755
+ delta [- 1 ] = [elu_derivative (o_nodes [i ].value ) * err [i ] for i in range (o_units )]
756
+ else :
757
+ delta [- 1 ] = [leaky_relu_derivative (o_nodes [i ].value ) * err [i ] for i in range (o_units )]
758
+
751
759
752
760
# Backward pass
753
761
h_layers = n_layers - 2
@@ -762,9 +770,18 @@ def BackPropagationLearner(dataset, net, learning_rate, epochs, activation=sigmo
762
770
if activation == sigmoid :
763
771
delta [i ] = [sigmoid_derivative (layer [j ].value ) * dotproduct (w [j ], delta [i + 1 ])
764
772
for j in range (h_units )]
765
- else :
773
+ elif activation == relu :
766
774
delta [i ] = [relu_derivative (layer [j ].value ) * dotproduct (w [j ], delta [i + 1 ])
767
775
for j in range (h_units )]
776
+ elif activation == tanh :
777
+ delta [i ] = [tanh_derivative (layer [j ].value ) * dotproduct (w [j ], delta [i + 1 ])
778
+ for j in range (h_units )]
779
+ elif activation == elu :
780
+ delta [i ] = [elu_derivative (layer [j ].value ) * dotproduct (w [j ], delta [i + 1 ])
781
+ for j in range (h_units )]
782
+ else :
783
+ delta [i ] = [leaky_relu_derivative (layer [j ].value ) * dotproduct (w [j ], delta [i + 1 ])
784
+ for j in range (h_units )]
768
785
769
786
# Update weights
770
787
for i in range (1 , n_layers ):
0 commit comments