Skip to content

Commit

Permalink
use tidy() in prediction preprocess to GC intermediate tensor (#122)
Browse files Browse the repository at this point in the history
  • Loading branch information
syt123450 committed Nov 18, 2018
1 parent a8b27ec commit 3668f4d
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 18 deletions.
14 changes: 10 additions & 4 deletions src/predictor/KerasPredictor.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,19 @@ KerasPredictor.prototype = Object.assign( Object.create( Predictor.prototype ),

predict: function( data ) {

// Create input tensor for prediction.
let predictor = this;

let inputTensor = this.createInputTensor( data );
let predictResult = tf.tidy( () => {

// Get prediction result from loaded model.
// Create input tensor for prediction.

let predictResult = this.model.resource.predict( inputTensor );
let inputTensor = predictor.createInputTensor( data );

// Get prediction result from loaded model.

return predictor.model.resource.predict( inputTensor );

} );

return predictResult;

Expand Down
28 changes: 18 additions & 10 deletions src/predictor/TfPredictor.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,25 +52,33 @@ TfPredictor.prototype = Object.assign( Object.create( Predictor.prototype ), {

predict: function( data ) {

// Create input tensor for prediction.
let predictor = this;

let inputTensor = this.createInputTensor( data );
let predictResult = tf.tidy( () => {

let predictResult;
// Create input tensor for prediction.

if ( this.outputsName !== undefined ) {
let inputTensor = predictor.createInputTensor( data );

// If has outputsName, use execute to get prediction result.
let predictResult;

predictResult = this.model.resource.execute( inputTensor, this.outputsName );
if ( this.outputsName !== undefined ) {

} else {
// If has outputsName, use execute to get prediction result.

// If outputsName is undefined, use predict to get prediction result.
predictResult = predictor.model.resource.execute( inputTensor, this.outputsName );

predictResult = this.model.resource.predict( inputTensor );
} else {

}
// If outputsName is undefined, use predict to get prediction result.

predictResult = predictor.model.resource.predict( inputTensor );

}

return predictResult;

} );

return predictResult;

Expand Down
14 changes: 10 additions & 4 deletions src/predictor/TfjsPredictor.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,19 @@ TfjsPredictor.prototype = Object.assign( Object.create( Predictor.prototype ), {

predict: function( data ) {

// Create input tensor for prediction.
let predictor = this;

let inputTensor = this.createInputTensor( data );
let predictResult = tf.tidy( () => {

// Get prediction result from loaded model.
// Create input tensor for prediction.

let predictResult = this.model.resource.predict( inputTensor );
let inputTensor = predictor.createInputTensor( data );

// Get prediction result from loaded model.

return predictor.model.resource.predict( inputTensor );

} );

return predictResult;

Expand Down

0 comments on commit 3668f4d

Please # to comment.