Deep Learning & AI/AI

(딥러닝_온라인)딥러닝의 3 STEP의 기초 (10~12강)

MINSU KANG 2021. 5. 1. 22:53

참고) 해당 포스팅은 패스트 캠퍼스 100% 환급 챌린지 미션 기록용 포스팅이며, 강좌 내용에 맞추어 포스팅함을 언급

 

클립명 : PART4)딥러닝의 3 STEP의 기초

           쉽게 배우는 역전파 학습법 (STEP 2) - 역전파 학습법을 이용한 심층 신경망 학급 - 1

          쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 1

          쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 2

 이번 포스팅에서는 Pandas의 메소드중 데이터 분석에서(특히나 금융 데이터 분석)에서 유용하게 사용되는 Shift, Rolling, Expanding의 사례를 적어본다

 

이번 포스팅에서는 경사하강법 실습 코드에 대해 설명한다.

 


"""
경사하강법을 이용한 얕은 신경망 학습
"""
#%% Read Module

import numpy as np
import tensorflow as tf

#%% 하이퍼 파라미터 설정

EPOCHS = 1000
#%% 네트워크 구조 정의

# 입력계층 : 2, 은닉계층 : 128(Sigmoid activation), 출력계층 : 10 (Sofrmax Activation)

class MyModel(tf.keras.Model):
    
    def __init__(self):
        super(MyModel, self).__init__()
        self.d1 = tf.keras.layers.Dense(128, input_dim = 2, activation = 'sigmoid')
        self.d2 = tf.keras.layers.Dense(10, activation='softmax')
    
    
    def call(self, x, training = None, mask = None):
        x = self.d1(x)
        return self.d2(x)
        
#%% 학습루프정의

@tf.function
def train_step(model, inputs, labels, loss_object, optimizer, train_loss, train_metric):
    with tf.GradientTape() as tape:
        predictions = model(inputs)
        loss = loss_object(labels, predictions)
    gradients = tape.gradient(loss, model.trainable_variables) #여기서 loss는 스칼라를 의미하며 tape.gradient메소드는 스칼라를 trainable_variables를 미분한 값을 의미
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    train_loss(loss)
    train_metric(labels, predictions)

#%% 데이터셋 생성, 전처리

np.random.seed(0)

pts = list() # 입력계층이 2개니까, X & Y Variables
labels = list() # 출력계층이 10개니까 10개의 클래스로 생성
center_pts = np.random.uniform(-8.0, 8.0, (10, 2)) # -8.0 ~ 8.0으로 10개의 포인트를 두개의 차원으로 이뤄지겠끔 생성(10개의 좌표를 생성하며, X&Y의 범위가 -8 ~ 8사이)
for label, center_pt in enumerate(center_pts):
    for _ in range(100): # 각 중앙포인트마다 100개씩 뿌려준다. 즉 각 센터포인트마다 100개의 점을 생성한다.
        pts.append(center_pt + np.random.randn(*center_pt.shape)) # 각 중앙포인트를 중심으로 정규분포의 난수 100개를 생성한다
        labels.append(label)

pts = np.stack(pts, axis = 0).astype(np.float32)
labels = np.stack(labels, axis = 0)

train_ds = tf.data.Dataset.from_tensor_slices((pts, labels)).shuffle(1000).batch(32) # train_data_set으로 맞혀줌

#%% 모델 생성

model = MyModel()

#%% 손실 함수 및 최적화 알고리즘 설정

# CrossEntropy, Adam Optimizer
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()
#%% 평가 지표 설정
# Accuracy
train_loss = tf.keras.metrics.Mean(name = 'train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name = 'train_accuracy')

#%% 학습루프

for epoch in range(EPOCHS):
    for x, label in train_ds: #Batch Size(32)만큼 돌아감
        train_step(model, x, label, loss_object, optimizer, train_loss, train_accuracy)
    
    template = 'Epoch : {}, Loss : {}, Accuracy : {}'
    print(template.format(epoch + 1,
                          train_loss.result(),
                          train_accuracy.result() * 100))
    
#%%  데어터셋 및 학습 파라미터 저장 with Numpy

np.savez_compressed('ch2_dataset.npz', inputs=pts, labels=labels)

W_h, b_h = model.d1.get_weights()
W_o, b_o = model.d2.get_weights()
W_h = np.transpose(W_h)
W_o = np.transpose(W_o)
np.savez_compressed('ch2_parameters.npz',
                    W_h=W_h,
                    b_h=b_h,
                    W_o=W_o,
                    b_o=b_o)

(글자수 :Code포함 2000자 이상)

강의 소개 링크 : bit.ly/3cx6kMd

 

딥러닝/인공지능 올인원 패키지 Online. | 패스트캠퍼스

Tensorflow2.0부터 Pytorch까지 딥러닝 대표 프레임워크를 정복하기. 생활 깊숙이 침투한 인공지능, 그 중심엔 딥러닝이 있습니다. 가장 강력한 머신러닝의 툴로서 주목받는 딥러닝은 생각보다 어려

fastcampus.co.kr