2010-10-14 36 views
7

Tôi đang cố gắng thêm vào mã cho một mạng nơron một lớp có bitmap làm đầu vào và có 26 kết quả đầu ra cho khả năng của mỗi chữ cái trong bảng chữ cái.Mạng nơ-ron để nhận dạng chữ

Câu hỏi đầu tiên tôi có liên quan đến một lớp ẩn duy nhất đang được thêm vào. Tôi có đúng khi nghĩ rằng lớp ẩn sẽ có bộ giá trị đầu ra và trọng số riêng của nó không? Nó không cần phải có sự thiên vị riêng của nó '?

Tôi cũng có thể xác nhận rằng tôi đang suy nghĩ về khía cạnh feedforward chính xác không? Dưới đây là một số mã giả:

// input => hidden 
for j in hiddenOutput.length: 
    sum=inputs*hiddenWeights 
    hiddenOutput[j] = activationFunction(sum) 
// hidden => output 
for j in output.length: 
    sum=hiddenOutputs*weights 
    output[j] = activationFunction(sum) 

Giả sử điều đó là đúng, đào tạo sẽ giống như thế này?

def train(input[], desired[]): 
    iterate through output and determine errors[] 
    update weights & bias accordingly 
    iterate through hiddenOutput and determine hiddenErrors[] 
    update hiddenWeights & (same bias?) accordingly 

Cảm ơn bạn đã được trợ giúp, tôi đã đọc rất nhiều ví dụ và hướng dẫn và tôi vẫn gặp khó khăn khi xác định cách thực hiện mọi thứ chính xác.

+4

Đây có phải là bài tập về nhà không? Nếu có, vui lòng gắn thẻ như vậy. Có hay không, thử nghiệm; Tôi đã học tấn từ những thất bại của tôi trong mô phỏng mạng thần kinh giới thiệu. Nó không giống như bạn sẽ vô tình tạo ra SkyNet và sự suy giảm của loài người hay sumptin. – msw

+1

có, hiện đã được gắn thẻ.Tôi đã thử nghiệm nhưng tiếc là trạng thái hiện tại đang hoạt động cực kỳ kém nên tôi rõ ràng đang làm sai điều gì đó – dylan

Trả lời

1

Dylan, điều này có thể lâu sau khi bài tập về nhà của bạn đến hạn, nhưng tôi có một vài suy nghĩ về những gì bạn đã đăng.

  • Làm cho lớp ẩn lớn hơn nhiều so với kích thước của bitmap đầu vào.
  • Bạn nên có các trọng số và độ lệch khác nhau từ đầu vào -> ẩn so với ẩn -> đầu ra.
  • Dành nhiều thời gian cho chức năng lỗi của bạn (phân biệt đối xử).
  • Hiểu rằng lưới thần kinh có xu hướng bị khóa nhanh vào một tập hợp các trọng số (thường là không chính xác). Bạn sẽ cần phải bắt đầu lại và đào tạo theo một thứ tự khác.

Điều tôi học được về lưới thần kinh là bạn không bao giờ biết tại sao chúng hoạt động (hoặc không hoạt động). Điều đó một mình là lý do để giữ nó ra khỏi cõi y học và tài chính.

+0

Nếu tôi không nhầm lẫn vấn đề chính với mạng thần kinh ở đây là không có cách nào để tìm một tối thiểu' cho các chức năng lỗi. Áp dụng 'impulse', 'tỷ lệ học tập thích ứng' và những người khác có thể giúp tìm kiếm tối thiểu nhanh hơn, nhưng bạn không bao giờ có thể hiển thị nếu đó là mức tối thiểu toàn cầu. Điều này có nghĩa, người ta phải bắt đầu lặp đi lặp lại với các cách tiếp cận khác nhau và cố gắng tìm mức tối thiểu chấp nhận được - sao cho mạng hoạt động đúng. – displayname

0

bạn có thể muốn đọc http://www.ai-junkie.com/ann/evolved/nnt1.html. ở đó nó đề cập chính xác điều gì đó về những gì bạn đang làm. Nó cũng cung cấp mã cùng với một lời giải thích đơn giản (chủ yếu) về cách nó học. Mặc dù khía cạnh học tập hoàn toàn khác với nguồn cấp dữ liệu về phía trước nhưng điều này hy vọng sẽ cung cấp cho bạn một số ý tưởng về bản chất của NN.

Đó là niềm tin của tôi rằng ngay cả các lớp ẩn và đầu ra cũng phải có độ lệch.

Ngoài ra NN có thể phức tạp, trước tiên hãy thử chỉ xác định 1 chữ cái. Nhận tín hiệu cao/thấp nhất quán từ chỉ một đầu ra duy nhất. Sau đó, cố gắng giữ tín hiệu đó với các biến thể khác nhau của cùng một chữ cái. Sau đó, bạn có thể tiến bộ và thêm nhiều hơn nữa. Bạn có thể làm điều đó bằng cách dạy 26 mạng khác nhau chỉ cho kết quả đầu ra trên một trận đấu. Hoặc có thể bạn tạo nó thành một NN lớn với 26 kết quả đầu ra. Hai cách tiếp cận khác nhau.

Các vấn đề liên quan