서론

가끔은 동작하는 코드를 만드는게 끝이 아닐 때도 있다.

분명 잘 돌아가기도 하고, 더 건드릴 일이 없어 보이는 코드는 그냥 코드 베이스 어딘가에 묻어둬도 되지만…

내가 마음에 안든다. 리팩토링해주자.

리팩토링

코드가 작동은 근사하게 하는데 코드 자체는 근사하지 않으면 안되지 않을까.

일단 적극적으로 활용할 것은-

파이썬에서는 다중 상속이 허용된다는 점이다.

이걸 이용하면 조금 더 깔끔하게 만들 수 있는 여지가 있다.

내부에서 trainable한 param들을 찾아야 하는 클래스가 둘 있는데, 하나는 Model이고 하나는 Layer다.

이 둘에는 그렇기에 공통된 코드가 들어있다. 이를 밖으로 빼주고, 하나의 클래스로 만들어서, 둘 다 상속하게 해주자.

코드 중복도 없고 깔끔한 코드가 됐다.

그 말고도 구현 상의 이것 저것을 생각해서 코드 수정이 조금 있었다.

내 눈엔 이제 코드가 꽤 깔끔하고 근사해 보인다.

예컨데, 이전엔 3개의 Tensor를 저장한 리스트 두개, 그리고 여러 번의 행렬곱과 activition 적용을 포함한 단순하지만 조금 더러웠던 모델은 다음 코드와 같아졌다.

model = SequentialModel([
    LinearLayer(1, 10, name="L1", activation=ReLU),
    LinearLayer(10, 10, name="L2", activation=ReLU),
    LinearLayer(10, 1, name="L3"),
])

거기다가 이름까지 근사하게 붙여준다.

다음 시간

코드도 근사해졌으니, 다음에는 다른 레이어들을 한번 구현해보자.

예컨데, Convolution 레이어 같은거 말이다.

Convolution 레이어가 잘 작동하는지 확인해보려면 MNIST같은거라도 돌려봐야 하나?

Conv 레이어를 다음 시간에 (될 수 있으면) 구현하고, MNIST를 다다음시간에 한번 돌려보자.

데이터셋을 여기와 맞추는 것도, 혹은 데이터셋을 받아오는 것도 조금 걸릴 것이다.