Categories: Uncategorized

[에이아이노미스] 노코딩 AI 솔루션, 튜토리얼 따라해보기_3탄!

태아보험사은품

안녕하세요 ~ 에이아이노미스 입니다 :)​​오늘은 인공지능을 활용한 야구 투구 유형 예측 튜토리얼을 들고 왔습니다ㅎㅎ ​잘 따라와 주세요 ~~ ​ nocoding ai 튜토리얼 (야구 투구 유형 예측하기) https://www.nocodingai.com/ nocodingAI 지금 바로 AI 개발자가 되어보세요. 코딩 없는 AI 플랫폼, nocodingAI에 오신 것을 환영합니다. nocodingAI와 함께 AI 전문가가 되어보세요! 무료로 시작하기 nocodingAI 살펴보기 새로 공유된 배포 페이지 훈련 시킨 모델을 나만의 웹페이지로 만들어 배포할 수 있습니다. 다른 사용자들이 공유한 페이지를 살펴보세요! 나는 무슨 꽃일까 사진을 5종류의 꽃 중 가장 비슷한 꽃으로 분류합니다. 클릭하면 페이지로 이동 가위바위보 가위바위보 분류 모델입니다. 클릭하면 페이지로 이동 보스턴 부동산 가격 단순 선형 회귀 보… www.nocodingai.com 더 다양한 인공지능 모델을 알아보고 싶으시다면 여기로!. Developer for NOCODING AI – Medium Read writing from Developer for NOCODING AI on Medium. Easiest AI Maker. Every day, Developer for NOCODING AI and thousands of other voices read, write, and share important stories on Medium. medium.com 소개 이 튜토리얼은 MLBAM의 피치 센서 데이터로 야구 투구 유형을 예측하는 모델을 훈련시키는 튜토리얼입니다.​목차훈련에 필요한 원본 데이터를 로드합니다.로드된 데이터를 데이터 전처리기를 통해 모델에 맞게 가공하고 정규화시킵니다.모델의 아키텍처를 정의합니다.모델을 훈련시키고 훈련하는 동안 성능을 모니터링합니다.​키 포인트nocodingAI에서 데이터를 전처리하는 방법nocodingAI에서 인공지능 모델 아키텍처를 정의하는 방법nocodingAI에서 훈련된 모델을 사용해 추론하는 방법추론에 필요한 입력데이터를 정규화하는 방법추론 결과값을 레이블링하는 방법​준비물최신 버전의 Chrome 또는 다른 최신 브라우저.nocodingAI의 기본적인 사용법을 숙지하고 있어야 합니다. 기본적인 사용법의 소개나 학습이 필요하신 분은 nocodingAI 시작하기 가이드를 참고해주세요.​1. 데이터 불러오기 튜토리얼에 필요한 데이터를 불러오는 단계입니다. 사용할 데이터는 PITCH-DATA입니다. 데이터 노드를 열고 데이터 소스 생성 버튼을 눌러 PITCH-DATA 샘플 데이터 소스를 생성해주세요. ​생성된 데이터소스를 선택합니다.이 데이터셋은 총 9개의 항목으로 구성되어 있습니다.투구 속도를 나타내는 3개 항목(vx0,vy0,vz0)투구 가속도를 나타내는 3개 항목 (ax,ay,az)투구 초속(start_speed)좌투수인지 아닌지 여부(left_handed_pitcher)구종 코드 (pitch_code) : Fastball (2-seam), Fastball (4-seam), Fastball (sinker), Fastball (cutter), Slider, Changeup, Curveball을 0~6까지의 숫자로 나타낸 코드​ 불러온 투구 데이터는 CSV 파일로 되어 있습니다. 원본 데이터 노드에서 CSV 파일을 로드하면 자동으로 Data Set 형태로 바꾸어줍니다. 이제 이 데이터셋을 활용해 인공지능이 투구에 대한 정보를 입력받아 구종 코드를 예측하도록 모델을 만들 예정입니다.​2. 데이터 전처리 불러온 데이터로 훈련을 시작하기 앞서, 데이터에서 라벨을 분리하고 정규화하는 과정을 거쳐야합니다. 진행 과정은 다음과 같습니다.​데이터셋에서 라벨(구종코드)과 입력 데이터(투구 정보)를 분리투구정보 정규화출력 노드의 xs 소켓에 입력 데이터, ys 소켓에 라벨 데이터 연결​ 불러온 데이터를 전처리하기 위해 데이터 전처리 노드를 생성하고, 전처리기를 만들겠습니다. (데이터 전처리 에디터를 실행하기 전에 원본 데이터 노드에 데이터가 로드 완료 되었는지 확인하고, 데이터 전처리 노드와 연결해주세요.)​ 전처리기가 생성되면 편집 버튼을 눌러 데이터 전처리 에디터를 실행합니다. 기본 탭에서 사용할 컬럼 선택 노드를 생성하고 입력 노드와 연결해줍니다. 여기서 입력 데이터는 구종 코드를 제외한 모든 항목입니다. 위 사진과 같이 사용할 컬럼을 선택하여 라벨과 입력 데이터를 분리합니다.​ 이번에는 라벨 데이터인 구종 코드를 분리해야합니다. 데이터 변환 탭에서 Y값을 선택하여 Tensor로 변환 노드를 생성하고, 라벨 데이터인 pitch_code를 선택합니다. 정규/표준화 탭에서 정규화 노드를 생성합니다. 생성된 정규화 노드를 입력 데이터를 추출한 컬럼 선택 노드(pitch_code를 제외한 모든 항목이 선택되어 있습니다.)와 연결합니다. 정규화에 필요한 값을 계산하기 위해, 필요값 자동 계산 버튼을 눌러 필요한 값을 입력합니다.​ 이제 투구 데이터가 0~1 범위로 정규화되었습니다. 정규화가 완료된 데이터를 Tensor로 변환하기 위해, 데이터 변환 탭에서 CSV 데이터를 Tensor로 변환 노드를 생성해 입력 데이터가 들어있는 정규화 노드와 연결합니다.​ 마지막으로 Output 노드와 CSV 데이터 변환 노드를 연결해줍니다. xs 소켓에는 입력 데이터가 담겨 있는 CSV 데이터 변환 노드를 연결하고, ys 소켓에는 라벨 데이터가 있는 Y값 변환 노드를 연결합니다.​ ​⚙️참고 : 다음은 데이터를 불러오고 정규화하는 Javscript 코드입니다.// Using tfjsfunction normalize(value, min, max) { if (min === undefined || max === undefined) { return value; } return (value — min) / (max — min); }const TRAIN_DATA_PATH = ‘https://storage.googleapis.com/mlb-pitch-data/pitch_type_training_data.csv’;// Constants const VX0_MIN = -18.885;const VX0_MAX = 18.065;const VY0_MIN = -152.463;const VY0_MAX = -86.374;const VZ0_MIN = -15.5146078412997;const VZ0_MAX = 9.974;const AX_MIN = -48.0287647107959;const AX_MAX = 30.592;const AY_MIN = 9.397;const AY_MAX = 49.18;const AZ_MIN = -49.339;const AZ_MAX = 2.95522851438373;const START_SPEED_MIN = 59;const START_SPEED_MAX = 104.4;const NUM_PITCH_CLASSES = 7;const TRAINING_DATA_LENGTH = 7000;const TEST_DATA_LENGTH = 700;const csvTransform = ({xs, ys}) => { const values = [ normalize(xs.vx0, VX0_MIN, VX0_MAX), normalize(xs.vy0, VY0_MIN, VY0_MAX), normalize(xs.vz0, VZ0_MIN, VZ0_MAX), normalize(xs.ax, AX_MIN, AX_MAX), normalize(xs.ay, AY_MIN, AY_MAX), normalize(xs.az, AZ_MIN, AZ_MAX), normalize(xs.start_speed, START_SPEED_MIN, START_SPEED_MAX), xs.left_handed_pitcher ]; return {xs: values, ys: ys.pitch_code}; }const trainingData = tf.data.csv(TRAIN_DATA_PATH, {columnConfigs: {pitch_code: {isLabel: true}}}) .map(csvTransform) .shuffle(TRAINING_DATA_LENGTH) .batch(100);​3. 모델 아키텍처 만들기 이 섹션에서는 모델 아키텍처를 구성하는 방법에 대해 소개할 예정입니다. 모델 아키텍처는 “모델이 실행될 때 어떤 기능이 실행 될지” 또는 “모델이 답을 계산하는 데 사용할 알고리즘 “을 나타내는 구조입니다.​ 모델 아키텍처를 구성하기 위해서는 모델 편집 노드를 생성하고 새로운 모델을 생성해야 합니다. 생성된 모델을 선택하고 편집 버튼을 눌러 모델 에디터를 실행합니다.​다음과 같이 레이어를 생성하고 연결합니다.InputAndOutput 탭에서 InputLayer와 Output을 각각 하나씩 생성합니다.Basic탭에서 Denese 레이어를 총 4개 생성합니다.레이어를 InputLayer-Dense-Dense-Dense-Dense-Output 순서로 연결합니다. ​이제 각 레이어에 값을 입력하겠습니다. 각 레이어의 고급 설정 버튼을 눌러 입력창을 열고, 설정 추가 버튼을 통해 각 설정을 추가해줍니다.InputLayer에 shape를 추가하고 8을 입력합니다. 이는 투구 데이터의 8가지 항목을 나타냅니다. 첫번째 Dense에 아래 설정을 추가합니다.units : 250activation : relu두번째 Dense에 아래 설정을 추가합니다.units : 175activation : relu세번째 Dense에 아래 설정을 추가합니다.units : 150activation : relu 마지막 Dense에 아래 설정을 추가합니다.units : 7activation : softmax 모든 입력이 끝났으면 모델 에디터를 닫고, 모델 편집 노드와 데이터 전처리 노드를 연결시킵니다.​⚙️참고 : 다음은 모델 아키텍처를 구성하는 Javascript 코드입니다.// Using tfjsconst model = tf.sequential();model.add(tf.layers.dense({units: 250, activation: ‘relu’, inputShape: [8]})); model.add(tf.layers.dense({units: 175, activation: ‘relu’})); model.add(tf.layers.dense({units: 150, activation: ‘relu’})); model.add(tf.layers.dense({units: 7, activation: ‘softmax’}));​4. 모델 훈련 모델 아키텍처를 구성하고, 데이터를 전처리 했다면 이제 모델을 훈련시키기 위한 모든 준비가 끝났습니다.​이제 다음과 같은 과정을 통해 모델을 훈련시키겠습니다.훈련 준비모델 컴파일모델 훈련결과 모니터링​위 과정 중 훈련 준비를 제외한 나머지 과정은 훈련이 시작되면 자동으로 이루어집니다.​5. 훈련 준비모델 트레이너 노드를 생성하고 옵티마이저, 로스 값, Metrics를 다음과 같이 설정합니다. 옵티마이저 : adam손실함수 : sparseCategoricalCrossentropy평가지표 : accuracy설정이 완료되면 모델 편집 노드와 모델 트레이너 노드를 연결해주세요.​이제 모델을 컴파일할 준비를 마쳤습니다. 이번에는 훈련에 필요한 수치들을 설정해야합니다.​⚙️ 참고 : 모델을 컴파일하는 Javascript 코드는 다음과 같습니다.// Using TensorFlow.jsmodel.compile({ optimizer: tf.train.adam(), loss: ‘sparseCategoricalCrossentropy’, metrics: [‘accuracy’] });​오른쪽 위의 에폭과 배치사이즈를 각각 5, 128로 설정합니다. ​6. 훈련 시작epochs 옆의 모델 훈련 시작 버튼을 누르면 자동으로 훈련이 진행됩니다.❗이전 튜토리얼에 비해 데이터양이 많기 때문에 훈련에 시간이 많이 소요될 수 있습니다. 훈련이 시작되면 훈련 경과에 대한 정보가 각 batch, epoch마다 정리되어 그래프로 표시됩니다. 훈련이 완료되었습니다.​⚙️ 참고 : 모델을 훈련시키고 모니터링하는 Javascript코드는 다음과 같습니다.// Using TensorFlow.jsconst metrics = [‘loss’, ‘acc’];const container = { name: ‘Model Training’, tab: ‘Model’, styles: { height: ‘1000px’ } };const fitCallbacks = tfvis.show.fitCallbacks(container, metrics);await pitch_type.model.fitDataset(pitch_type.trainingData, { epochs: 1, callbacks: fitCallbacks });​7. 추론하기이제 모델 훈련이 완료되었으니, 훈련된 모델을 사용해 구종을 추론해봅니다.좌측의 추론하기 버튼을 눌러 추론 화면으로 이동합니다. 우측 상단의 모델 선택 버튼을 눌러 우리가 훈련 시킨 모델을 불러오겠습니다. 앞서 훈련시킨 모델인PITCH-MODEL을 선택합니다. ​8. 입력데이터 정규화모델을 훈련시키면서 정규화된 수치를 사용했기 때문에 추론에 사용할 입력값도 정규화 시키는 작업이 필요합니다.​먼저 입력노드에서 텍스트를 선택합니다. 입력 데이터 선택을 체크하고 입력칸 오른쪽에 있는 정규화 버튼을 눌러 정규화 설정을 진행합니다.좌투수 여부를 제외한 7개의 입력 모두 각각 최댓값과 최솟값을 입력해야합니다. 각 수치의 최솟값과 최댓값은 아래와 같습니다. 모든 수치는 마일 단위입니다.입력0(속도X) 최솟값 -18.9/최댓값 18입력1(속도Y) 최솟값 -152.4/최댓값 -86.3입력2(속도Z) 최솟값 -15.5/최댓값 9.9입력3(가속도X) 최솟값 -48.02/최댓값 30.6입력4(가속도Y) 최솟값 9.4/최댓값 49.2입력5(가속도Z) 최솟값 -49.3/최댓값 2.9입력6(시작 속도) 최솟값 59/최댓값 104.4위 수치를 각각의 입력란에 입력합니다. 입력이 끝났으면 인공지능 모델이 입력된 수치를 바탕으로 구종을 예측할 수 있습니다. 추론 결과에서 분류를 선택합니다. ​9. 추론결과 레이블링 & 추론하기이제 입력값을 입력해보겠습니다. 임의의 값을 입력하고 반영 버튼을 누릅니다. 인공지능 모델이 결과 5라고 추론하고 있습니다. 하지만 결과 5가 어떤 구종을 나타내는지 알기 어렵군요.레이블 파일을 업로드하여 각 분류값에 이름을 설정하겠습니다. 레이블 파일은 각 분류값을 순서대로 나타낸 txt 파일입니다. 메모장 등 텍스트 편집기를 사용하여 레이블 파일을 작성합니다. 이 때 각 분류값을 나타낼 이름은 줄 단위로 구분해야 합니다.이 모델에서 사용할 구종 분류 값은 아래와 같습니다.Fastball (2-seam)Fastball (4-seam)Fastball (sinker)Fastball (cutter)SliderChangeupCurveball이 분류값은 위에서부터 결과0~6까지에 할당될 것입니다.레이블 파일을 작성하였다면 추론 결과 창에서 레이블 업로드 버튼을 눌러 작성된 레이블 파일을 업로드합니다. 사용할 레이블 파일을 선택하고 확인 버튼을 누르면 자동으로 레이블 파일이 적용됩니다. 추론 결과가 잘 레이블링 되었습니다. 모델이 입력값을 바탕으로 추론한 구종은 체인지업이라는 것을 알 수 있습니다.​ 이렇게만 하시면 너도 나도 인공지능을 개발한 개발자가 되는 겁니다 ~! ​다음 포스팅에서 뵈어요 ~ ^.^ 에이아이노미스 서울특별시 도봉구 마들로13길 84 서울창업허브 창동, 211호 Contact-usE-mail : ceo@ai-nomis.comHp. 010 2787 2009Website : https://www.ai-nomis.com/​

gotsenofficial

Share
Published by
gotsenofficial