Azureml, AKS, Tensor Flow Keras로 와인의 질을 예측하다


저희가 뭘 하고 싶은지.
고정 산도, 휘발성 산도, 레몬산, 잔여당, 염화물, 유리 이산화황, 총 이산화황, 밀도, pH치, 황산염과 알코올 등 특정 속성에 따라 텐소플로우 케라스 딥러닝 프레임워크를 사용하여 와인의 품질을 예측한다.
우리는 우리의 방법을 두 가지 주요 부분으로 나눌 것이다.
  • Azure ML에서 모델 구축
  • Azure ML의 모델로 추정
  • Azure ML에서 모델을 작성하려면 다음 절차를 따르십시오.
  • Azure ML 작업공간 만들기
  • Azure ML 작업공간에 데이터 업로드
  • 코드 폴더 만들기
  • 컴퓨팅 클러스터 생성
  • 모델 생성
  • 컴퓨팅 환경 만들기
  • 생성 평가기
  • 실습 생성 및
  • 실행
  • 등록 모델
  • Azure ML의 모델에서 다음 단계를 추정합니다.
  • 예상 스크립트 생성
  • 추리 의존 항목 만들기
  • 추리 설정 만들기
  • 추리 집단 만들기
  • 추리 집단에 모델 배치
  • 예측
  • 다른 문장을 읽으세요.이것은 기계 학습 기술을 사용하여 완성한 것이지 심도 있는 학습을 사용하는 것이 아니다.여기서도 같은 기능을 구현했으나 딥러닝 프레임워크인 케라스를 사용했다.기계 학습 방법과 비교하면 대다수의 상황은 변하지 않지만 몇 가지 절차가 바뀌었다.나는 이해하기 쉽도록 여기서 변화의 방면을 강조할 것이다.
    걸음걸이
    변하다
    Azure ML 작업공간 만들기
    변함없다
    Azure ML 작업공간에 데이터 업로드
    변함없다
    코드 폴더 만들기
    변함없다
    컴퓨팅 클러스터 만들기
    변함없다
    모델 생성하기
    개변
    계산 환경 만들기
    개변
    평가기 생성
    개변
    실험 생성 및 실행
    변함없다
    등록 모델
    변함없다

    모델 생성하기
    우리가 이곳에서 만든 모형은
    치밀층 중퇴
  • 회 표준화
  • 마지막 층은 단일 신경원의 밀집층이다.
    이 블록은 repeatable block회 반복됩니다.
    
    %%writefile $folder_training_script/train.py
    
    import argparse
    import os
    import numpy as np
    import pandas as pd
    import glob
    
    from azureml.core import Run
    # from utils import load_data
    
    # let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
    parser = argparse.ArgumentParser()
    parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
    args = parser.parse_args()
    
    ###
    data_folder = os.path.join(args.data_folder, 'winedata')
    print('Data folder:', data_folder)
    
    red_wine = pd.read_csv(os.path.join(data_folder, 'winequality_red.csv'))
    
    
    from tensorflow import keras
    from tensorflow.keras import layers, callbacks
    
    
    # Create training and validation splits
    df_train = red_wine.sample(frac=0.7, random_state=0)
    df_valid = red_wine.drop(df_train.index)
    
    X = df_train.copy()
    X = X.drop(columns = ["quality"])
    df_train_stats = X.describe()
    df_train_stats = df_train_stats.transpose()
    
    def norm(x):
        return (x - df_train_stats['mean']) / df_train_stats['std']
    
    # Split features and target
    X_train = df_train.drop('quality', axis=1)
    X_valid = df_valid.drop('quality', axis=1)
    X_train = norm(X_train)
    X_valid = norm(X_valid)
    y_train = df_train['quality']
    y_valid = df_valid['quality']
    
    
    early_stopping = callbacks.EarlyStopping(
        min_delta=0.001, # minimium amount of change to count as an improvement
        patience=20, # how many epochs to wait before stopping
        restore_best_weights=True,
    )
    
    input_shape=X_train.shape[1]
    
    model = keras.Sequential([
        # the hidden ReLU layers
        layers.Dense(units=512, activation='relu', input_shape=[input_shape]),
        layers.Dropout(0.3),
        layers.BatchNormalization(),
        layers.Dense(units=512, activation='relu'),
        layers.Dropout(0.3),
        layers.BatchNormalization(),
        layers.Dense(units=512, activation='relu'),
        layers.Dropout(0.3),
        layers.BatchNormalization(),
        # the linear output layer 
        layers.Dense(units=1)
    ])
    
    model.compile(
        optimizer='adam',
        loss='mae',
    )
    
    history = model.fit(
        X_train, y_train,
        validation_data=(X_valid, y_valid),
        batch_size=256,
        epochs=500,
        callbacks=[early_stopping], # put your callbacks in a list
        verbose=0,  # turn off training log
    )
    
    history_df = pd.DataFrame(history.history)
    
    # Get the experiment run context
    run = Run.get_context()
    
    run.log('min_val_loss', np.float(history_df['val_loss'].min()))
    
    os.makedirs('outputs', exist_ok=True)
    
    # note file saved in the outputs folder is automatically uploaded into experiment record
    model.save('outputs/my_model')
    
    run.complete()
    
    

    계산 환경 만들기
    컴퓨팅 환경은 AzuremL에서 제공하는 기획 환경 3을 사용합니다.
    from azureml.core import Environment
    curated_env_name = 'AzureML-TensorFlow-2.2-GPU'
    tf_env = Environment.get(workspace=ws, name=curated_env_name)
    

    평가기 생성
    계획된 환경 AzureML-TensorFlow-2.2-GPU을 활용하기 위해 평가기를 변경했습니다.
    from azureml.train.estimator import Estimator
    
    script_params = {
        '--data-folder': ds.as_mount()
    }
    
    
    # Create an estimator
    estimator = Estimator(source_directory=folder_training_script,
                          script_params=script_params,
                          compute_target = compute_target, # Run the experiment on the remote compute target
                          environment_definition = tf_env,
                          entry_script='train.py')
    

    예측 데이터
    Azure ML의 모델을 사용하여 다음 단계를 예측 또는 추정합니다.
  • 예상 스크립트 생성
  • 추리 의존 항목 만들기
  • 추리 설정 만들기
  • 추리 집단 만들기
  • 추리 집단에 모델 배치
  • 예측 획득
  • 앞에서 설명한 바와 같이 우리는 기계 학습 작업으로 모델을 구축하는 동일한 절차를 상세하게 설명하지 않는다.우리는 이전의 실시와 비교해 변화가 발생한 절차만 강조할 것이다.
    걸음걸이
    변하다
    추리 스크립트 만들기
    개변
    추리 의존 항목 만들기environment_definition = tf_env추리 설정 만들기
    개변
    추리 집단 만들기
    변함없다
    추리 집단에 모형을 배치하다
    변함없다
    예측을 얻다
    변함없다

    추리 스크립트 만들기
    %%writefile $folder_training_script/score.py
    
    import json
    from tensorflow import keras
    import numpy as np
    from azureml.core.model import Model
    
    # Called when the service is loaded
    def init():
        global model
        # Get the path to the registered model file and load it
        model_path = Model.get_model_path('wine_model')
        model = keras.models.load_model(model_path)
    
    # Called when a request is received
    def run(raw_data):
        try:
    
            # Get the input data as a numpy array
            data = np.array(json.loads(raw_data)['data']) 
            # Get a prediction from the model
            predictions = model.predict(data)
            log_txt = 'Data:' + str(data) + ' - Predictions:' + str(predictions)
            print(log_txt)
            # Return the predictions as any JSON serializable format
            return predictions.tolist()
    
        except Exception as e:
            result = str(e)
            # return error message back to the client
            return json.dumps({"error": result})
    

    추리 의존 항목 만들기
    우리는 이 단계를 필요로 하지 않는다. 왜냐하면 우리는 정성껏 계획한 환경을 사용하기 때문이다

    추리 설정 만들기
    from azureml.core.model import InferenceConfig
    
    classifier_inference_config = InferenceConfig(source_directory = './winecode',
                                                  entry_script="score.py",                                             environment=tf_env)
    
    여기서는 이전에 생성된 계획 환경 Not required을 사용하여 추정 구성을 준비합니다.

    결론
    본고에서 Keras 딥러닝 프레임워크를 사용할 때 우리가 머신러닝으로 모델을 구축하는 방법에 비해 달라지는 코드를 중점적으로 소개했다.
    읽어주셔서 감사합니다.당신의 평론을 남겨 주세요.

    좋은 웹페이지 즐겨찾기