재발하는 레이어가 하나 인 네트워크를 컴파일 할 때 문제가 발견되었습니다. 첫 번째 레이어의 차원과 RNN 레이어가 Keras에서 작동하는 방식에 대한 이해가 문제가되는 것 같습니다.Keras 간단한 RNN 구현
내 코드 샘플은 다음과 같습니다
는model.add(Dense(8,
input_dim = 2,
activation = "tanh",
use_bias = False))
model.add(SimpleRNN(2,
activation = "tanh",
use_bias = False))
model.add(Dense(1,
activation = "tanh",
use_bias = False))
오류가
ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
입니다이 오류는 관계없이 input_dim
값이 반환됩니다. 내가 뭘 놓치고 있니?
굉장합니다, 고맙습니다. 추가 질문이 하나 있습니다. 첫 번째 해결책은 완벽하게 작동하지만, 무한한 시간 단계 (이론적 인 질문, 나는 알고있다. 무한한 시간 단계는 어리 석다)를 원한다면? 그런 다음, 첫 번째 레이어의 출력물을 변형하여 두 번째 솔루션을 사용해야합니다. 그러나 XOR을 메모하는 순서로 간단한 테스트를 수행했으며 출력을 섞어서 네트워크가 예상대로 반응하지 않았습니다. 더 나은 결과는 셔플 이전과 동일한 출력을 반환한다는 것입니다. 재 형성이 재발 층의 작업에 얼마나 영향을 주는지 (첫 번째 해결책과 비교했을 때)? – Seraph
재구성 (Reshaping)은 데이터 (모든 데이터)를 취하는데, 이것은 세그먼트로 나뉘어 진 직선의 연속열 이상일뿐입니다. 300 개의 원소가 있다고 가정하십시오. 당신이 (30,10,1)처럼 그들을 바꿀 때, 당신은 방금 다른 방식으로 300 개의 요소를 분리했습니다. 따라서 시퀀스 목적으로 변형하는 경우 달성하려는 목표와 데이터 형식이 무엇인지 생각해야하므로 중요한 형식으로 변형 할 수 있습니다. –
당신의 무한한 시퀀스를 위해서, 단 하나의 샘플'(BatchSize = 1, TimeSteps, Features)'의 입력으로 작업하고,'stateful = True'로 재발행 레이어를 표시해야합니다. 즉, 레이어가 메모리를 유지하고 다음 배치가 이전 배치를 하나의 시퀀스로 계속 유지하는 것으로 간주됩니다. 이 경우 하나의 시퀀스가 끝나고 다른 시퀀스를 공급하기 시작할 때 "메모리 지우기"("재설정 상태"라고 함)를 수동으로 수행해야합니다. –