コード例 #1
0
    def build(self):
        print(
            '***************************build model***************************'
        )
        self.model = ModelWrapper.model(conf,
                                        train=True,
                                        vocab_size=self.vocab_size,
                                        labels_num=1)
        adam_optimizer = tf.keras.optimizers.Adam(lr=1e-3,
                                                  decay=1e-6,
                                                  clipvalue=5)
        self.model.compile(loss='binary_crossentropy',
                           optimizer=adam_optimizer,
                           metrics=['binary_crossentropy', 'accuracy'])

        self.model.summary()
コード例 #2
0
    def build(self):
        print(
            '***************************build model***************************'
        )
        self.model = ModelWrapper.model(conf,
                                        train=True,
                                        vocab_size=self.vocab_size,
                                        labels_num=self.labels_num)

        # model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=["accuracy"])   #optimizer=Adam()  keras.optimizers.Adam(lr=args.learning_rate, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
        self.model.compile(loss='categorical_crossentropy',
                           optimizer=tf.keras.optimizers.Adam(lr=0.05,
                                                              beta_1=0.9,
                                                              beta_2=0.999,
                                                              epsilon=1e-8),
                           metrics=["accuracy"])
        self.model.summary()
コード例 #3
0
    def setUp(self):
        self.flask_app = app.test_client()

        # Adding users to authenticate against
        self.username = "******"
        self.password = "******"
        app.config['USERS'][self.username] = self.password

        app.config['MODEL'] = ModelWrapper.load(GIT_COMMIT)

        # in case of using data versioning, don't forget to pull test data from remote data repo

        # read held back test data
        self.test_data = pd.read_csv("resources/test.csv")
        self.min_performance = 0.8

        self.predictor = app.config['MODEL']
コード例 #4
0
 def build(self, model_file=None):
     print(
         '***************************build model***************************'
     )
     self.model = ModelWrapper.model(conf,
                                     train=True,
                                     vocab_size=self.vocab_size,
                                     labels_num=self.labels_num)
     adam_optimizer = tf.keras.optimizers.Adam(lr=1e-3,
                                               decay=1e-6,
                                               clipvalue=5)
     #self.model.compile(loss=[self.focal_loss(gamma=2., alpha=.25)], optimizer=self.optimizer, metrics=self.metrics)
     self.model.compile(loss=self.loss,
                        optimizer=self.optimizer,
                        metrics=self.metrics)
     if not model_file is None:
         self.model.load_weights(model_file, by_name=True)
     self.model.summary()
コード例 #5
0
def train(model_name=GIT_COMMIT,
          train_data='resources/train.csv',
          dvc_data_repo=None,
          dvc_ssh_user=None,
          dvc_ssh_password=None):
    """This function is the training entry point and should not be removed. Executes the
    *ModelWrapper.prep_and_train* and saves the model using *joblib*. MANDATORY

    Notes
    -----
    This function can also be used for your local exploration/development. See the
    # >>> if __name__ and "__main__"

    Parameters
    ----------
    model_name : String
        given the trained model a name to store. Default: git_commit id.
    train_data : String
        path where to find the train data.
    dvc_data_repo :  String
    dvc_ssh_user : String
    dvc_ssh_password : String

    Examples
    --------
    In order to pull /optional) dependencies over the integrated data versioning provided by dvc,
    do:
        $ syncer = DataSync(dvc_data_repo, dvc_ssh_user, dvc_ssh_password)
        $ syncer.pull_data_dependency(train_data)
    This will synchronize the dvc data dependencies and training can be conducted
    """
    # where to get the data -> hard coded for now
    data = pd.read_csv(train_data)

    # initiate & train model
    logging.getLogger(__name__).info("Starting classification training...")

    classification_model = ModelWrapper()
    classification_model.prep_and_train(data)
    logging.getLogger(__name__).info(
        "Starting classification training... Done")

    logging.getLogger(__name__).info("Persisting the model...")
    classification_model.save(model_name)
コード例 #6
0
from flask import jsonify, request

from services.infrastructure.environment import training_host_url, debug_mode
from services.infrastructure.flask import init_flask
from services.infrastructure.git_info import GIT_COMMIT

from services.infrastructure.logging import initialize_logging
from services.infrastructure.environment import prediction_auth

from model.model_wrapper import ModelWrapper

# initialize flask application
TRAINING_POD_URL = training_host_url()
app, _executor, auth = init_flask()
app.config['USERS'] = prediction_auth()
app.config["MODEL"] = ModelWrapper.load(GIT_COMMIT)


@app.route('/predict', methods=['POST'])
@auth.login_required
def predict():
    """Provides the endpoint for getting new predictions from the developed model using a POST
    request json.

    HTTP Request Parameters
    -----------------------
    data : json
        Json post containing at least the *ModelWrapper.source_features*. Otherwise a error will
        be thrown

    HTTP Response
コード例 #7
0
import os

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from model.model_wrapper import ModelWrapper
from model.models import Base


class Connector:
    def __init__(self, db):
        self.engine = create_engine(db)
        Session = sessionmaker(bind=self.engine)
        self.session = Session()

    def update_model(self):
        Base.metadata.create_all(self.engine)


if __name__ == '__main__':
    con = Connector(db=os.environ['DB'])
    con.update_model()
    con.session.add(ModelWrapper.add_user('user', '#1', '*****@*****.**'))
    try:
        con.session.commit()
    except sqlalchemy.exc.IntegrityError:
        pass
コード例 #8
0
    logging.getLogger(__name__).info("Persisting the model...")
    classification_model.save(model_name)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Training model and saving it")
    parser.add_argument("--input",
                        "-i",
                        type=str,
                        help="Input file for training",
                        default="resources/train.csv")
    parser.add_argument("--output",
                        "-o",
                        type=str,
                        help="output model name",
                        default="local")
    parsed_args = parser.parse_args()

    train(model_name=GIT_COMMIT, train_data=parsed_args.input)

    model = ModelWrapper.load(GIT_COMMIT)

    # load test Dataframe
    test_df = pd.read_csv("resources/test.csv")
    print(test_df.to_dict(orient='list'))
    res = model.prep_and_predict(test_df.to_dict(orient='list'))
    print(res, test_df['Species'].values)

    print(accuracy_score(res['prediction'], test_df["Species"].values))