• 구글 플랫폼 ml을 써보자 2부

    2017. 7. 17. 19:48

    by. 위지원

    오늘 한 삽질을 기록해보자..



    [삽질 시작]


    오늘은 다시 초심으로 돌아가 차근차근 해보자.. 그래서 잠도 좀 많이 자고왔다 8시간이나 잤다


    우선 견본데이터를 분석하는게 가장 좋다고하니.. 일단 코드를 분석해보자 나는 추천서비스를 만들고자 하기때문에 


    movielens라는 코드를 가지고 해보겠다 




    해당 깃헙에 있는데로 나는 우선


    1.tensortransform 을 설치


     데이터 전처리를 위한 모듈로 자세한 설명은 https://github.com/tensorflow/transform/blob/master/getting_started.md 이곳에 있다.


    $pip install  tensorflow-transform



    2.학습시킬 데이터를 다운 (csv형태)


    데이터는 아래 주소에서 제공해 주고 있다.



    깃헙에서 설명해주는 데이터의 내용으로는


    3가지로 구성되는데 '별점','영화분류','영화링크' 이렇게 3가지로 구성되어있다 한다.


     별점 : userId, movieId, rating, timestamp

    영화분류 : movieId,title,genres

    영화링크 : movieId, imdbId, tmdbId (movie,imdb,tmdb 는 각각 영화 사이트같다 들어가보니


    3.어떤식으로 전처리를 할까? 샘플 개요에 따르면..


    1.일단 별점 테이블(테이블이라고 해도될려나?)에 있는 user_id를 기준으로 train과 eval 데이터로 나뉘다고 한다. 

    --percent_eval을 가지고 평가 세트에 포함된 사용자의 백분율을 제어할 수 있다 한다


    2.이제 트레인에서는 각 등급에 대해서 하나의 예를 생성한다. 

    예의 내용은 동일한 사용자가 평가 한 모든 영화의 영화 id와 등급이 포함된다.


    3.부정적인 예를 생성할텐데 이는 평가하지 않은 항목/영화에 대한 별표가 0인예제를 가지고 생성한다.

    --negative_sample_ratio를 가지고 제어할 수 있다.


    4.평가에서는 위와 같지만 부정적인예를 생성하지 않는다.--eval_score_threshold로 문턱값을 지정한다음 이 이하의 별인 영화를 평가 데이터 집합에서 제거한다


    --내가 이해한건 이정도... 2번은 사실 아직 모르겠다. 코드를 봐야 더 알 수 있을 듯하니 더 알아보자



    4.깃헙의 소스파일을 보자 


    preprocess.py를 이용해서 데이터 전처리를 할 수 있는 것 같다 코드를 보자 ( 내 프로젝트에 적용시키기위해... ㅠㅠ )

    다행히 소스코드를 올려주신분이 친절하게 주석을 많이 달아주신 것 같다


    perpocess.py에서 알아낸것들


    0. 데이터 전처리에서 받아내는 인자들에 대해 설명하고 정의하는 코드


    1. _default_project() 는 google platform의 프로젝트를 설정하는 부분

    2. paraser.add_argument를 이용해서 -- 표시로 들어오는 값들을 파싱해서 인수로 넘겨줌

    3. add_argument의 옵션에서

    -type으로 int float이든,,형식을 지정할 수 있고

    -required=True 으로 값이 꼭 들어와야한다고 필수값을 설정할 수 있고

    -help로 해당 인자에 대한 설명도 적어줄 수 있으며

    -default로 기본 값도 지정해줄 수 있고..


    내가 트레이닝 할때 필요한 값들을 넘겨줄 수 있게 세팅을 하는 부분인 것 같다.


    4._construct_feature 메서드는 특징을 작성하는데, 후보기능,레이블,쿼리기능을 작성한다.

    process는 트레이닝을 위한 기능별 열을 만든다.


    이제 이 후 preproc폴더 내에 있는 movielens.py를 import 하고있다. 해당 코드를 알아보자

    [삽질 끝]




    후..... 어렵다 ㅠ휴그흑

    그러다가 나에게 빛과같은 블로그의 등장!!

    http://jybaek.tistory.com/652 감사합니다 정말 ㅠ0ㅠ


    이분의 블로그를 보고 다시 초심으로..돌아가서 마음을 가다듬고 시작해보자 그래.. 처음부터 완성된 코드를 보고 뚜딱뚝딱하는건 멍청한 나에겐 엄첨난 시련인것이였다

    hello world를 출력해보자



    1.우선 train 폴더에 저번에 말한 것과 같이

    __init__.py 랑 model.py 두개를 만들어보자 (이름만 거창..)


    그리고서 로컬로 코드가 잘 실행되는지 아래의 명령어를 터미널에 입력해서 확인해본다


    gcloud ml-engine local train \
    --module-name trainer.model \ #모델이 있는 경로를 작성
    --package-path trainer #모델 py 파일의 이름을 적어준다




    출력이 잘된다면 이번엔 클라우드로 실행해보자 우선 클라우드로 실행하기 위해 필요한 인자들을 미리 정해준다


     BUCKET_NAME=helloworldtest_1
     JOB_NAME=helloworldjob_1
     REGION=us-central1
     OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

    그리고 마지막으로 클라우드에 모델을 전송해서 학습시킨 후 결과를 버킷으로 받는다 (위에서 지정한 버킷에)
    gcloud ml-engine jobs submit training $JOB_NAME \
    --job-dir $OUTPUT_PATH \
    --module-name trainer.model \
    --package-path trainer
    --region $REGION \






    정말 잘된다 ㅠㅠ


    블로그 주인분에게 감사하다는 인사를 쨖쨖쨖

    이제 app engine에서 해당 모델에 요청을 보내고 값을 가져오는 걸 해봐야겠다

    대화의 장 💬