PyBrain рдФрд░ PyQt4 (Python3) рдкрд░ рд╕рд░рд▓ рд╡рд░реНрдЧреАрдХрд░рдг

Python3 рдХрд╛ рдЕрдзреНрдпрдпрди, рдореИрдВрдиреЗ PyBrain рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛)ред рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред
рдЫрд╡рд┐
рдЕрдм рдореИрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рдЕрднреА рдЕрдЬрдЧрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕рддреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реАрдЦрдирд╛ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рд╢реЛрдХ рдордирд╛ рд░рд╣рд╛ рд╣реИред

рдХреГрддреНрд░рд┐рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ (рдПрдПрдирдПрди) рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ - рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ: рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ред

рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд▓рдЧрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ: "рдХреГрддреНрд░рд┐рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреНрдпрд╛ рд╣реИрдВ?" , "рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЪрд░рд┐рддреНрд░ рдкрд╣рдЪрд╛рди" , рдЖрджрд┐ред
рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЬрдЧрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реИред рдпрд╛рдиреА рдЬрдЯрд┐рд▓ рдФрд░ рдЕрдкрд░рд┐рдЪрд┐рдд рдкрд░ рддреБрд░рдВрдд рд╕реАрдЦреЗрдВред рддреЛ рд╣рдо рдХрдИ рд░реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдмрд╛рд░ рдкрд╛рдПрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ "рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?" рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдн рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЦреЛрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╣реЗрдмреНрд░реИрдЯреИрдЯ рдХреЗ рддрд╣рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдХреИрд╕реЗ PyQt4 рдкрд░ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╡рд░рдг, argparse рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ PyBrain !


рд╣рдм рдкрд░ рдФрд░ рдпрд╣рд╛рдВ рди рдХреЗрд╡рд▓ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдПрдПрдирдПрди рдХреЛ рд▓рд┐рдЦрдирд╛ / рдмрдирд╛рдирд╛ / рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рджреЛ рдЙрдк-рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:

рд╣рдо рдЗрд╕реЗ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рддреЛ рдЙрджрдп рдкрд░ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА


рд╕рдВрджрд░реНрдн рдХреА рд╢рд░реНрддреЗрдВ

рдЖрдЗрдП рдХрд╛рд░реНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ: рдкрддреНрд░ рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░, рдХрд╣реЗрдВрдЧреЗ, 64 рд╕реЗ 64 рдкрд┐рдХреНрд╕реЗрд▓ (рдПрдПрдирдПрди рд╕реЗ рдХреБрд▓ 4096 рдЗрдирдкреБрдЯ)ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдо рдЗрд╕реЗ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдирдкреБрдЯ рд╣реИрдВ:


рдПрдХ рдЫрд╡рд┐ рд╣реЗрд░рдлреЗрд░ рд╡рд┐рдзрд┐ рдвреВрдБрдврдирд╛

рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред Google рдиреЗ рд╣рдорд╛рд░реА рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХреАред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдпрд╛ рддреЛ рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП - рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрдирд╣рд┐рдд рдпрд╛рдЪрд┐рдХрд╛ , рдпрд╛ PyGame ред
рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рджреБрд░реНрднрд╛рдЧреНрдп рд╣реИред рдкрд╣рд▓рд╛ рдХреЗрд╡рд▓ python2 рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдЖрдЦрд┐рд░реА рд░рд┐рд▓реАрдЬрд╝ 2009 рдореЗрдВ рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐ github.com рдкрд░ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдХрд╛рдВрдЯрд╛ рд╣реИ ред рдореИрдиреБрдЕрд▓ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред
PyGame рдПрдХ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореИрдиреБрдЕрд▓ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрдврд╝рддрд╛ рд╣реИред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдирд╛рдЦреВрдиреЛрдВ рдХреЛ рд╣рдереМрдбрд╝рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрд╕реНрдХреЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИред
рдЕрднреА рддрдХ рдЧреБрдЧрд▓реА рдХреАред рдкрд╛рдЗрдердирдордЧрд┐рдХ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╣реИред рдФрд░ рдлрд┐рд░ рдпрд╣ рдореБрдЭ рдкрд░ dawned! PyQt4 !
рдореИрдВ Qt4 рд╕реЗ рдХрд╛рдлреА рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рдореИрдВрдиреЗ C ++ / Qt рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрд╡рд┐рд╕ рдЪрд╛рдХреВ рдХреА рддрд░рд╣ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдмреАрдпрд░ рдХреА рдПрдХ рдмреЛрддрд▓ рдЦреЛрд▓реЗрдВрдЧреЗ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд▓рдХрдбрд╝реА рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдПрдХ рд╕реБрдВрджрд░ рдЖрдХреГрддрд┐ рдХрд╛рдЯ рджреА рдЬрд╛рдПрдЧреАред рдореБрдЦреНрдп рдмрд╛рдд рдЪрд╛рдХреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИред Qt рдФрд░ рд╕реНрдЯреЙрдк рдкрд░ред
Habr├й рдХреА рдЦреЛрдЬ рдиреЗ рд╣рдореЗрдВ PyQt рдкрд░ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рджреАред рдЦреИрд░, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ - рд╣рдо рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред

рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдмрдЪрдд рд▓реЗрдЦрди

рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ PyQt4 рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдкрд╛рдардХ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ - рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдкрд╛рд░рд┐рдд рдХрд░ рджреВрдВрдЧрд╛ред
рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ PyQt4 рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП "рдордЫрд▓реА" рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред
#!/usr/bin/env python3 import sys from PyQt4.QtGui import * from PyQt4.Qt import * def main(): app = QApplication([]) # some code here if __name__ == "__main__": sys.exit(main()) 

app = QApplication([]) рд╕рд╛рде рд▓рд╛рдЗрди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрд╕реЗ рдордд рднреВрд▓рдирд╛ред рдореЗрд░реЗ рдмрд┐рдирд╛, рдЕрдЬрдЧрд░ SIGFAULT рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЕрдм "рд▓реЙрдЬрд┐рдХ" рдХреЛ рд╡рд░реНрдХрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рд╕реЗ рднрд░реЗрдВред рд╕рд╣реЗрдЬреЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред
 def save(png_file, letter = 'A', font = "Arial", size = 40, align = Qt.AlignCenter): img = QImage(64,64, QImage.Format_RGB32) img.fill(Qt.white) p = QPainter(img) p.setPen(Qt.black) p.setFont(QFont(font,size)) p.drawText(img.rect(), align, letter) p.end() img.save(png_file) 


рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдБрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, QImage рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдкрдиреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ / рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓рд╛ рдЙрдкрдХрд░рдгред рд╕рдлреЗрдж рд░рдВрдЧ 64 рдХреА рдкреВрд░реА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП 64 рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рднрд░рд╛ рд╣реИред
рдлрд┐рд░ QPainter рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП img рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреЛ QPaintDevice рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдХреИрдирд╡рд╛рд╕ рдкрд░, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдРрд╕реЗ рд╣реА рдПрдХ рд╡рд░реНрдЧ рд╣реИ QImageред
рдХрд╛рд▓реА рдХрд▓рдо, рдлрд╝реЙрдиреНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдкрддреНрд░ рдЦреАрдВрдЪреЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 40 рд╣реИ (рдЬреЛ рд▓рдЧрднрдЧ рдкреВрд░реЗ рдЫрд╡рд┐ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИ) рдФрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред
рдареАрдХ рд╣реИ, рддреЛ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдЫреВ рдордВрддрд░ рд╣реЛ рдЧрдпрд╛

рдмрд╣реБрдд рдХрдо рдмрдЪрд╛ рд╣реИред рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкред
рдпрд╣ рд╣реЗрдб-рдСрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдПрдХ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде, рдпрд╛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╣рд╛рд░реНрдб-рд╕реЗрдЯрд┐рдВрдЧ рдХрд░рдХреЗ), рдпрд╛ рдЖрдк рдЧреЗрдЯрдЯреЙрдк рдпрд╛ рдЖрд░реНрдЧрдкрд░реНрд╕ рдЬреИрд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдиреНрдирдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ: рдлрд╝реЙрдиреНрдЯ, рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░, рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдХреЗ рд▓рд┐рдП рд╕рдВрд░реЗрдЦрдг рдмреЗрд╣рддрд░ рд╕рдордп рддрдХ рдЫреЛрдбрд╝ рджреЗрдВред
рдЗрд╕ рдореИрдиреБрдЕрд▓ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  p = argparse.ArgumentParser(description='Symbols image generator') p.add_argument('-f','--font', default='Arial', help='Font name, default=Arial') p.add_argument('-s','--size', type=int, default=40, help='Font size, default=40') p.add_argument('-d','--dir', default='.', help='Output directory, default=current') p.add_argument('letters', help='Array of letters(abc) or range (az)') args = p.parse_args() 

рдЗрд╕ рддрд░рд╣ рд╣рдо рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, argparse рдореЙрдбреНрдпреВрд▓ рдмрд╛рдХреА рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЬреЛ рдкрд╕рдВрдж рдЖрдпрд╛ рд╡рд╣ рдерд╛ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрддреНрдкрд╛рджрдиред рд╣рдорд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕ рддрд░реНрдХ рдореЗрдВ рдПрдХ рдФрд░ рддрд░реНрдХ ( -рдПрдЪ) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рдЖрд▓рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдФрд░ рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рдЕрд░реНрдЧрдкрд░реНрд╕ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдорджрдж, рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
 рдЙрдкрдпреЛрдЧ: gen_pic.py [-h] [-f FONT] [-s рдЖрдХрд╛рд░] [-d DIR] рдкрддреНрд░

 рдкреНрд░рддреАрдХ рдЫрд╡рд┐ рдЬрдирд░реЗрдЯрд░

 рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХ:
   рдЕрдХреНрд╖рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (abc) рдпрд╛ рд░реЗрдВрдЬ (az)

 рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ:
   -h, --help рдпрд╣ рдорджрдж рд╕рдВрджреЗрд╢ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ
   -f рдлреЙрдВрдЯ, --font рдлреЙрдВрдЯ рдлрд╝реЙрдиреНрдЯ рдирд╛рдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ = рдПрд░рд┐рдпрд▓
   -S SIZE, - рдЖрдХрд╛рд░ рдЖрдХрд╛рд░ рдлрд╝реЙрдиреНрдЯ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ = 40
   -d DIR, --dir DIR рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА, рдбрд┐рдлрд╝реЙрд▓реНрдЯ = рдХрд░рдВрдЯ

рдЕрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрде рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ! рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ os , os.path рдФрд░ re рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  if os.path.exists(args.dir): os.mkdir(args.dir) if re.match('^([az]-[az])|([AZ]-[AZ])$', args.letters): begin = args.letters[0] end = args.letters[2] if (ord(end)-ord(begin))>26: print("Error using letters. Only AZ or az available, not Az.") p.print_help() return letters = [chr(a) for a in range(ord(begin),ord(end)+1)] else: letters = args.letters 

рдЦреИрд░ рдпрд╣рд╛рдБред рдпрд╣ рдПрдХ рдЪрдХреНрд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрджрд▓реЗ рд╕рднреА рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ - рд╣рдо рд╕реЗрд╡ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдмрдВрдзрди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ saveWrap () рдХрд╣реЗрдВрдЧреЗред рдХрд┐рддрдирд╛ рдореВрд▓ рд╣реИ, рд╣реИ рди? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рднреА рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ () рдлрд╝рдВрдХреНрд╢рдиред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкреВрд░реЗ рдЬрдирд░реЗрдЯрд░ рдиреЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ 55 рд▓рд╛рдЗрдиреЗрдВ рд▓реАрдВ (рдХреЛрдб рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ?
рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдХреЗ рдЧреБрд░реБ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ? рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред рд╕реАрдзреА рдЖрдБрдЦ рдЖрдирдиреНрджрд┐рдд рдХрд░рддреА рд╣реИред

рдПрдПрдирдПрди рд╡рд┐рдХрд╛рд╕



рдЕрдм рдПрдПрдирдПрди рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PyBrain рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВ ред
PyBrain рдФрд░ Python3 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдпрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░
рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди 3 рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ PyBrain рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╣реБрдд рдмрдВрджрд░рдЧрд╛рд╣ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдорд┐рд▓реЗред
рдореИрдВ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рдерд╛ рдЬрд╣рд╛рдБ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╛рд╣рд░ рдЧрд┐рд░рд╛ рдерд╛:
 # FIXME: рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ NaN рдХреЗ рдЙрддреНрдкрд╛рджрди рд╕реЗ arac рд░рдЦрддреА рд╣реИред  рдореИрдВ рдирд╣реАрдВ
 # рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ __str__ рд╡рд┐рдзрд┐
 # ndarray рд╡рд░реНрдЧ рдХреБрдЫ рдареАрдХ рдХрд░рддрд╛ рд╣реИ,
 # str (рдЖрдЙрдЯрд░)

рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдкрд╛рдпрдерди 3 рдореЗрдВ рдпрд╣ рд╣реИрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЗрдирдкреБрдЯ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 0 рд╕реЗ 1 рддрдХ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЪрдордХ рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рдЫрд╡рд┐ (рдЧреНрд░реЗ рдЯрди рдореЗрдВ) рд╣реИред
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдПрдПрдирдПрди рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдХрд┐ рд╕реАрдорд┐рдд рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд╣рдЪрд╛рди рдХрд░реЗрдЧрд╛ред рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЗрди рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЙрдиреНрдЯ (рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, A, B, C, D, Z рдЕрдХреНрд╖рд░ рд▓реЗрдВ ред

рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдХреНрд╖рд░ рд╕реАрдЦреЗрдЧрд╛, рдЬрд┐рдирдХреА рдЫрд╡рд┐рдпрд╛рдБ 64 рд╕реЗ 64 рдкрд┐рдХреНрд╕реЗрд▓ рдЖрдХрд╛рд░ рдХреА рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЗрдирдкреБрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ 4096 рд╣реЛрдЧреА ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░рдорд╢рдГ 5 рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдкрддреНрд░ рд╣реЛрдВрдЧреЗ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╛рдВрдЪ рд╣реИ ред
рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХрд┐рддрдирд╛?
рдореИрдВрдиреЗ рдЫрд┐рдкреА рдкрд░рддреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ:
 net = buildNetwork(64 * 64, 5) 

64 рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рдд рд╕реЙрдлреНрдЯрдореИрдХреНрд╕рд▓реЗрдпрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
 net = buildNetwork(64 * 64, 8 * 8, 5, hiddenclass=SoftmaxLayer) 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓реЗрдЦ рдиреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░реВрдВрдЧрд╛ред
рдмрд┐рд▓реНрдб рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд╛рдЗрдХрдЬрд╝ ()
BuildNetwork () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдлреАрдбрдлрд╝реЙрд░рд╡рд░реНрдб рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рд╣реИ:
 pybrain.tools.shortcuts.buildNetwork(*layers, **options) 

рдкрд░рддреЗрдВ - рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╛ рдЯрдкрд▓ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдореЗрдВ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ
рд╡рд┐рдХрд▓реНрдк " рдирд╛рдо = рд╡реИрд▓ " рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ = рд╕рддреНрдп) - рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рддреЛрдВ рдореЗрдВ рдСрдлрд╕реЗрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ
outputbias (рдбрд┐рдлрд╝реЙрд▓реНрдЯ = рд╕рддреНрдп) - рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рдореЗрдВ рдСрдлрд╕реЗрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ
hiddenclass рдФрд░ outclass - рдХреНрд░рдорд╢рдГ рдЫреБрдкреА рд╣реБрдИ рдкрд░рддреЛрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдиреНрдпреВрд░реЙрдирд▓реЗрдпрд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рдЧреЙрд╕рд┐рдпрди рд▓реЗрдпрд░, рд▓рд┐рдирд┐рдпрд░рд▓реЗрдпрд░, рдПрд▓рдПрд╕рдЯреАрдПрдордПрд▓рдпрд░, рдПрдордбреАрдПрд▓рдПрд╕рдЯреАрдПрдордПрд▓рдпрд░, рд╕рд┐рдЧреНрдорд╛рдпреЙрд▓реЗрдпрд░, рд╕реЙрдлреНрдЯрдореИрдХреНрд╕рд▓реЗрдпрд░, рддрдиреНрд╣реЗрд▓рд░ рд╣реИрдВред
рдпрджрд┐ рдЖрд╡рд░реНрддрдХ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ RecurrentNetwork рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ FeedForwardNetworkред
рдпрджрд┐ рддреЗрдЬрд╝ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддреЗрдЬрд╝ arac рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЕрдЬрдЧрд░ рдореЗрдВ PyBrain рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛ред

рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдмреНрд░реЗрдирдбреИрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ buildNetwork () рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓ рдХреЛ рд╕рд╣реА / рдЕрдирд╕реБрдирд╛ рдХрд░рдХреЗ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

ANN рдкреНрд░рд╢рд┐рдХреНрд╖рдг


рддреЛ, рдпрд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реЗрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП gen_pic.py рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛:
 ./gen_pic.py -d ./learn -f FreeMono ABCDZ
 /gen_pic.py -d/learn -f Times ABCDZ
 ./gen_pic.py -d ./learn -f Arial ABCDZ
 /gen_pic.py -d/test -f DroidMono ABCDZ
 /gen_pic.py -d/test -f Sans ABCDZ

рдПрдХ рддрд╕реНрд╡реАрд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЖрд░рдЬреАрдмреА рд░рдВрдЧреЛрдВ рдХреЛ рдЧреНрд░реЗ рдЯреЛрди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдореБрдЭреЗ рдЗрд╕реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ get_data () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ brain.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЦреБрдж init_brain () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирдореВрдирд╛, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЯреНрд░реЗрдирд░ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдореБрдЦреНрдп рд▓рд╛рдЗрдиреЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреВрд░рд╛ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):
 def init_brain(learn_data, epochs, TrainerClass=BackpropTrainer): ... net = buildNetwork(64 * 64, 5, hiddenclass=LinearLayer) # fill dataset with learn data ds = ClassificationDataSet(4096, nb_classes=5, class_labels=['A', 'B', 'C', 'D', 'Z']) for inp, out in learn_data: ds.appendLinked(inp, [trans[out]]) ... ds._convertToOneOfMany(bounds=[0, 1]) ... trainer = TrainerClass(net, verbose=True) trainer.setData(ds) trainer.trainUntilConvergence(maxEpochs=epochs) return net 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдордЭрд╛рдПрдБ рдХрд╣рд╛рдБред
ClassificationDataSet - рд╡рд░реНрдЧреАрдХрд░рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯред рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдФрд░ рд╡рд░реНрдЧ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ (рдЯреНрд░рд╛рдВрд╕ [рдЖрдЙрдЯ]) рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдореВрдирд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред
_ConvertToOneOfMany () рдлрд╝рдВрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ рдХреЗ рдорд╛рдиреЛрдВ рдореЗрдВ рдЗрдиреНрд╣реАрдВ рдХреНрд▓рд╛рд╕ рдирдВрдмрд░реЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ "рд╢рд┐рдХреНрд╖рдХ" рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдВрд╕реЛрд▓ рдкрд░ рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛)ред
рд╣рдо рд╢рд┐рдХреНрд╖рдХ рдХреЛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ (рд╕реЗрдЯрдбреЗрдЯрд╛ ()) рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (trainUntilConvergence ()), рдЬреЛ рдпрд╛ рддреЛ рддрдм рддрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдирд╣реАрдВ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рддреЛ, рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдХреЛрдб рд▓рд┐рдЦрд╛ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреЗрдирд░реЗрдЯрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрд╕ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЖрдЬ, рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдкреНрд░рд┐рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%! рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдХреНрдпрд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ ...

рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ - рдмреИрдХрдкреНрд░реЙрдкрдЯреНрд░реЗрдирд░ рдФрд░ рдЖрд░рдкреАрдкреНрд░реЛрдорд┐рдирд╕рдЯреНрд░реНрд░реЗрдирд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред
рдмреИрдХрдкреНрд░реЙрдкрдЯреНрд░реЗрдирд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЧрддрд┐ рдЦрд░рд╛рдм рд╣реИ, рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИред рдХрд┐рд╕ рд╡рдЬрд╣ рд╕реЗ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
Brain.py рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдмрджрд▓рдХрд░ рдЖрдк RPropMinusTrainer рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рднреА рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рднреА 100% рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ , рд╢рд╛рдпрдж рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди 3 рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдп рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ: рдпрд╣рд╛рдВ рдЖрдк рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (os рдФрд░ os.path рдореЙрдбреНрдпреВрд▓ )ред

рдЬреЛ рд▓реЛрдЧ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣реВрдВрдЧрд╛ - рдмреНрд░реЗрдирдбреИрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рдЕрдХреНрд╖рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реБрдзрд╛рд░ рдЫреЛрдЯреЗ рдФрд░ рд╕рд░рд▓ рд╣реИрдВред

рдпрджрд┐ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛, рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗред
рд╕рдордп рд╣реЛрдЧрд╛, рд╢рд╛рдпрдж рдореИрдВ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдмрдирд╛рдКрдВрдЧрд╛, рдореИрдВ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреВрдВрдЧрд╛ред

рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рд╕реЛрд░реНрд╕ рдХреЛрдб рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
Gen_pic.py рдлрд╝рд╛рдЗрд▓ рдХреЛрдб
 #!/usr/bin/env python3 import sys import argparse import re import os import os.path from PyQt4.QtGui import * from PyQt4.Qt import * def saveWrap(dir='.', letter='A', font="Arial", size=40, align=Qt.AlignCenter): png_file = dir + "/" + font + "_" + letter + "_" + str(size) + ".png" save(png_file, letter, font, size, align) def save(png_file, letter='A', font="Arial", size=40, align=Qt.AlignCenter): img = QImage(64, 64, QImage.Format_RGB32) img.fill(Qt.white) p = QPainter(img) p.setPen(Qt.black) p.setFont(QFont(font, size)) p.drawText(img.rect(), align, letter) p.end() img.save(png_file) def main(): app = QApplication([]) p = argparse.ArgumentParser(description='Symbols image generator') p.add_argument('-f', '--font', default='Arial', help='Font name, default=Arial') p.add_argument('-s', '--size', type=int, default=40, help='Font size, default=40') p.add_argument('-d', '--dir', default='.', help='Output directory, default=current') p.add_argument('letters', help='Array of letters(abc) or range (az)') args = p.parse_args() path = os.path.abspath(args.dir) if not os.path.exists(path): print("Directory not exists, created!") os.makedirs(path) if re.match('^([az]-[az])|([AZ]-[AZ])$', args.letters): begin = args.letters[0] end = args.letters[2] if (ord(end) - ord(begin)) > 26: print("Error using letters. Only AZ or az available, not Az.") p.print_help() return letters = [chr(a) for a in range(ord(begin), ord(end) + 1)] else: letters = args.letters for lett in letters: saveWrap(path, lett, args.font, args.size) return 0 if __name__ == "__main__": sys.exit(main()) 


рдмреНрд░реЗрдирдбреИрдо рдлрд╝рд╛рдЗрд▓ рдХреЛрдб
 #!/usr/bin/env python3 import sys import argparse import re import os import os.path from PyQt4.QtGui import * from PyQt4.Qt import * from pybrain.tools.shortcuts import buildNetwork from pybrain.datasets import ClassificationDataSet from pybrain.structure.modules import SigmoidLayer, SoftmaxLayer, LinearLayer from pybrain.supervised.trainers import BackpropTrainer from pybrain.supervised.trainers import RPropMinusTrainer def init_brain(learn_data, epochs, TrainerClass=BackpropTrainer): if learn_data is None: return None print ("Building network") # net = buildNetwork(64 * 64, 8 * 8, 5, hiddenclass=TanhLayer) # net = buildNetwork(64 * 64, 32 * 32, 8 * 8, 5) net = buildNetwork(64 * 64, 5, hiddenclass=LinearLayer) # fill dataset with learn data trans = { 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'Z': 4 } ds = ClassificationDataSet(4096, nb_classes=5, class_labels=['A', 'B', 'C', 'D', 'Z']) for inp, out in learn_data: ds.appendLinked(inp, [trans[out]]) ds.calculateStatistics() print ("\tNumber of classes in dataset = {0}".format(ds.nClasses)) print ("\tOutput in dataset is ", ds.getField('target').transpose()) ds._convertToOneOfMany(bounds=[0, 1]) print ("\tBut after convert output in dataset is \n", ds.getField('target')) trainer = TrainerClass(net, verbose=True) trainer.setData(ds) print("\tEverything is ready for learning.\nPlease wait, training in progress...") trainer.trainUntilConvergence(maxEpochs=epochs) print("\tOk. We have trained our network.") return net def loadData(dir_name): list_dir = os.listdir(dir_name) list_dir.sort() list_for_return = [] print ("Loading data...") for filename in list_dir: out = [None, None] print("Working at {0}".format(dir_name + filename)) print("\tTrying get letter name.") lett = re.search("\w+_(\w)_\d+\.png", dir_name + filename) if lett is None: print ("\tFilename not matches pattern.") continue else: print("\tFilename matches! Letter is '{0}'. Appending...".format(lett.group(1))) out[1] = lett.group(1) print("\tTrying get letter picture.") out[0] = get_data(dir_name + filename) print("\tChecking data size.") if len(out[0]) == 64 * 64: print("\tSize is ok.") list_for_return.append(out) print("\tInput data appended. All done!") else: print("\tData size is wrong. Skipping...") return list_for_return def get_data(png_file): img = QImage(64, 64, QImage.Format_RGB32) data = [] if img.load(png_file): for x in range(64): for y in range(64): data.append(qGray(img.pixel(x, y)) / 255.0) else: print ("img.load({0}) failed!".format(png_file)) return data def work_brain(net, inputs): rez = net.activate(inputs) idx = 0 data = rez[0] for i in range(1, len(rez)): if rez[i] > data: idx = i data = rez[i] return (idx, data, rez) def test_brain(net, test_data): for data, right_out in test_data: out, rez, output = work_brain(net, data) print ("For '{0}' our net said that it is '{1}'. Raw = {2}".format(right_out, "ABCDZ"[out], output)) pass def main(): app = QApplication([]) p = argparse.ArgumentParser(description='PyBrain example') p.add_argument('-l', '--learn-data-dir', default="./learn", help="Path to dir, containing learn data") p.add_argument('-t', '--test-data-dir', default="./test", help="Path to dir, containing test data") p.add_argument('-e', '--epochs', default="1000", help="Number of epochs for teach, use 0 for learning until convergence") args = p.parse_args() learn_path = os.path.abspath(args.learn_data_dir) + "/" test_path = os.path.abspath(args.test_data_dir) + "/" if not os.path.exists(learn_path): print("Error: Learn directory not exists!") sys.exit(1) if not os.path.exists(test_path): print("Error: Test directory not exists!") sys.exit(1) learn_data = loadData(learn_path) test_data = loadData(test_path) # net = init_brain(learn_data, int(args.epochs), TrainerClass=RPropMinusTrainer) net = init_brain(learn_data, int(args.epochs), TrainerClass=BackpropTrainer) print ("Now we get working network. Let's try to use it on learn_data.") print("Here comes a tests on learn-data!") test_brain(net, learn_data) print("Here comes a tests on test-data!") test_brain(net, test_data) return 0 if __name__ == "__main__": sys.exit(main()) 



PyBrain рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░рд┐рдЪрд┐рдд рдкрд░ рдЖрдЬ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬрд▓реНрдж рдорд┐рд▓рддреЗ рд╣реИрдВ!

рдЕрджреНрдпрддрди: рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдЦрдВрдб рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ред

Source: https://habr.com/ru/post/In171937/


All Articles