@@ -19,7 +19,6 @@ limitations under the License.
1919using System . Linq ;
2020using System . Reflection ;
2121using Tensorflow . Gradients ;
22- using static Tensorflow . Binding ;
2322
2423namespace Tensorflow
2524{
@@ -49,14 +48,48 @@ public static void RegisterFromAssembly()
4948 RegisterGradientFunction ( m . GetCustomAttribute < RegisterGradient > ( ) . Name ,
5049 ( oper , out_grads ) =>
5150 {
52- tf . Logger . Debug ( $ "Caculate Gradient: { oper . name } { m . Name } ") ;
53- var results = g . InvokeMember ( m . Name ,
54- BindingFlags . InvokeMethod ,
55- null ,
56- null ,
57- args : new object [ ] { oper , out_grads } ) as Tensor [ ] ;
58- foreach ( var result in results . Where ( x => x != null ) )
59- tf . Logger . Debug ( $ "Gradient: { result . name } { result . shape } ") ;
51+ // tf.Logger.Debug($"Caculate Gradient: {oper.name} {m.Name}");
52+
53+ var results = m . Name switch
54+ {
55+ "_AddGrad" => math_grad . _AddGrad ( oper , out_grads ) ,
56+ "_AddV2Grad" => math_grad . _AddV2Grad ( oper , out_grads ) ,
57+ "_BiasAddGrad" => nn_grad . _BiasAddGrad ( oper , out_grads ) ,
58+ "_CastGrad" => math_grad . _CastGrad ( oper , out_grads ) ,
59+ "_ConcatGradV2" => array_grad . _ConcatGradV2 ( oper , out_grads ) ,
60+ "_Conv2DGrad" => nn_grad . _Conv2DGrad ( oper , out_grads ) ,
61+ "_ExpandDimsGrad" => array_grad . _ExpandDimsGrad ( oper , out_grads ) ,
62+ "_ExpGrad" => math_grad . _ExpGrad ( oper , out_grads ) ,
63+ "_FusedBatchNormV3Grad" => nn_grad . _FusedBatchNormV3Grad ( oper , out_grads ) ,
64+ "_IdGrad" => math_grad . _IdGrad ( oper , out_grads ) ,
65+ "_LeakyReluGrad" => nn_grad . _LeakyReluGrad ( oper , out_grads ) ,
66+ "_Log1pGrad" => math_grad . _Log1pGrad ( oper , out_grads ) ,
67+ "_MaximumGrad" => math_grad . _MaximumGrad ( oper , out_grads ) ,
68+ "_MeanGrad" => math_grad . _MeanGrad ( oper , out_grads ) ,
69+ "_MinimumGrad" => math_grad . _MinimumGrad ( oper , out_grads ) ,
70+ "_MulGrad" => math_grad . _MulGrad ( oper , out_grads ) ,
71+ "_NegGrad" => math_grad . _NegGrad ( oper , out_grads ) ,
72+ "_PadGrad" => array_grad . _PadGrad ( oper , out_grads ) ,
73+ "_PowGrad" => math_grad . _PowGrad ( oper , out_grads ) ,
74+ "_RealDivGrad" => math_grad . _RealDivGrad ( oper , out_grads ) ,
75+ "_ReadGrad" => resource_variable_grad . _ReadGrad ( oper , out_grads ) ,
76+ "_ReshapeGrad" => array_grad . _ReshapeGrad ( oper , out_grads ) ,
77+ "_ResizeNearestNeighborGrad" => image_grad . _ResizeNearestNeighborGrad ( oper , out_grads ) ,
78+ "_SelectGrad" => math_grad . _SelectGrad ( oper , out_grads ) ,
79+ "_SigmoidGrad" => math_grad . _SigmoidGrad ( oper , out_grads ) ,
80+ "_SumGrad" => math_grad . _SumGrad ( oper , out_grads ) ,
81+ "_SubGrad" => math_grad . _SubGrad ( oper , out_grads ) ,
82+ "_StridedSliceGrad" => array_grad . _StridedSliceGrad ( oper , out_grads ) ,
83+ _ => g . InvokeMember ( m . Name ,
84+ BindingFlags . InvokeMethod ,
85+ null ,
86+ null ,
87+ args : new object [ ] { oper , out_grads } ) as Tensor [ ]
88+ } ;
89+
90+ // foreach (var result in results.Where(x => x != null))
91+ // tf.Logger.Debug($"Gradient: {result.name} {result.shape}");
92+
6093 return results ;
6194 }
6295 ) ;
0 commit comments