딥러닝 EXPRESS 07장 연습문제

2022. 4. 30. 01:30Study/딥러닝

반응형

 

책정보

 

제목 : 딥러닝 EXPRESS

저자 : 천인국

출판사 : 생능출판사

출판일 : 2021년 07월 16일

 

구매하기

 

예스24 - https://click.gl/nk9VvW

교보문고 - https://click.gl/2Sqg6V

 

필기노트

 

※ 직접 풀이한 문제이며, 정확한 답이 아님을 알려드립니다.

 

1. 풀 배치는 모든 훈련 데이터를 훈련한 뒤 오차값의 평균을 구해 가중치를 변경하는 방식으로, 항상 일관된 값을 얻을 수 있다. 이는 전체 샘플을 학습시키므로 데이터가 큰 경우 상당한 시간이 소요됨.

온라인 학습은 무작위의 데이터를 처리할 때 마다 가중치가 변경되며, 이를 통해 즉각적인 학습이 가능하나, 샘플에 따라서 결과가 크게 달라진다.

 

2. 데이터의 크기가 클 경우 배치 크기는 1보다 크고 훈련샘플보다 작은 값으로 설정해야한다. (1<배치크기<샘플크기)

샘플의 크기와 비슷하게 할 경우 시간이 오래걸리며, 메모리에 들어가지 않을 수 있으며, 반대로 1과 비슷할 경우 계산시간이 많이 걸리며, 잡음에 취약해질 수 있다.

 

3. 배치3, 입력2, 은닉4, 출력2 신경망의 행렬 표기법, 행렬 표기법의 미니배치는?

입력2 : x1, x2

은닉4 : h1, h2, h3, h4

출력2 : y1, y2

가중치 : w1(x1->h1), ... , w4(x1->h4),

             w5(x2->h1), ... , w8(x2->h4),

            w9(h1->y1), w10(h1->y2),

            w11(h2->y1), w12(h2->y2),

            w13(h3->y1), w14(h3->y2),

            w14(h4->y1), w16(h4->y2)

바이어스 : b1~b16

입력 총합 : z1~z4(x->h), z5~z6(h->z)

활성화 함수 : a1~a4(x->h), a5~a6(h->z)

 

A = 활성화 함수가 적용된 값

B = 바이어스

H = 은닉층

W = 가중치

X = 입력층

Y = 출력층

Z = 입력 총합

( 1. 입력->은닉, 2. 은닉->출력)

 

Z1=W1*X+B1

H = A1 = f(Z1) = f(W1*X+B1)

 

Z2=W2*H+B2

Y = A2 = f(Z2) = f(W2*H+B2)

 

Y =[

f(z5(1)+z6(1)) # = Z2(1)

f(Z2(2)) # =z5(2)+z6(2)

f(Z2(3))

]

(가로 안에 숫자는 순서, 괄호와 괄호 안의 숫자는 윗첨자)

 

일단 이게 행렬 표기법인지 모르겠지만, 미니배치는 여러개의 샘플이 표시되면 괄호와 괄호안에 숫자를 넣어 윗첨자로 표기한다.

 

4. 하이퍼 매개변수란 기존의 매개변수(가중치와 바이어스)와 혼동하지 않으려고 하이퍼 매개변수가 되었다. 종류에는 은닉층의 개수, 유닛 개수, 학습률, 모멘텀, 미니 배치 크기, 에포크 수가 있다.

 

5. 그리드 검색이라고 하이퍼 매개변수를 가장 좋은 조합을 찾아주는 알고리즘이 있다. 단점으로 후보가 많으면 각각 비교해야 하기 때문에 시간이 매우 오래 걸린다.

 

6. 학습률이 작으면 시간이 오래걸리고 지역 최소점에 걸릴 수 있다. 반대로 너무 크면 손실함수 값이 오히려 더 커질 수 있다. 학습률을 결정할 때는 현재 그래디언트 값이나 가중치의 값을 고려하여 학습률을 동적으로 결정해야한다. 많이 사용되는 알고리즘으로 RMSprop, Adam이 있다.

 

7. 위와 같이 작으면 변화가 적어 시간이 오래 걸리고 크면 변화가 커서 학습에 실패한다.

 

8. 가능하다. 레이어를 하나만 쌓으면 된다.

 

9. 은닉층이 2개인 모델이 정확도 0.982, 1개인 모델이 0.980으로 2개인 모델이 미세하게 정확하다.

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

(train_images,train_labels),(test_images,test_labels)=tf.keras.datasets.mnist.load_data()
#plt.imshow(train_images[0],cmap="Greys")

model=tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(512,input_shape=(784,),activation="relu"))
#은닉층 추가
#model.add(tf.keras.layers.Dense(512,activation="relu"))
model.add(tf.keras.layers.Dense(10,activation="sigmoid"))
model.compile(loss="mse",optimizer="rmsprop",metrics=["accuracy"])


train_images=train_images.reshape((60000,784))
train_images=train_images.astype("float32")/255.0

test_images=test_images.reshape((10000,784))
test_images=test_images.astype("float32")/255.0

train_labels=tf.keras.utils.to_categorical(train_labels)
test_labels=tf.keras.utils.to_categorical(test_labels)

model.fit(train_images,train_labels,batch_size=128,epochs=5)

test_loss,test_acc=model.evaluate(test_images,test_labels)
print("테스트 정확도: ",test_acc)

history=model.fit(train_images,train_labels,epochs=5,batch_size=128)
loss=history.history["loss"]
acc=history.history["accuracy"]
epochs=range(1,len(loss)+1)

plt.plot(epochs,loss,"b",label="Training Loss")
plt.plot(epochs,acc,"r",label="Accuracy")
plt.xlabel("epochs")
plt.ylabel("loss/acc")
plt.show()

 

10. RMSprop : 0.979, Adam 0.977, Adadelta 0.232, Adagrad 0.505

RMSprop가 가장 좋음.

 

11. 패스

12. 패스

13. 패스

14. 패스

 

 

반응형