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