1

는 : 왜 신경 네트워크에서 이상한 결과가 나옵니까? 내가 PyBrain를 사용하여 간단한 신경망을 만든

from pybrain.tools.shortcuts import buildNetwork 
from pybrain.datasets import SupervisedDataSet 
from pybrain.supervised.trainers import BackpropTrainer 

    L_Z = [ 
    0b111111, 
    0b000010, 
    0b000100, 
    0b001000, 
    0b010000, 
    0b111111 
    ] 

C_Z = [ 
    0b111111, 
    0b100001, 
    0b000110, 
    0b000001, 
    0b100001, 
    0b111111 
    ] 

net = buildNetwork(6, 3, 1) 


ds = SupervisedDataSet(6, 1) 

ds.addSample(tuple(L_Z), (1,)) 
ds.addSample(tuple(C_Z), (0,)) 

trainer = BackpropTrainer(net, ds) 
trainer.trainUntilConvergence() 


print net.activate(L_Z) 
print net.activate(C_Z) 

그러나 모든 프로그램 실행 후

는 다른 결과를 보여줍니다. 내 네트워크는 영어 'Z'문자와 키릴 문자 'Â'문자를 찾는 법을 배워야합니다. 뭐가 잘못 되었 니?

답변

2

당신의 접근 방식은 근본적으로 올바르지 않습니다. 입력이 6 개인 네트워크는 각 입력이 0에서 1로 갈 수있는 부동 소수점 숫자임을 의미합니다. PyBrain은 값이 너무 높거나 낮을 때 알려주지 않습니다. 예를 들어 0b111111은 실제로 63입니다. 각 감지 셀에 대한 입력을 원하면 36 개의 입력이있는 네트워크를 사용해야합니다. 당신은 단지 그것을 정상적으로 충돌 할 두 가지 예를 제공하는 경우

L_Z = [ 
    1,1,1,1,1,1, 
    0,0,0,0,1,0, 
    0,0,0,1,0,0, 
    0,0,1,0,0,0, 
    0,1,0,0,0,0, 
    1,1,1,1,1,1 
    ] 

C_Z = [ 
    1,1,1,1,1,1, 
    1,0,0,0,0,1, 
    0,0,0,1,1,0, 
    0,0,0,0,0,1, 
    1,0,0,0,0,1, 
    1,1,1,1,1,1 
    ] 

net = buildNetwork(36, 3, 1) 


ds = SupervisedDataSet(36, 1) 

ds.addSample(L_Z, [1]) 
ds.addSample(C_Z, [0]) 

trainer = BackpropTrainer(net, ds) 

for x in range(1000): 
    trainer.train() 

print net.activate(L_Z) 
print net.activate(C_Z) 

가 난 놀라지 .trainUntilConvergeance()가 작동 중이은, 일반적으로는, 검증을 위해 별도로 데이터의 1/4을 둔다. 어떤 경우이 코드는 원하는 결과를 얻을 수 있지만 일반적으로 컴퓨터 비전을 시도하는 경우에는 여러 가지 방법을 조합하여 사물을 탐지합니다.

0

신경망은 수렴하는 임의로 초기화되는 벡터입니다. 그러나 모델에 따라 각 셀은 상위 레이어의 모든 다른 셀과 연결되어 있으므로 순서가 없음을 의미합니다.

는 =>는은 (대략적으로 말하자면) 인스턴스

이 플러스가 시작된다는 사실 랜덤 준다 값 A, B와 신경망, C가 B, C, A와 C, B에 해당 당신의 답 : 많은 모델들이 문제에 대한 해결책이 될 수 있으며 반복되는 반복이 매번 반복 될 때마다