@@ -47,14 +47,14 @@ def train_program():
47
47
loss = fluid .layers .square_error_cost (input = y_predict , label = y )
48
48
avg_loss = fluid .layers .mean (loss )
49
49
50
- return avg_loss
50
+ return [ avg_loss , y_predict ]
51
51
52
52
53
53
def optimizer_func ():
54
54
return fluid .optimizer .SGD (learning_rate = 0.001 )
55
55
56
56
57
- def train (use_cuda , train_program , params_dirname ):
57
+ def train (use_cuda , train_program , params_dirname , inference_model_dirname ):
58
58
place = fluid .CUDAPlace (0 ) if use_cuda else fluid .CPUPlace ()
59
59
60
60
trainer = fluid .Trainer (
@@ -74,6 +74,8 @@ def event_handler(event):
74
74
'''
75
75
if params_dirname is not None :
76
76
trainer .save_params (params_dirname )
77
+ trainer .save_inference_model (inference_model_dirname ,
78
+ ['x' ], [1 ])
77
79
trainer .stop ()
78
80
79
81
trainer .train (
@@ -99,15 +101,55 @@ def infer(use_cuda, inference_program, params_dirname=None):
99
101
print ("infer results: " , results [0 ])
100
102
101
103
104
+ def infer_by_saved_model (use_cuda , save_dirname = None ):
105
+ if save_dirname is None :
106
+ return
107
+
108
+ place = fluid .CUDAPlace (0 ) if use_cuda else fluid .CPUPlace ()
109
+ exe = fluid .Executor (place )
110
+
111
+ inference_scope = fluid .core .Scope ()
112
+ with fluid .scope_guard (inference_scope ):
113
+ # Use fluid.io.load_inference_model to obtain the inference program desc,
114
+ # the feed_target_names (the names of variables that will be feeded
115
+ # data using feed operators), and the fetch_targets (variables that
116
+ # we want to obtain data from using fetch operators).
117
+ [inference_program , feed_target_names ,
118
+ fetch_targets ] = fluid .io .load_inference_model (save_dirname , exe )
119
+
120
+ # The input's dimension should be 2-D and the second dim is 13
121
+ # The input data should be >= 0
122
+ batch_size = 10
123
+
124
+ test_reader = paddle .batch (
125
+ paddle .dataset .uci_housing .test (), batch_size = batch_size )
126
+
127
+ test_data = next (test_reader ())
128
+ test_feat = numpy .array (
129
+ [data [0 ] for data in test_data ]).astype ("float32" )
130
+ test_label = numpy .array (
131
+ [data [1 ] for data in test_data ]).astype ("float32" )
132
+
133
+ assert feed_target_names [0 ] == 'x'
134
+ results = exe .run (inference_program ,
135
+ feed = {feed_target_names [0 ]: numpy .array (test_feat )},
136
+ fetch_list = fetch_targets )
137
+ print ("infer shape: " , results [0 ].shape )
138
+ print ("infer results: " , results [0 ])
139
+ print ("ground truth: " , test_label )
140
+
141
+
102
142
def main (use_cuda ):
103
143
if use_cuda and not fluid .core .is_compiled_with_cuda ():
104
144
return
105
145
106
146
# Directory for saving the trained model
107
- params_dirname = "fit_a_line.inference.model"
147
+ params_dirname = "fit_a_line.model"
148
+ inference_model_dirname = "fit_a_line.inference_model"
108
149
109
- train (use_cuda , train_program , params_dirname )
150
+ train (use_cuda , train_program , params_dirname , inference_model_dirname )
110
151
infer (use_cuda , inference_program , params_dirname )
152
+ infer_by_saved_model (use_cuda , inference_model_dirname )
111
153
112
154
113
155
class TestFitALine (unittest .TestCase ):
0 commit comments