딥러닝기초_0415
preview
예측값, 정답을 비교해 손실함수 계산 => 기울기 계산 to 손실함수가 적어지는 방향으로!
2층 신경망(input, hidden, output)
미니배치학습을 통해 TwoLayerNet 클래스를 구현, MNIST 데이터 셋을 이용한 학습의 수행.
학습률, hidden_size, 반복횟수, 학습률 등을 변경하고 달라진 결과를 잘 파악하고 있어야 한다.
=> 위의 변수의 양을 달리하면, 결과에서 무엇이 달라진건지..
그 전 포스팅에서 정의한 클래스로 MNIST 데이터를 활용해 학습시켜보자.
학습 방식은 미니 배치 학습 구현.
미니배치 구현
import numpy as np
from dataset.mnist import load_mnist
from two_layer_net import TwoLayerNet
import matplotlib.pyplot as plt
# 데이터 읽기
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
train_loss_list = []
# 하이퍼파라미터
iters_num = 10000 # 반복횟수를 적절히 설정
train_size = x_train.shape[0]
batch_size = 100 # 미니 배치 크기
learning_rate = 0.1
network = TwoLayerNet(input_size = 784, hidden_size=50, output_size=10)
for i in range(iters_num):
# 미니배치 획득
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
# 기울기 계산
grad = network.numerical_gradient(x_batch, t_batch)
# 매개변수 갱신
for key in ('W1', 'b1', 'W2', 'b2'):
network.params[key] = -learning_rate * grad[key]
# 학습 경과 기록
loss = network.loss(x_batch, t_batch)
train_loss_list.append(loss)
x = np.arange(len(train_loss_list))
plt.plot(x, train_loss_list)
plt.show()
import numpy as np
from dataset.mnist import load_mnist
from two_layer_net import TwoLayerNet
import matplotlib.pyplot as plt
# 데이터 읽기
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
train_loss_list = []
# 하이퍼파라미터
iters_num = 10000 # 반복횟수를 적절히 설정
train_size = x_train.shape[0]
batch_size = 100 # 미니 배치 크기
learning_rate = 0.1
network = TwoLayerNet(input_size = 784, hidden_size=50, output_size=10)
for i in range(iters_num):
# 미니배치 획득
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
# 기울기 계산
grad = network.numerical_gradient(x_batch, t_batch)
# 매개변수 갱신
for key in ('W1', 'b1', 'W2', 'b2'):
network.params[key] = -learning_rate * grad[key]
# 학습 경과 기록
loss = network.loss(x_batch, t_batch)
train_loss_list.append(loss)
x = np.arange(len(train_loss_list))
plt.plot(x, train_loss_list)
plt.show()
사실 수업시간에 위의 코드 잘 실행이 안되서, 남아서 30분을 교수님과 해결해보려고 했는데 결국 나는 plt 그래프를 보지 못했다.
다행히 원인은 찾아냈는데,
grad = network.numerical_gradient(x_batch, t_batch)
코드가 cpu를 너무 잡아먹고, 무한 loop에 빠지게 하는 것 같다(?)
주말 동안 코드 계속 봐야지...
Author And Source
이 문제에 관하여(딥러닝기초_0415), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@allzeroyou/딥러닝기초0415저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)