Part4-18. 쉽게 배우는 경사하강 학습법 - 06. (STEP 3) 경사하강법을 이용한 얕은 신경망 학습 - 1
import
import tensorflow as tf
import numpy as np하이퍼 파라미터 설정
EPOCHS = 1000
네트워크 구조 정의
# 입력 계층 : 2, 은닉 계층 : 128 (Sigmoid activation), 출력 계층 : 10 (Softmax activation)
# 케라스 모델 상속해와서 진행
# class의 경우 처음 인자는 self로 받아줘야함
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 데코레이터 이용 최적화 진행
@tf.function
def train_step(model, inputs, labels, loss_object, optimizer, train_loss, train_metric):
# GradientTape안에서 gradient 계산
with tf.GradientTape() as tape:
predictions = model(inputs)
loss = loss_object(labels, predictions)
#스칼라를 벡터로 미분하기때문에 gradients도 벡터
gradients = tape.gradient(loss, model.trainable_variables) # 스칼라(loss)를 모든 trainable_variables로 미분 df(x)/dx
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_metric(labels, predictions) #평가지료로 계산 
Part4-19. 쉽게 배우는 경사하강 학습법 - 07. (STEP 3) 경사하강법을 이용한 얕은 신경망 학습 - 2
데이터셋 생성 전처리
데이터셋 직접 만들어 사용
np.random.seed(0) #시드값 고정
pts = list() #입력값
labels = list() #출력값
# 10개 포인트 생성(가우시안 형태로)
center_pts = np.random.uniform(-8.0, 8.0, (10, 2))
for label, center_pt in enumerate(center_pts):
for _ in range(100):
pts.append(center_pt + np.random.randn(*center_pt.shape)) #중심점을 기준으로 둥글게 퍼지는 형태로 생성됨
labels.append(label)
pts = np.stack(pts, axis=0).astype(np.float32) #list-> numpy object로 변형/GPU로 연산할경우 float32로 연산해야 진행됨
labels = np.stack(labels, axis=0)
# from_tensor_slices - data_set형태로 만들어줌
train_ds = tf.data.Dataset.from_tensor_slices((pts, labels)).shuffle(1000).batch(32) #학습안되면 배치사이즈 줄일것
모델 생성
model = MyModel()손실 함수 및 최적화 알고리즘 설정
loss_object = tf.keras.losses.SparseCategoricalCrossentropy() #Sparse one-hot과 반대되는 개념
optimizer = tf.keras.optimizers.Adam()평가지표 설정
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:
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))
train_loss.reset_states()
train_accuracy.reset_states()
데이터셋 및 학습 파라미터 저장
# savez_compressed 압축해서 저장
np.savez_compressed('ch2_dataset.npz', inputs=pts, labels=labels)
# weight, bias 저장
W_h, b_h = model.d1.get_weights()
W_o, b_o = model.d2.get_weights()
# 컨벤션이 다소 달라서 transpose해서 저장
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)'책&강의 학습 > 올인원 패키지 :딥러닝&인공지능' 카테고리의 다른 글
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 31회차 미션 (0) | 2020.07.29 |
|---|---|
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 30회차 미션 (0) | 2020.07.28 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 28회차 미션 (0) | 2020.07.26 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 27회차 미션 (0) | 2020.07.25 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 26회차 미션 (0) | 2020.07.24 |
댓글