| #!/usr/bin/env python | |
| # -*- coding: utf-8 -*- | |
| # | |
| # Copyright 2014 Google Inc. All Rights Reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """Simple command-line sample for the Google Prediction API | |
| Command-line application that trains on your input data. This sample does | |
| the same thing as the Hello Prediction! example. You might want to run | |
| the setup.sh script to load the sample data to Google Storage. | |
| Usage: | |
| $ python prediction.py "bucket/object" "model_id" "project_id" | |
| You can also get help on all the command-line flags the program understands | |
| by running: | |
| $ python prediction.py --help | |
| To get detailed log output run: | |
| $ python prediction.py --logging_level=DEBUG | |
| """ | |
| from __future__ import print_function | |
| __author__ = ('jcgregorio@google.com (Joe Gregorio), ' | |
| 'marccohen@google.com (Marc Cohen)') | |
| import argparse | |
| import pprint | |
| import sys | |
| import time | |
| from apiclient import sample_tools | |
| from oauth2client import client | |
| # Time to wait (in seconds) between successive checks of training status. | |
| SLEEP_TIME = 10 | |
| # Declare command-line flags. | |
| argparser = argparse.ArgumentParser(add_help=False) | |
| argparser.add_argument('object_name', | |
| help='Full Google Storage path of csv data (ex bucket/object)') | |
| argparser.add_argument('model_id', | |
| help='Model Id of your choosing to name trained model') | |
| argparser.add_argument('project_id', | |
| help='Project Id of your Google Cloud Project') | |
| def print_header(line): | |
| '''Format and print header block sized to length of line''' | |
| header_str = '=' | |
| header_line = header_str * len(line) | |
| print('\n' + header_line) | |
| print(line) | |
| print(header_line) | |
| def main(argv): | |
| # If you previously ran this app with an earlier version of the API | |
| # or if you change the list of scopes below, revoke your app's permission | |
| # here: https://accounts.google.com/IssuedAuthSubTokens | |
| # Then re-run the app to re-authorize it. | |
| service, flags = sample_tools.init( | |
| argv, 'prediction', 'v1.6', __doc__, __file__, parents=[argparser], | |
| scope=( | |
| 'https://www.googleapis.com/auth/prediction', | |
| 'https://www.googleapis.com/auth/devstorage.read_only')) | |
| try: | |
| # Get access to the Prediction API. | |
| papi = service.trainedmodels() | |
| # List models. | |
| print_header('Fetching list of first ten models') | |
| result = papi.list(maxResults=10, project=flags.project_id).execute() | |
| print('List results:') | |
| pprint.pprint(result) | |
| # Start training request on a data set. | |
| print_header('Submitting model training request') | |
| body = {'id': flags.model_id, 'storageDataLocation': flags.object_name} | |
| start = papi.insert(body=body, project=flags.project_id).execute() | |
| print('Training results:') | |
| pprint.pprint(start) | |
| # Wait for the training to complete. | |
| print_header('Waiting for training to complete') | |
| while True: | |
| status = papi.get(id=flags.model_id, project=flags.project_id).execute() | |
| state = status['trainingStatus'] | |
| print('Training state: ' + state) | |
| if state == 'DONE': | |
| break | |
| elif state == 'RUNNING': | |
| time.sleep(SLEEP_TIME) | |
| continue | |
| else: | |
| raise Exception('Training Error: ' + state) | |
| # Job has completed. | |
| print('Training completed:') | |
| pprint.pprint(status) | |
| break | |
| # Describe model. | |
| print_header('Fetching model description') | |
| result = papi.analyze(id=flags.model_id, project=flags.project_id).execute() | |
| print('Analyze results:') | |
| pprint.pprint(result) | |
| # Make some predictions using the newly trained model. | |
| print_header('Making some predictions') | |
| for sample_text in ['mucho bueno', 'bonjour, mon cher ami']: | |
| body = {'input': {'csvInstance': [sample_text]}} | |
| result = papi.predict( | |
| body=body, id=flags.model_id, project=flags.project_id).execute() | |
| print('Prediction results for "%s"...' % sample_text) | |
| pprint.pprint(result) | |
| # Delete model. | |
| print_header('Deleting model') | |
| result = papi.delete(id=flags.model_id, project=flags.project_id).execute() | |
| print('Model deleted.') | |
| except client.AccessTokenRefreshError: | |
| print ('The credentials have been revoked or expired, please re-run ' | |
| 'the application to re-authorize.') | |
| if __name__ == '__main__': | |
| main(sys.argv) |