0

뉴런 네트워크를 학습하여 2 차원 문자 속도를 제어하려고합니다. x와 y는 -1 ~ 1 m/sec 사이입니다. 현재 나는 범위를 0.1m/sec 간격으로 나누었으므로 40k 출력 뉴런으로 끝나는 0.01의 정확도를 높이면 400 개의 출력 뉴런 (20 x 값 * 20 y 값)으로 끝납니다. 출력 뉴런의 수를 줄이는 방법이 있습니까?출력 뉴런 수 감소

+4

디자인 할 네트워크에 대해 더 자세히 설명해 주시겠습니까? 왜 각 차원에 대한 예상 속도를 나타내는 연속 출력을 갖는 2 개의 출력 뉴런 (x에 하나, y에 하나)을 사용합니까? –

+1

@MatthewSpencer, 지속적인 출력이란 무엇입니까? 분류 대신 예측 문제로 취급한다는 의미입니까? 출력 레이어를 두 개의 뉴런으로 줄여 출력을 엔진에 직접 공급합니까? –

+0

Greeness의 대답은 내가 묻기를 시도한 것의 강력한 예입니다. 아래의 해답은 -1에서 1의 출력 범위로 두 개의 출력으로 나누어 문제를 단순화합니다. –

답변

3

나는이 문제를 분류 문제로 간주한다고 가정합니다. 교육 시간에 X을 입력하고 Y을 출력했습니다. 당신이 분류 신경망을 훈련하고 있기 때문에, 당신의 예상 출력은 같은 항상 :이다

-1 -0.9 ... 0.3 0.4 0.5 ... 1.0 m/s 
Y1 = [0, 0, ..., 1, 0, 0, ..., 0] // speed x component 
Y2 = [0, 0, ..., 0, 0, 1, ..., 0] // speed y component 
Y = [Y1, Y2] 

: x와 y 방향의 속도 성분의 각 뉴런 출력 1의 하나; 다른 모든 뉴런은 0을 출력합니다 (위 예제에서 예상되는 출력은 x 방향으로 0.3m/s이고 y 방향으로 0.5m/s입니다). 실제로 이것은 배우기가 쉽고 예측 성능이 좋습니다. 그러나 당신이 지적했듯이, 그것은 확장되지 않습니다.

문제를 회귀 문제로 처리 할 수 ​​있다고 생각합니다. 네트워크에서 각 속도 구성 요소에 대해 하나의 뉴런이 있습니다. 예상 출력은 다음과 같습니다.

Y = [0.3, 0.5] // for the same training instance you have. 

출력 범위를 -1에서 1로 설정하려면 출력 레이어의 활성화 기능에 대한 옵션이 다릅니다. (-1,1) 인 - 2 * (0.5 S 상 (X))는 예를 들어,

f(x) = 2 * (Sigmoid(x) - 0.5) 
Sigmoid(x) = 1/(1 + exp(-x)) 

이후 sigmoid (X)를 사용하여 (0,1)이다. 이 변경 (출력 레이어의 여러 뉴런을 두 개의 뉴런으로 대체)은 모델의 복잡성을 크게 줄이므로 피팅 미달을 피하기 위해 중간 레이어에 더 많은 뉴런을 추가 할 수 있습니다.

관련 문제