하스켈에서 신경 네트워크를 구현하려고합니다. 이 네트워크는 일시적으로 인식되므로 타임 스텝은 기능의 중요한 부분입니다. 너무 많은 정보를 필요로하지 않고, 시간이 지남에 따라 네트워크를 실행의 내 일반적인 구현은 다음과 같습니다Haskell에서 시스템을 모델화하는 방법
foldM stepNetwork initialNetwork (zip images labels)
아이디어는 각 시간 단계가 하나 개 이상의 이미지/라벨 쌍을 배운 새로운 네트워크를 생성하는 것입니다. 그러나 이러한 접근 방식은 이전 네트워크의 정보를 기억하려고 시도하는 일부 중대한 데이터 구조로 이어집니다. 여기 내 숨겨진 층 구조입니다 :
data HiddenLayer = HiddenLayer { hResponse :: Response
, hOldResponse :: Response
, hNeurons :: [YNeuron]
} deriving Show
내 현재 stepNetwork 기능에 가깝다 :
stepNetwork (Network x y z) = Network newX newY newZ
where
newX = stepLayer x (hOldResponse y)
newZ = stepLayer z (hOldResponse y)
newY = stepLayer y (currentResponse newX) (currentReponse newZ)
내가 네트워크에 따라 기존의 응답을 가지고 다닐 필요가 싶지 않아요. 다음은 네트워크의 레이어 사이의 관계입니다. 여기에서 X, Y 및 Z는 세 개의 레이어입니다. 이 시간에 민감하므로
는,이 관계를 모델링 할 수있는 좋은 방법이 될 것 FRP 것 같아,하지만 난 그냥 FRP 패러다임이 모델링하는 방법을 모르겠어요. 어떤 충고? 그것은 몇 가지 부작용이 또는 출력 당신이 그것을 모델링 할 수있는 경우
왜 newY = stepLayer y (currentResponse newX) (currentReponse newZ)'라고 쓰지만 다이어그램에'newY = stepLayer y (hOldResponse x) (hOldResponse z)'가 쓰여 있는지 이해할 수 없습니까? – freestyle