Model과 Layer 만들기 8
서론
본격적으로 구현해보자.
이게 제대로 작동하리라는 기대는 없다.
어딘가 잘못된 부분이 있을 것이라는 기대가 크다.
구현 - 전처리
워크플로 순서를 생각해보면… 일단 전처리를 해야 한다.
0~255 사이의 값을 0~1 사이의 float값으로 바꿔주자.
솔직히 말이 복잡하지 실제로는 그냥 255로 나눠주기만 하면 된다. 간단하게 해결.
구현 - 모델
대충 두 층 정도 쌓아서 그 뒤에 Dense 하나정도 두면 되려나?
생각해보니까 필요한 요소를 하나 빼트렸다. Flatten 함수/레이어다. 만들어주자.
편의상으로 numpy.ravel을 사용하자.
그리고 나니까 Flatten Layer 그 자체의 코드는 좀 극단적으로… 단순하다.
class FlattenLayer(Layer):
def __init__(self, name:str="Flatten"):
self.name = name
def apply(self, x:Tensor) -> Tensor:
return np.ravel(x)
다른 중요한 처리는 다른 부분에서 다 하기 때문에 좀 많이 단순해질 수 있는 것 같다.
Convolution - 더 생각해야할 것
으음… 이미지 하나짜리 Convolution은 저번에 마무리지었는데, 생각해보니까 이미지 여러개의 Convolution을 처리해줘야한다.
일단 지금 만들어둔 인덱스를 모두 마이너스 인덱스로 대체하고 잘 굴러가길 빌어보자.
라고 하려고 했는데 너무 인덱스를 여기저기 많이 쑤셔넣어뒀다. 이대로는 잘 안굴러갈 것이다.
일단… 임시방편으로 Convolution 레이어에 for문을 넣어주자. 느려도 일단 돌아갈 것이다.
아니 생각해보니까 이것도 잘 안될 것 같다.
그래서 결국엔 마이너스 인덱스와 코드 수정, 그 외의 이것 저것 개판을 욱여넣어서 어떻게든 돌아가게 해뒀다.
Ravel의 구현…
내 맘대로 바꿔줘도 어딘가 고장나진 않겠지?
전체를 Flatten해주는 대신, 한 차원 아래를 flatten해서 2차원으로 돌려주자.
원래 이런 식으로 하면 안된다. My god.
일단 여기까지 하고 다음에 뭔가 잘못된 부분을 수정해보자. 아마 엄청 많을꺼다. 잘못된 부분.