LSTM Cross Entropy Metric 메트릭 얻기 - ISEL-HGU/IntegratedDPModel GitHub Wiki

툴 소개

SurprisedBasedMetricsExpDataExtractor툴에서 뽑은 커밋 소스코드 데이터를 이용하여 LSTM 모델을 훈련시킨 후 LSTM Cross Entropy 값을 추출하여 소프트웨어 메트릭으로 만드는 툴이다.

Manual script steps

  1. conda 이용해서 pytorch 설치해야한다. (아래와 같은 설정에서 실험 돌렸음)

    • python version: 3.7.3
    • conda version: 4.8.3
    • pytorch version: 1.4.0
    • GPU 사용
  2. git clone https://github.com/ISEL-HGU/LSTMCrossEntropyMetricExtractor.git

  3. LSTMCrossEntropyMetricExtractor/run_GPU0_line_single.sh 와 같이 스크립트들을 실행시킨다.

    #!/bin/sh
    # Single LSTM
    for projectname in "ace" "ant-ivy" "bigtop" "bval" "camel" "cayenne" "cordova-android" "creadur-rat" "crunch" "deltaspike" "gora" "groovy" "guacamole-client" "incubator-dolphinscheduler" "incubator-hivemall";
    do
    python main_line_GPU0.py --batch_size 32 --test_batch_size 32 --epochs 20 --lr 0.01 --seq_size 32 --embedding_size 64 --lstm_size 64 --gradients_norm 5 --input_csv_metric_file [SurprisedBasedMetricsExpDataExtractor_PATH]/Output/DP/label_DP/${projectname}_developer.csv --output_csv_metric_file ./data/test/${projectname}_Line_Single_LSTM_Metric.csv --train_file [SurprisedBasedMetricsExpDataExtractor_PATH]/TrainData/${projectname}_AllCommitsAddedLines.txt --test_file [SurprisedBasedMetricsExpDataExtractor_PATH]/TrainData/Commit/${projectname}/
    done
    
    1. SurprisedBasedMetricsExpDataExtractor툴에서 만든 training data들의 path를 —train_file 옵션에 넣어주고 test data의 path를 —test_file 옵션에 넣어준다. 그리고 *_developer.csv 파일을 —input_csv_metric_file 옵션에 넣어준다. 그리고 LSTM C.E. 메트릭이 추가된 출력물의 위치를 —output_csv_metric_file을 통해 지정해준다. [SurprisedBasedMetricsExpDataExtractor_PATH]에 올바른 값을 넣어줘야 실행이 된다.
  4. 위처럼 다른 실행파일들도 실행시키면 된다 (run_GPU1_concat_single.sh, run_multi_GPU_concat_master.sh, run_multi_GPU_line_master.sh)

  5. output_csv_metric_file 파일에서 필요없는 metric들은 지워주고 뒤에 두 개 콜럼의 위치를 바꿔서 맨 마지막 컬럼에 class label이 오게 한 뒤 ARFF 파일로 만들어준다. https://github.com/ISEL-HGU/IntegratedDPModel/blob/master/src/main/java/edu/handong/csee/isel/weka/CSV2Arff.java을 실행시킨다. 이때 i 옵션에 바꾸고 싶은 input csv path를 입력한다. 이클립스에서 하나하나 실행시켜도 되고 아래처럼 실행파일을 만들어 스크립트를 돌려도 된다. CSV2ARFF_script

Options

"usage: main_multi_GPU_line_master.py [-h] [--batch_size N]
                                     [--test_batch_size N] [--epochs N]
                                     [--lr LR] --train_file TRAIN_FILE
                                     [--seq_size SEQ_SIZE]
                                     [--embedding_size EMBEDDING_SIZE]
                                     [--lstm_size LSTM_SIZE]
                                     [--gradients_norm GRADIENTS_NORM]

LSTM Cross-Entropy Metric

optional arguments:
  -h, --help            show this help message and exit
  --batch_size N        input batch size for training (default: 16)
  --test_batch_size N   input batch size for testing (default: 16)
  --epochs N            number of epochs to train (default: 100)
  --lr LR               learning rate (default: 0.01)
  --train_file TRAIN_FILE
                        path of training set
  --seq_size SEQ_SIZE   sequence size
  --embedding_size EMBEDDING_SIZE
                        embedding size
  --lstm_size LSTM_SIZE
                        lstm size
  --gradients_norm GRADIENTS_NORM
                        norm to clip gradients"