Exemple #1
0
def load_model():
    print("**************Please wait....Loading weights*********************")
    global ludwig_model
    model_definition = get_model_definition()

    ludwig_model = LudwigModel(model_definition)

    train_model()

    ludwig_model.load(MODEL_PATH)
    print("weights loaded")
Exemple #2
0
    def predict(self, mode='predict', ignore_columns=[]):
        predict_dataframe, model_definition = self._create_ludwig_dataframe(
            mode)
        model_definition = self.transaction.hmd['ludwig_data'][
            'model_definition']

        model = LudwigModel.load(
            self.transaction.lmd['ludwig_data']['ludwig_save_path'])

        if self.transaction.lmd['model_order_by'] is None:
            timeseries_cols = []
        else:
            timeseries_cols = list(
                map(lambda x: x[0], self.transaction.lmd['model_order_by']))

        if len(timeseries_cols) > 0:
            predict_dataframe, model_definition = self._translate_df_to_timeseries_format(
                predict_dataframe, model_definition, timeseries_cols)

        for ignore_col in ignore_columns:
            try:
                predict_dataframe[ignore_col] = [None] * len(
                    predict_dataframe[ignore_col])
            except:
                for date_appendage in ['_year', '_month', '_day']:
                    predict_dataframe[ignore_col + date_appendage] = [
                        None
                    ] * len(predict_dataframe[ignore_col + date_appendage])

        with disable_ludwig_output():
            model = LudwigModel.load(
                self.transaction.lmd['ludwig_data']['ludwig_save_path'])
            predictions = model.predict(data_df=predict_dataframe)

        for col_name in predictions:
            col_name_normalized = col_name.replace('_predictions', '')
            predictions = predictions.rename(
                columns={col_name: col_name_normalized})

        return predictions
Exemple #3
0
def initialize(config):
    pth_mdl = os.path.join( config['pth_mdls'], config['model_to_load'], "model")
    if not os.path.isdir(pth_mdl):
        raise Exception("Could not find the model specified in the models directory: {}".format(pth_mdl))


    global MODL, MMTA, FEAS_IN, FEAS_OUT
    # load a model
    st = time.time()
    print("...loading model from {}".format(pth_mdl))
    MODL = LudwigModel.load(pth_mdl)
    with open(os.path.join(pth_mdl,"train_set_metadata.json")) as f: MMTA = json.load(f)
    print("...loaded model in {:.2f}s".format(time.time()-st))

    FEAS_IN = [fea for fea in MODL.model.hyperparameters['input_features']]
    FEAS_OUT = [fea for fea in MODL.model.hyperparameters['output_features']]
    input_features_desc, output_features_desc = "",""
    for fea in FEAS_IN:
        if fea['type'] == "image":
            input_features_desc += "\t{}\t({}: {})\n".format(fea['name'],fea['type'],"({}, {}) {}".format(fea['width'],fea['height'],chan_count_to_mode(fea['num_channels'])))
        else: input_features_desc += "\t{}\t({})\n".format(fea['name'],fea['type'])
    for fea in FEAS_OUT:
        if fea['type'] == "category":
            fea['meta'] = MMTA[fea['name']]
            output_features_desc += "\t{}\t(category with {} classes)\n".format(fea['name'],fea['num_classes'])
            output_features_desc += "\t\t\t{}\n".format(", ".join(fea['meta']['idx2str']))
        else:
            output_features_desc += "\t{}\t({})\n".format(fea['name'],fea['type'])

    #print(output_features)
    console_msg = """#################### FRESH EYES ####################
I've just loaded a saved model from {0}
To check that the server is working, go to http://localhost:{1}/
It looks like the model I loaded requires the following inputs to make a prediction:
{2}
Make note of these names, as these particular fields will be required by API calls.
It looks like the following values will result from a prediction.
{3}
Make note of these as well, as these fields will be returned to API calls.
Invoke Cntl+C to stop the server
#################### FRESH EYES ####################
"""
    print(console_msg.format(pth_mdl,config['port_num'],input_features_desc, output_features_desc))
Exemple #4
0
from flask import Flask, request, jsonify  # loading in Flask
from ludwig import LudwigModel  # loading in Ludwig
import pandas as pd  # loading pandas for reading csv

# creating a Flask application
app = Flask(__name__)

# Load the model
model = LudwigModel.load('model')


# creating predict url and only allowing post requests.
@app.route('/predict', methods=['POST'])
def predict():
    # Get data from Post request
    data = request.get_json()
    # Make prediction
    df = pd.DataFrame([str(data['text'])], columns=['content'])
    print(df.head())
    # making predictions
    pred = model.predict(data_df=df)
    print(pred)
    # returning the predictions as json
    return jsonify(pred['airline_sentiment_predictions'][0])


if __name__ == '__main__':
    app.run(port=3000, debug=True)
Exemple #5
0
    def train(self):
        training_dataframe, model_definition = self._create_ludwig_dataframe(
            'train')
        if self.transaction.lmd['model_order_by'] is None:
            timeseries_cols = []
        else:
            timeseries_cols = list(
                map(lambda x: x[0], self.transaction.lmd['model_order_by']))

        if len(timeseries_cols) > 0:
            training_dataframe, model_definition = self._translate_df_to_timeseries_format(
                training_dataframe, model_definition, timeseries_cols, 'train')

        with disable_ludwig_output():

            model = LudwigModel(model_definition)

            # <---- Ludwig currently broken, since mode can't be initialized without train_set_metadata and train_set_metadata can't be obtained without running train... see this issue for any updates on the matter: https://github.com/uber/ludwig/issues/295
            #model.initialize_model(train_set_metadata={})
            #train_stats = model.train_online(data_df=training_dataframe) # ??Where to add model_name?? ----> model_name=self.transaction.lmd['name']

            if self.transaction.lmd['rebuild_model'] is True:
                train_stats = model.train(
                    data_df=training_dataframe,
                    model_name=self.transaction.lmd['name'],
                    skip_save_model=True)
            else:
                model = LudwigModel.load(
                    self.transaction.lmd['ludwig_data']['ludwig_save_path'])
                train_stats = model.train(
                    data_df=training_dataframe,
                    model_name=self.transaction.lmd['name'],
                    skip_save_model=True)
                #,model_load_path=self.transaction.lmd['ludwig_data']['ludwig_save_path'])

            for k in train_stats['train']:
                if k not in self.transaction.lmd['model_accuracy']['train']:
                    self.transaction.lmd['model_accuracy']['train'][k] = []
                    self.transaction.lmd['model_accuracy']['test'][k] = []
                elif k is not 'combined':
                    # We should be adding the accuracy here but we only have it for combined, so, for now use that, will only affect multi-output scenarios anyway
                    pass
                else:
                    self.transaction.lmd['model_accuracy']['train'][k].extend(
                        train_stats['train'][k]['accuracy'])
                    self.transaction.lmd['model_accuracy']['test'][k].extend(
                        train_stats['test'][k]['accuracy'])
                '''
                @ TRAIN ONLINE BIT That's not working
                model = LudwigModel.load(self.transaction.lmd['ludwig_data']['ludwig_save_path'])
                for i in range(0,100):
                    train_stats = model.train_online(data_df=training_dataframe)
                    # The resulting train_stats are "None"... wonderful -_-
                '''

        ludwig_model_savepath = Config.LOCALSTORE_PATH.rstrip(
            'local_jsondb_store') + self.transaction.lmd['name']

        model.save(ludwig_model_savepath)
        model.close()

        self.transaction.lmd['ludwig_data'] = {
            'ludwig_save_path': ludwig_model_savepath
        }
        self.transaction.hmd['ludwig_data'] = {
            'model_definition': model_definition
        }
Exemple #6
0
from flask import Flask, request, jsonify
from ludwig import LudwigModel
import pandas as pd

app = Flask(__name__)

#load the model
model = LudwigModel.load('./model')


@app.rout('/predict', method=['POST'])
def predict():
    #get POST request data
    data = request.get_json()
    #Make prediction
    df = pd.DataFrame([str(data['text'])], columns=['content'])
    print(df.head())
    pred = model.predict(data_df=df)
    print(pred)
    return jsonify(pred['airline_sentiment_predictions'][0])


if __name__ == '__main__':
    app.run(port=4000, debug=True)
test_features = transform(test_df)

add_missing_dummy_columns(test_features, model_columns)
test_features = test_features[model_columns]

test_prediction = pd.DataFrame(model.predict(test_features),
                               columns=['prediction'])
submission = Ids.merge(test_prediction,
                       how='left',
                       left_index=True,
                       right_index=True)
submission.to_csv('submission.csv')

# Try with ludwig
# train a model
#load a model
model = LudwigModel.load(
    "/Users/geoffrey.kip/Projects/ludwig/ludwig_models/results/experiment_run_1/model"
)

# obtain predictions
ludwig_predictions = model.predict(test_df)

#evaluate predictions
preds = np.where(predictions_probs[:, 1] >= 0.5, 1, 0)
print(accuracy_score(Y_test, preds))
print(confusion_matrix(Y_test, preds))
print(classification_report(Y_test, preds))

model.close()
# import json
from ludwig import LudwigModel
import pandas as pd

# load the csv file
csv_file = pd.read_csv('out.csv')

model = LudwigModel.load(
    "/home/jesse/Documents/Machine Learning/Disease Prediction System/Hepatitis/results/_run_4/model"
)
predict = model.predict(csv_file)

# convert prediit to json file
predict.to_json(r'./prediit.json')