본문 바로가기

implement_ml_models

(94)
implement_CNN(pooling) 풀링층은 보통 합성곱층의 바로 뒤에 배치된다. 풀링층을 구성하는 유닛은 복잡 세포를 모형화한 것으로, 합성곱층에서 추출한 자질의 위치 감도를 약간 저하시켜 대상이 되는 자질값의 이미지 내에서의 위치가 조금씩 변화하는 경우에도 풀링층의 출력이 변화하지 않도록 해준다. 더보기 시각 피질은 신경세포의 감수 영역 eeceptive field 의 국소성과 단순 세포 simple cell, 복잡 세포 complex cell 로 이뤄진다. 그리고 일반적으로는 감각기관으로부터 입력을 받는 신경세포에 대해서, 그 세포가 입력을 받는 감각기관상의 범위를 감수 영역이라고 부른다. 외부로부터 눈에 들어온 빛은 망막에서 전기적인 신호로 변환된 뒤, 뇌의 시각피질로 전달된다. 그곳에 있는 세포 중에는 망막의 특정 부분이 특정 패..
impelment_CNN(stride) 필터가 적용되는 위치를 1픽셀이 아닌, 여러 픽셀씩 움직이며 계산하는 경우도 있다. 이 필터의 적용 위치 간격을 스트라이드라 부른다. 스트라이드 값을 s라고 했을 때 출력 이미지의 픽셀값은 다음과 같이 계산되며, 출력 이미지의 크기는 약 1/s 배가 된다. 출력 이미지의 정확한 크기는 다음과 같이 계산된다. 크기가 큰 입력 이미지를 다룰 때, 출력쪽 유닛 수가 너무 많아지는 것을 막기 위해 2 이상의 스트라이드 값을 적용하는 경우가 있다. 그러나 이는 이미지의 특징을 놓칠 가능성을 의미하여, 일반저긍로 성능을 악화시키는 방향으로 경우가 많아 피하는 것이 좋다. input = np.random.random(16).reshape(4,4) input >>> array([[0.44347376, 0.2901762..
implement_CNN(padding) 합성곱은 이미지에 필터를 겹쳤을 때, 이미지와 필터가 겹쳐지는 픽셀끼리 곱을 구하여 필터 전체에서 그 값을 합하는 연산이다. 따라서 이미지로부터 필터가 벗어나는 위치에 적용하는 것은 불가능하다. 필터 전체가 이미지 내에 포함되는 상태를 유지하면서 필터를 움직여 갈 때, 합성곱 계산의 결과 이미지 크기는 입력 이미지 크기보다 작아지게 된다. 이때 그 크기는 다음으로 나타낼 수 있다. 소수점 이하를 버리고 정수화하는 연산자, 5*5 크기의 입력 이미지에 크기가 3*3 인 필터를 합성곱한 결과는 3*3이 된다. 합성곱한 결과 이미지가 입력 이미지와 크기가 같으면 편리할 때가 많다. 이런 경우 입력 이미지의 바깥쪽에 폭 H/2 만큼 테두리를 둘러 크기를 늘려 출력 이미지의 크기가 원래 입력 이미지와 같은 크기가..
implement_CNN(basic) 합성곱 신경망은 입력 쪽에서 출력 쪽을 향해 합성곱층과 풀링층이 쌍을 이루며, 이 쌍이 여러 번 반복된다. 합성곱 이미지 사이즈를 W * W 라고 했을 때, 픽셀을 인덱스 (i,j) 로 나타내기로 한다. 필터라는 작은 크기의 이미지를 상정하고, 그 크기를 H * H 라고 하자. 이미지의 합성곱이란, 이미지와 필터 사이에 정의되는 다음과 같은 연산이다. 합성곱의 작용 이미지의 합성곱은 필터의 명암 패턴과 유사한 명함 패턴이 입력된 이미지 어디에 있는지를 검출하는 작용을 한다. 즉, 필터가 나타내는 특징적인 명암 구조를 이미지로부터 추출하는 작용을 한다. # 입력 데이터 생성 input = np.random.random(16).reshape(4,4) input >>> array([[0.69630105, 0...
implement_delta(before_w)(2) 2022.12.05 - [implement_ml_models] - implement_delta(before_w) implement_delta(before_w) 2022.12.05 - [implement_ml_models] - implement_rnn(result_w) implement_rnn(result_w) 2022.12.05 - [implement_ml_models] - implement_rnn(delta2) implement_rnn(delta2) 2022.12.04 - [implement_ml_models] - implement_rnn(delta) implement_rnn(delta) 2022.12.03 teach-meaning.tistory.com 2022.12.05 - [implement_ml_..
implement_delta(input_w)(2) 2022.12.05 - [implement_ml_models] - implement_delta(input_w) implement_delta(input_w) input_w 3개의 입력, 4개의 출력의 rnn 모형, 입력의 변화량에 대한 오차 함수의 변화량을 계산하기 위해 입력의 각 값이 오차 함수에 미치는 영향을 계산할 수 있어야 한다. 그러기 위해선 hidden 층 teach-meaning.tistory.com 이전 글에서는 가중치 변화량이 아닌 델타 값에 필요한 계산으로 델타값에 입력의 변화에 따른 오차 함수의 변화량인 해당 가중치를 곱했다. 수정하여, 가중치 변화에 따른 오차 함수의 변화량을 구하기 위해 입력값을 곱해줘야 한다. hidden_delta >>> array([[-6.011489246726..
implement_delta(before_w) 2022.12.05 - [implement_ml_models] - implement_rnn(result_w) implement_rnn(result_w) 2022.12.05 - [implement_ml_models] - implement_rnn(delta2) implement_rnn(delta2) 2022.12.04 - [implement_ml_models] - implement_rnn(delta) implement_rnn(delta) 2022.12.03 - [implement_ml_models] - implement_RNN(hidden_activation) implement_RNN(hidden_activ teach-meaning.tistory.com result_w 의 변화량 계산에 사용한 은닉층 델타값..
implement_delta(input_w) input_w 3개의 입력, 4개의 출력의 rnn 모형, 입력의 변화량에 대한 오차 함수의 변화량을 계산하기 위해 입력의 각 값이 오차 함수에 미치는 영향을 계산할 수 있어야 한다. 그러기 위해선 hidden 층의 각 노드들의 변화에 따른 오차 함수 변화량을 계산한다. """ 예측 노드의 델타, 오차 함수의 미분값과 동일하다.(활성화 함수로 항등 함수를 사용했기 때문) """ err = Error() result_delta = err.d_RMSE(target, rnn_result) result_delta >>> array([[-7.21796270457583], [-11.7894651708755], [-13.5141551932380], [-14.7648163502944]], dtype=object) #예측..