일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 바른생수
- Unity
- 생명과학1
- ios
- 개발
- 고등학생
- 유니티
- 생명과학
- customdialog
- 내신
- 수능
- 딥러닝
- 코틀린
- 1등급사과
- 고등학교
- kotlin
- Firebase
- 수학가형21번
- PoLAB
- 수학가형
- 포랩
- xcode
- 플레이스토어
- 모의고사
- MNIST
- 개발일지
- Android
- 과탐
- JavaScript
- LineRenderer
Archives
- Today
- Total
수학적 접근
[머신러닝] MNIST 사용 기초 - 학습시킨 데이터로 테스트하기 본문
반응형
앞의 글에서 MNIST Dataset을 가져와서 조회해보았다.
이번에는 이 데이터를 학습시켜서, 이 데이터들과는 다른 테스트 데이터들을 이용하여
학습의 정확도를 측정해볼 것이다.
은닉층은 2개, activation function으로는 sigmoid 함수를 사용하며,
최종 출력값의 정규화를 위해 softmax 함수를 활용한다.
또한 weight 정보가 필요하므로, 아래 파일을 압축 해제하여 나오는 pkl 파일을
dataset 폴더 내에 넣는다.
그리고 아래와 같이 코드를 작성한다.
def sigmoid(x) : # sigmoid 함수
return 1 / (1 + np.exp(-x))
def softmax(matrix) : # softmax 함수
maximum_of_matrix = np.max(matrix)
difference_from_maximum = matrix - maximum_of_matrix
exponential_of_difference = np.exp(difference_from_maximum)
sum_of_exponential = np.sum(exponential_of_difference)
y = exponential_of_difference / sum_of_exponential
return y
def get_data(): # mnist 데이터를 불러옴. 여기서는 이 중에 test 변수만을 사용할 것이다.
(image_train, label_train), (image_test, label_test) = load_mnist(flatten=True, normalize=False)
return image_test, label_test
def init_network() : # sample_weight 를 불러와서 신경망 구성
with open('./dataset/sample_weight.pkl', 'rb') as f:
network = pickle.load(f)
return network
def predict(network, x) : # 테스트 케이스들을 테스트
# hidden data 2개
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) + b3
y = softmax(a3)
return y
images, labels = get_data()
network = init_network()
accuracy_cnt = 0
for i in range(len(images)) : # 각 테스트 케이스들에 대해
y = predict(network, images[i]) #실행 결과 output 10개가 나온다
#각 0~9 별로 비슷 정도에 대한 수치이다
p = np.argmax(y) # 가장 가능성이 높은(값이 큰) 것을 선택
if p == labels[i] : # 실제 값과 비교하여, 예측과 실제가 맞으면 카운트
accuracy_cnt += 1
print("Accuracy: " + str(float(accuracy_cnt) / len(images)))
[출력]
Accuracy: 0.9207
위의 코드는 하나의 테스트 케이스에 대한 처리이며,
여러 개의 테스트 케이스를 한 번에 처리하는 배치 처리를 구성할 수도 있다.
#배치처리
images, labels = get_data()
network = init_network()
batch_size = 100
accuracy_cnt = 0
for i in range(0, len(images), batch_size) :
x_batch = images[i:i + batch_size] #배치 크기만큼씩 이미지를 불러온다
y_batch = predict(network, x_batch)
p = np.argmax(y_batch, axis=1)
accuracy_cnt += np.sum(p == labels[i:i+batch_size])
print("Accuracy: " + str(float(accuracy_cnt) / len(images)) )
[출력]
Accuracy: 0.9207
+++++
내가 마시고 있는 생수는 안전한 생수일까?
15년도부터 생수 수질기준 부적합 판정을 받은 이력을 확인할 수 있는 앱, <바른생수>를 출시하였습니다.
관심 한번씩만 부탁드립니다 ^^
반응형
'개발 > AI' 카테고리의 다른 글
[머신러닝] MNIST 사용 기초 - Dataset 가져와서 조회하기 (1) | 2020.01.22 |
---|
Comments