not batch를 쓸 경우 아래 코드에서 loss_val()이 줄어드는 것을 보고 의문점이 생겼다.
즉, loss_val에서는 트레이닝 데이터의 마지막 행을 가지고 loss를 보는 것이다.
이 값이 감소되는 추세인 상황에 전체 트레이닝 데이터의 loss_val을 찍어보니 그렇게 작은 값은 아니었다.
이전까지의 학습에서는 전체 트레이닝 데이터에 대해서 loss가 0점대로 진입해야 되는 것으로 알고 있었기 떄문에
트레이닝 데이터의 마지막 행에 대한 loss가 작아지면서 전체 트레이닝 데이터의 loss도 0점대로 진입해야 할 것으로 생각했다.
하지만 다르게 생각해보면 트레이닝 데이터 마지막 행을 학습하는 과정 이전에 몇백개의 데이터를 거쳐서 나온 W, b 들을 사용하여 마지막 행의 feed_forward를 거쳐 로스를 구하는 거기 때문에 이것이 줄어든다는 것은 잘 학습한다는 의미도 내포한다.
왜냐하면 epoch 1 에서 마지막 행의 로스가 1이었다가 epoch 2에서 감소되리라는 보장은 없다. 즉, epoch의 진행에 따라 증가되어 돌아올 수도, 감소되어 돌아올 수도 있다. 하지만 감소되어 돌아왔다는 것은 잘 학습이 되고 있으며 마지막 행의 데이터에 대해 loss가 굉장히 작다는 것은 잘 학습된(= loss가 작은) W, b를 계산해낸 상태라고도 볼 수 있다.
따라서, 마지막 행의 로스를 파악하는 상황에서는 전체 행에 대한 로스의 감소 추세는 크게 중요하지 않다.
아래 출력은 마지막행의 loss와 전체 트레이닝의 loss를 나타낸다.
테스트 했던 코드
'딥러닝(deep learning) > 인공신경망(Neural Network)' 카테고리의 다른 글
머신러닝 이용 중 발생하는 빅데이터 처리 (0) | 2019.07.26 |
---|---|
seperate function, normalize function (0) | 2019.07.25 |
행렬의 계산 성능 개선 (0) | 2019.07.24 |
W2와 W3가 독립적인가? (0) | 2019.07.23 |
오버피팅 해결 기본적 방법 2가지 (0) | 2019.07.23 |