6/20 공부 내용 정리
1. DL에 대해 학습 중이다. 인공지능은 통계학과 확률을 빼놓고 얘기할 수 없다. 아주 밀접하게 연관되어 있다. 데이터를 기반으로 학습하기 때문이다. 통계학은 데이터를 연구하는 학문이다. 데이터 안에서 규칙성을 발견하고, 객관적 의사결정을 내리는데 도움을 준다. 확률적으로 사고하는 것이 늘 정확한 결과를 만드는 것은 아니다. 그러나 합리적인 결정을 내리게 해 준다.
2. 입력 → 가중치 → 가공 / 자극 → 함수 → 출력 / ▶ 활성화 함수가 처리를 도와준다.
3. 활성화 함수의 종류는 Sigmoid , Tanh , ReLU, Leakey ReLU가 있다.
4. 딥러닝은 인공신경망을 여러 층으로 쌓아 올리는 행위다. 인공신경망은 퍼셉트론을 쌓아올린 것이다.
5. 은닉층이 뭐지?
은닉층(hidden layer)은 인공신경망(artificial neural network)에서 입력층(input layer)과 출력층(output layer) 사이에 위치한 중간층을 말한다.
인공신경망은 입력 데이터를 받아들여 여러 개의 은닉층을 거쳐 출력을 생성하는 과정으로 구성된다. 각 은닉층은 여러 개의 뉴런(neuron)으로 구성되어 있으며, 이 뉴런은 입력 신호를 받아들여 가중치(weight)와 활성화 함수(activation function)를 적용한 후 출력을 계산한다.
은닉층은 입력층과 출력층 사이에 존재하기 때문에 입력과 출력 사이의 복잡한 관계를 학습할 수 있다. 각 은닉층은 이전 은닉층의 출력을 입력으로 받아들이며, 여러 개의 은닉층을 거침으로써 복잡한 비선형 함수를 근사(approximation)할 수 있다. 이러한 기능을 통해 인공신경망은 다양한 문제에 적용될 수 있으며, 딥러닝(deep learning)에서 중요한 구성 요소로 사용된다.
6. Epoch란?
Epoch(에포크)는 인공신경망(artificial neural network)에서 전체 훈련 데이터셋을 한 번 모두 사용하여 학습하는 과정을 말한다. 에포크는 학습 알고리즘의 반복 횟수를 나타내며, 한 번의 에포크는 모든 훈련 데이터를 한 번씩 통과한 후에 이루어진다.
DL 실습 코드
import os
import random
import time
# INFO, WARNING, and ERROR messages are not printed
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
try:
from matplotlib import pyplot as plt
except ModuleNotFoundError:
import pip
pip.main(['install', 'matplotlib'])
try:
from matplotlib import pyplot as plt
except ModuleNotFoundError:
time.sleep(2)
from matplotlib import pyplot as plt
try:
import numpy as np
except ModuleNotFoundError:
import pip
pip.main(['install', 'matplotlib'])
try:
import numpy as np
except ModuleNotFoundError:
time.sleep(2)
import numpy as np
class DataReader():
def __init__(self):
# 데이터를 저장할 변수들
self.train_X, self.train_Y, self.test_X, self.test_Y = self.read_data()
# 데이터 읽기 완료
# 읽어온 데이터 정보 입력
print("\n\n 데이터 읽기 완료")
print("훈련(Training) X size :" + str(self.train_X.shape))
print("훈련(Training) Y size :" + str(self.train_Y.shape))
print("훈련(Training) X size :" + str(self.test_X.shape))
print("훈련(Training) Y size :" + str(self.test_Y.shape))
# 데이터 읽어오기 위한 메서드
def read_data(self):
fileNM = os.listdir("data")[0]
file = open("data/" + fileNM, encoding="utf-8")
# 헤더 제거
file.readline()
# 데이터와 레이블을 저장하기 위한 비어있는 리스트
data = []
# 파일을 한줄씩 읽어오기
for line in file:
# 컴마를 기준으로 split() 실행
splt = line.split(",")
# split 결과물을 정리해 X값과 Y값으로 추려내기
x, compulsory = self.process_data(splt)
# 추려낸 데이터를 저장
data.append((x, compulsory))
# 학습하기 전 전체 데이터 섞기
random.shuffle(data)
X = [] # 독립변수
y = [] # 종속변수(정답)
for el in data:
X.append(el[0])
y.append(el[1])
# numpy 배열로 생성
X = np.asarray(X)
y = np.asarray(y)
# 훈련 데이터 셋 : 테스트 데이터 셋 = 8 : 2
train_X = X[:int(len(X) * 0.8)]
train_Y = y[:int(len(y) * 0.8)]
test_X = X[int(len(X) * 0.8):]
test_Y = y[int(len(y) * 0.8):]
return train_X, train_Y, test_X, test_Y
# split()한 값을 정리하기 위한 메서드
def process_data(self, splt):
# 읽어온 splt 값에서 학교, 성별, 키, 몸무게만 추출
school = splt[9] # 종속변수
gender = splt[13] # 독립변수
height = float(splt[15]) / 194.2 # 독립변수 (최대값으로 나눔)
weight = float(splt[16]) / 130.7 # 독립변수 (최대값으로 나눔)
# 추려낸 데이타를 저장할 빈 리스트
data2 = []
data2.append(height)
data2.append(weight)
# 성별이 남자일 경우 1, 여자일 경우 0
if gender == "남":
data2.append(1)
else:
data2.append(0)
# 초등학교, 중학교, 고등학교 정보를 정리
# compulsory는 레이블(예측값)
if school.endswith("초등학교"):
compulsory = 0
elif school.endswith("중학교"):
compulsory = 1
elif school.endswith("고등학교"):
compulsory = 2
# 결과물 리턴
return data2, compulsory
from tensorflow import keras
import data_reader
EPOCHS = 20
dr = data_reader.DataReader()
'코딩 학원(국비지원)' 카테고리의 다른 글
105일차 코딩학원 (시각화의 중요성) (2) | 2023.06.22 |
---|---|
104일차 코딩학원 (신경망과 활성화함수) (1) | 2023.06.21 |
102일차 코딩학원 (Deep Learning) (2) | 2023.06.19 |
101일차 코딩학원 (능력단위평가) (1) | 2023.06.16 |
100일차 코딩학원 (머신러닝) (2) | 2023.06.15 |