@@ -101,26 +101,28 @@ public static void load_weights_from_hdf5_group(long f, List<ILayer> layers)
101101 if ( success )
102102 original_backend = attr . First ( ) ;
103103 }
104- List < ILayer > filtered_layers = new List < ILayer > ( ) ;
105- List < IVariableV1 > weights ;
104+
105+ var filtered_layers = new List < ILayer > ( ) ;
106106 foreach ( var layer in layers )
107107 {
108- weights = _legacy_weights ( layer ) ;
108+ var weights = _legacy_weights ( layer ) ;
109109 if ( weights . Count > 0 )
110- {
111110 filtered_layers . append ( layer ) ;
112- }
113111 }
112+
114113 string [ ] layer_names = load_attributes_from_hdf5_group ( f , "layer_names" ) ;
115114 var filtered_layer_names = new List < string > ( ) ;
116115 foreach ( var name in layer_names )
117116 {
117+ if ( ! filtered_layers . Select ( x => x . Name ) . Contains ( name ) )
118+ continue ;
118119 long g = H5G . open ( f , name ) ;
119120 var weight_names = load_attributes_from_hdf5_group ( g , "weight_names" ) ;
120121 if ( weight_names . Count ( ) > 0 )
121122 filtered_layer_names . Add ( name ) ;
122123 H5G . close ( g ) ;
123124 }
125+
124126 layer_names = filtered_layer_names . ToArray ( ) ;
125127 if ( layer_names . Length != filtered_layers . Count ( ) )
126128 throw new ValueError ( "You are trying to load a weight file " +
@@ -133,7 +135,6 @@ public static void load_weights_from_hdf5_group(long f, List<ILayer> layers)
133135 var weight_values = new List < NDArray > ( ) ;
134136 long g = H5G . open ( f , name ) ;
135137 var weight_names = load_attributes_from_hdf5_group ( g , "weight_names" ) ;
136- var get_Name = "" ;
137138 foreach ( var i_ in weight_names )
138139 {
139140 ( bool success , Array result ) = Hdf5 . ReadDataset < float > ( g , i_ ) ;
@@ -153,6 +154,7 @@ public static void load_weights_from_hdf5_group(long f, List<ILayer> layers)
153154 $ "{ weight_values . Count ( ) } elements.") ;
154155 weight_value_tuples . AddRange ( zip ( symbolic_weights , weight_values ) ) ;
155156 }
157+
156158 keras . backend . batch_set_value ( weight_value_tuples ) ;
157159 }
158160 public static void toarrayf4 ( long filepath = - 1 , Dictionary < string , object > custom_objects = null , bool compile = false )
@@ -175,43 +177,37 @@ public static void save_weights_to_hdf5_group(long f, List<ILayer> layers)
175177 Hdf5 . WriteAttribute ( f , "keras_version" , "2.5.0" ) ;
176178
177179 long g = 0 , crDataGroup = 0 ;
178- List < IVariableV1 > weights = new List < IVariableV1 > ( ) ;
179- //List<IVariableV1> weight_values = new List<IVariableV1>();
180- List < string > weight_names = new List < string > ( ) ;
181- foreach ( var layer in layers ) {
182- weight_names = new List < string > ( ) ;
183- g = Hdf5 . CreateOrOpenGroup ( f , Hdf5Utils . NormalizedName ( layer . Name ) ) ;
184- weights = _legacy_weights ( layer ) ;
185- //weight_values= keras.backend.batch_get_value(weights);
180+ foreach ( var layer in layers )
181+ {
182+ var weights = _legacy_weights ( layer ) ;
183+ if ( weights . Count == 0 )
184+ continue ;
185+
186+ var weight_names = new List < string > ( ) ;
187+ // weight_values= keras.backend.batch_get_value(weights);
186188 foreach ( var weight in weights )
187- {
188189 weight_names . Add ( weight . Name ) ;
189- }
190+
191+ g = Hdf5 . CreateOrOpenGroup ( f , Hdf5Utils . NormalizedName ( layer . Name ) ) ;
190192 save_attributes_to_hdf5_group ( g , "weight_names" , weight_names . ToArray ( ) ) ;
191- Tensor tensor = null ;
192- foreach ( var ( name , val ) in zip ( weight_names , weights ) ) {
193-
194- tensor = val . AsTensor ( ) ;
193+ foreach ( var ( name , val ) in zip ( weight_names , weights ) )
194+ {
195+ var tensor = val . AsTensor ( ) ;
195196 if ( name . IndexOf ( "/" ) > 1 )
196197 {
197198 crDataGroup = Hdf5 . CreateOrOpenGroup ( g , Hdf5Utils . NormalizedName ( name . Split ( '/' ) [ 0 ] ) ) ;
198199 WriteDataset ( crDataGroup , name . Split ( '/' ) [ 1 ] , tensor ) ;
199200 Hdf5 . CloseGroup ( crDataGroup ) ;
200201 }
201- else {
202+ else
203+ {
202204 WriteDataset ( crDataGroup , name , tensor ) ;
203205 }
204-
205- tensor = null ;
206- }
206+ }
207207 Hdf5 . CloseGroup ( g ) ;
208- weight_names = null ;
209208 }
210- weights = null ;
211- // weight_values = null;
212-
213-
214209 }
210+
215211 private static void save_attributes_to_hdf5_group ( long f , string name , Array data )
216212 {
217213 int num_chunks = 1 ;
0 commit comments