From 0682aef0256d30e47df33e3f6228b6d1f98095c3 Mon Sep 17 00:00:00 2001 From: dskkato Date: Fri, 30 Jul 2021 15:38:38 +0900 Subject: [PATCH] Update regression_savedmodel example for tf2.5 --- examples/regression_savedmodel.rs | 37 ++++++--- .../regression_savedmodel/assets/.gitkeep | 0 .../regression_savedmodel.py | 76 +++++++++--------- examples/regression_savedmodel/saved_model.pb | Bin 18767 -> 50134 bytes .../variables/variables.data-00000-of-00001 | Bin 8 -> 565 bytes .../variables/variables.index | Bin 142 -> 454 bytes 6 files changed, 65 insertions(+), 48 deletions(-) create mode 100644 examples/regression_savedmodel/assets/.gitkeep diff --git a/examples/regression_savedmodel.rs b/examples/regression_savedmodel.rs index 2e39ce789e..aed22b8b8c 100644 --- a/examples/regression_savedmodel.rs +++ b/examples/regression_savedmodel.rs @@ -46,18 +46,31 @@ fn main() -> Result<(), Box> { // Load the saved model exported by regression_savedmodel.py. let mut graph = Graph::new(); - let session = SavedModelBundle::load( - &SessionOptions::new(), - &["train", "serve"], - &mut graph, - export_dir, - )? - .session; - let op_x = graph.operation_by_name_required("x")?; - let op_y = graph.operation_by_name_required("y")?; - let op_train = graph.operation_by_name_required("train")?; - let op_w = graph.operation_by_name_required("w")?; - let op_b = graph.operation_by_name_required("b")?; + let bundle = + SavedModelBundle::load(&SessionOptions::new(), &["serve"], &mut graph, export_dir)?; + let session = &bundle.session; + + // train + let train_signature = bundle.meta_graph_def().get_signature("train")?; + let x_info = train_signature.get_input("x")?; + let y_info = train_signature.get_input("y")?; + let loss_info = train_signature.get_output("loss")?; + let op_x = graph.operation_by_name_required(&x_info.name().name)?; + let op_y = graph.operation_by_name_required(&y_info.name().name)?; + let op_train = graph.operation_by_name_required(&loss_info.name().name)?; + + // internal parameters + let op_b = { + let b_signature = bundle.meta_graph_def().get_signature("b")?; + let b_info = b_signature.get_output("output")?; + graph.operation_by_name_required(&b_info.name().name)? + }; + + let op_w = { + let w_signature = bundle.meta_graph_def().get_signature("w")?; + let w_info = w_signature.get_output("output")?; + graph.operation_by_name_required(&w_info.name().name)? + }; // Train the model (e.g. for fine tuning). let mut train_step = SessionRunArgs::new(); diff --git a/examples/regression_savedmodel/assets/.gitkeep b/examples/regression_savedmodel/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/regression_savedmodel/regression_savedmodel.py b/examples/regression_savedmodel/regression_savedmodel.py index 60a1966a21..d7e24147d8 100644 --- a/examples/regression_savedmodel/regression_savedmodel.py +++ b/examples/regression_savedmodel/regression_savedmodel.py @@ -1,43 +1,47 @@ import tensorflow as tf -from tensorflow.python.saved_model.builder import SavedModelBuilder -from tensorflow.python.saved_model.signature_def_utils import build_signature_def -from tensorflow.python.saved_model.signature_constants import REGRESS_METHOD_NAME -from tensorflow.python.saved_model.tag_constants import TRAINING, SERVING -from tensorflow.python.saved_model.utils import build_tensor_info -x = tf.placeholder(tf.float32, name='x') -y = tf.placeholder(tf.float32, name='y') -w = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='w') -b = tf.Variable(tf.zeros([1]), name='b') -y_hat = tf.add(w * x, b, name="y_hat") +class LinearRegresstion(tf.Module): + def __init__(self, name=None): + super(LinearRegresstion, self).__init__(name=name) + self.w = tf.Variable(tf.random.uniform([1], -1.0, 1.0), name='w') + self.b = tf.Variable(tf.zeros([1]), name='b') + self.optimizer = tf.keras.optimizers.SGD(0.5) -loss = tf.reduce_mean(tf.square(y_hat - y)) -optimizer = tf.train.GradientDescentOptimizer(0.5) -train = optimizer.minimize(loss, name='train') + @tf.function + def __call__(self, x): + y_hat = self.w * x + self.b + return y_hat -init = tf.variables_initializer(tf.global_variables(), name='init') + @tf.function + def get_w(self): + return {'output': self.w} + + @tf.function + def get_b(self): + return {'output': self.b} + + @tf.function + def train(self, x, y): + with tf.GradientTape() as tape: + y_hat = self(x) + loss = tf.reduce_mean(tf.square(y_hat - y)) + grads = tape.gradient(loss, self.trainable_variables) + _ = self.optimizer.apply_gradients(zip(grads, self.trainable_variables)) + return {'loss': loss} + + +model = LinearRegresstion() + +# Get concrete functions to generate signatures +x = tf.TensorSpec([None], tf.float32, name='x') +y = tf.TensorSpec([None], tf.float32, name='y') + +train = model.train.get_concrete_function(x, y) +w = model.get_w.get_concrete_function() +b = model.get_b.get_concrete_function() + +signatures = {'train': train, 'w': w, 'b': b} directory = 'examples/regression_savedmodel' -builder = SavedModelBuilder(directory) - -with tf.Session(graph=tf.get_default_graph()) as sess: - sess.run(init) - - signature_inputs = { - "x": build_tensor_info(x), - "y": build_tensor_info(y) - } - signature_outputs = { - "out": build_tensor_info(y_hat) - } - signature_def = build_signature_def( - signature_inputs, signature_outputs, - REGRESS_METHOD_NAME) - builder.add_meta_graph_and_variables( - sess, [TRAINING, SERVING], - signature_def_map={ - REGRESS_METHOD_NAME: signature_def - }, - assets_collection=tf.get_collection(tf.GraphKeys.ASSET_FILEPATHS)) - builder.save(as_text=False) +tf.saved_model.save(model, directory, signatures=signatures) \ No newline at end of file diff --git a/examples/regression_savedmodel/saved_model.pb b/examples/regression_savedmodel/saved_model.pb index 980fdc519815d191a9716f9486477439e6fd570a..4ad70d4bfa33d23f11db778d9cb29f2b8d8e4470 100644 GIT binary patch literal 50134 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%0DtlOvJ)D<4T%gGt3{dZ= z%tar3^PW={oTdNl9OgO4Fa?)CYtPHOIb2Jb6K!DUT(|t4bKLTG&K^zfm^Y&vx>t&v zZS0%+uwPdDiJaX4=$~^Uc_yu?N@}XongvPCg0$wmq~^S|=7OZ=!acdEFq=&OLvn1G zJ_loMyuGufiJMa~37tI2g;u~jZVm<&&YzEEkH7?Lt)guyYtv z8@~<{1BuxgyeD%*uj{R9S=&NfYmK#+^m2z_7P~RLo4PoHee+4deLuqBd9VhTAe~N< z1XE97vx6kbH4re4*9DKb4xtEGnxri~LUtU)7|hP*uz?X1E*$KrG3I?Z=InkLv4@CM z+BDxF#W5W1z{$9pW_ceu5EI35cDoWj%dlq#IERV{&4=Ucp&PIR#YwY}XLhzggdZp> z-jExdO6)5Nd`|gJ{4)v+J-t<{p%vmkxkl33UWg zs2$>kct0<}yK?a7t!=`7j6%Aiua~xJoi_hH4sdI`QLpXt>hU+?0|Z5^@yJz?z)-1P zZy?=P@m_ioe=9yPrsS|m_^zU24pv;hA{QQ~1WlcvCzw(Dbp-xX9^fZT;D_FbBNH%y zzfa)aMz|O6XSn}LQNQoOx51ZKR+v2nzKHn7i(6d8a@fT8{x{;p!Z#-t_GkB<#{AzX z%YPjyVI~r@vYY*!0xH4@HCclOv%v;&v(S5k zc!^#&^24mNb&^zKsdSQF+KWGJfc(T;@ejfbLr5TEuyoffMgBmB(q>5H&ws8=D_Qzh z9OLuN{mjU#G2Dyst<3;lkNUB$K&g3hr$dg=_#$ikjwa|6?im+cwPK<0i9JNz!d@Ix RLkCfmQQ*g!K_?-I`+p`~F6;mR literal 18767 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�$wBn0W(plQ z(Q%~PBu!3ol3649*d(wa?_eg1#)b6J7xXPI(ImOHW|p2z!kZe<;uN1qj@aXr4xI`* z#-u0zhC#T@90`vm$&eL(C&^Bn0;zJ7pYOqGMhaGBd`S6|a`gi^7eoAsc{}a`&P8$C z;gGhfPm(4Zav1$_U7ShmT;f0%9o?k=@UW8@>K1VTt(FI+`21Lt#K=#HsaCRTI%KxY zF!}>{){9#$CkJZ^WuR>#Do<=4#kv9x5{b2`$C_W$@PXqtHpA<2#HOI@qGTG zb#>~MGq&$GEJ}in#g5QFNi)_rTzFK}eXmjWYbmQa2RoMl?3k5t3vsb0# z&)8NWMcXJ%-+mJo*r+pP_v@<*7NLJx1FzuFGGq_L75sB0^p6tZA73c4r7dxtq(J^Z DdT4-L diff --git a/examples/regression_savedmodel/variables/variables.data-00000-of-00001 b/examples/regression_savedmodel/variables/variables.data-00000-of-00001 index 294ceed15cc62f9a258c3d8a4d1b542e752c477b..69088c8ec5f11aff35136124887afa5a1f09e3c0 100644 GIT binary patch literal 565 zcmYc=4zy#y1oj}I$t)$z3eUK7xmYsnt7as?U z5La<#dR}5lX;Er1m$8r`7hjlTkf)=Qk86CGqfe+SP_vXwxxSubNJx;UQ)q~5us*5+ z?3$9KWRmb{GUMXlU=?D?ECITLlY>o&H6=AUv64%WgI$O>CpEDsFEcMaz9_LIm5Yai zLx>|cKQ}e6q%@a{fy-UU6~m1j!R{{lAhV=2;hqEY@j1a$$Q{EVPLM%hr$}ibOacqw sGb&Oj9K$Ft;|8fa>Iu=glkuYQkd~C(vaa8XTsY%rn@zG0<=y69HPoW}z<6rOca~pPQOjQkqLhiv-M1GW_NE)q=wSs5KS&5a2>;#Cty1cK8vq>#XUG5m literal 142 zcmZQzVB=tvV&Y(AVB}BYU=(5z0