저는 MNIST 데이터 세트에서 기계를 학습 할 수있는 파이썬으로 간단한 CNN 프로그램을 구현했습니다. 나는 3 층 구현했습니다 : 완전히 연결 숨겨진 레이어를 기본적으로 네트워크의 softmax를 출력을 제공 평균 풀링을 파이썬을 사용한 프레임 워크없는 CNN 구현으로 변경합니다.
- ConvPoolLayer을
ConvPoolLayer에 평균 풀링을 구현했습니다. 여기에 앞으로 전파하는 동안 풀링을 의미합니까 코드 줄의 :
# 'activation' is a numpy array of 3D activations from the convolutional code (not shown here)
skimage.measure.block_reduce(activation, block_size=(1, 1, 2, 2), func=np.mean)
는 그리고 여기에 해당하는 역 전파 코드입니다 :
# delta is a numpy array of 3D error matrices back-propagated from the upper layers
delta = delta.repeat(2, axis=2).repeat(2, axis=3)
그냥 오류를 업 스케일링되어하고있어 모두.
내 질문은 어떻게 성능 저하없이 최대 풀링을위한 backpropagation을 구현합니까? 또는 함수 호출없이이 작업을 수행하는 더 좋은 방법이 있습니까? 평균 풀링을 사용하여 몇 번 반복 한 후 ~ 90-95 %의 정확도를 얻었으므로 최대 풀링이 성능에 미치는 영향을보고 싶습니다.
여기에 적용 할 수있는 NumPy 트릭이 있다면, 그것들을 배우게되어 기쁩니다. CNN에서 일어나는 일, 왜 일하는 방식, 그리고 작업을 최적화 할 수 있는지에 대해 이해하고 싶습니다. 따라서 프레임 워크를 사용하는 것은 나를위한 선택 사항이 아닙니다.
도움 주셔서 감사합니다.
당신은 FUNC = np.max이이 정확히 최대 풀링을 어떻게해야되지 않습니다. 그리고 func = np.mean은 평균 풀링을할까요? – taarraas
문제는 max-pooling 오류를 역 전파합니다. 오류를 업 스케일링 할 때 올바른 색인으로 오류를 전송해야합니다. –