рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рд╣реИред рдПрдХ рдЕрд░реНрде рдореЗрдВ, рдпрд╣ рд╣реИ - рдпрджрд┐ рдЖрдк рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдП рд╣реИрдВ, рддреЛ рд╕рдВрджреЗрд╣ рди рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реИред рдЖрдк рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЧреВрдЧрд▓ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд▓реЗрдЦрдХ рд╕реЗ рдЗрд╕реЗ "рд╕рдВрдХрд▓рд┐рдд" рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рднреА рдХрдИ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЗрддрдирд╛ рдЕрдпреЛрдЧреНрдп рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдХрд┐ ... рдЙрдмрд╛рдК, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдПрдХ рд╢реБрд░реБрдЖрддрдХрд░реНрддрд╛ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдиреЗрддреГрддреНрд╡, рдХрджрдо-рджрд░-рдХрджрдо, рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рдареАрдХ рд╕рд╛рдордиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдФрд░ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрд┐рдирд╛, "рдЗрд╕ рд╕реНрдкрд╖реНрдЯ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ" рдмрд╣рд╛рдиреЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдбреЙрдЧ рдмреНрд░реАрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ: рд╣рдо рдПрдХ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ Google Play рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рддреИрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣реИ: Google Play рдкрд░
NeuroDog рдРрдк ред
рдореЗрд░реА рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ (рдкреНрд░рдЧрддрд┐ рдореЗрдВ) рдХреЗ рд╕рд╛рде рд╡реЗрдмрд╕рд╛рдЗрдЯ:
robotics.snowcron.com ред
рдПрдХ рдЧрд╛рдЗрдб рд╕рд╣рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдЯ:
рдиреНрдпреВрд░реЛрдбреЙрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб ред
рдФрд░ рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ:

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд░рд╕: рдПрдХ Google рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдХреБрдЫ рднреА - рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХреЗрд░рд╕ рдкрд░ рдХрдИ рдкрд╛рдареНрдп рдкреБрд╕реНрддрдХреЗрдВ рд╣реИрдВред
рд╣рдо CNN - рдХрдиреНрд╡реЗрдВрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реАрдПрдирдПрди (рдФрд░ рдЙрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рдиреНрдпрд╛рд╕) рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдРрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: рдЖрдкрдХреЛ рд╕рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд░рдЪрдирд╛, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдорд╛рдкрджрдВрдбреЛрдВ (рдЗрди рд╕рднреА рд╕реАрдЦрдиреЗ рдХреА рджрд░, рдЧрддрд┐, рдПрд▓ 1 рдФрд░ рдПрд▓ 2, рдЖрджрд┐) рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рддрдерд╛рдХрдерд┐рдд "рд╡реИрдирд┐рд▓рд╛" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрдЬрд╛рдп рддрдерд╛рдХрдерд┐рдд "рд╣рд╕реНрддрд╛рдВрддрд░рдг рдЬреНрдЮрд╛рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВред рдЯреНрд░рд╛рдВрд╕рдлрд░ рдиреЙрд▓реЗрдЬ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google) рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдПред рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рддреЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдкрд░рддреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рдХреИрд╕реЗ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдХ Google рдиреЗрдЯрд╡рд░реНрдХ рд▓рд┐рдпрд╛, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрддреНрддреЗ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ? рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреАрдк рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдХреЗ рдХрд╛рдо рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдордиреЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдПрдХ рдЪрд┐рддреНрд░ (рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА, рдЬреЛ рд╣реИ) рдХреЛ "рдЦрд┐рд▓рд╛рдпрд╛" рд╣реИред рдкрд╣рд▓реА рдкрд░рдд рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ "рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛", "рдЪрд╛рдк", рдЖрджрд┐ред рдЕрдЧрд▓реА рдкрд░рдд рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ "рдлрд░", "рдЖрдВрдЦ рдХрд╛ рдХреЛрдирд╛" ... рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдореЗрдВ рдПрдХ рдкрд╣реЗрд▓реА рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдХреБрддреНрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдКрди, рджреЛ рдЖрдВрдЦреЗрдВ рдФрд░ рджрд╛рдВрддреЛрдВ рдореЗрдВ рдПрдХ рдорд╛рдирд╡ рд╣рд╛рдеред
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдкрд░рддреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google рд╕реЗ) рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдкрдиреА рдкрд░рддреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдирд╕реНрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЛрдиреЛрдВ "рд╡реИрдирд┐рд▓рд╛" рд╕реАрдПрдирдПрди рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдХрдИ "рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд░реНрдирд┐рдВрдЧ" рд╡реЗрд░рд┐рдПрдВрдЯ рдмрдирд╛рдПрдВрдЧреЗред "рд╡реЗрдирд┐рд▓рд╛" рдХреЗ рд▓рд┐рдП: рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛, рдХреНрдпреЛрдВрдХрд┐ "рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд" рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдирд╕реНрд▓реЛрдВ рдХреЗ рдирдореВрдиреЛрдВ рдХреЛ "рджрд┐рдЦрд╛рдирд╛" рдЪрд╛рд╣рд┐рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП
рдпрд╣рд╛рдВ рдмрдирд╛рдИ рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ (
рдореВрд▓ рдпрд╣рд╛рдВ рд╣реИ )ред
рдлрд┐рд░ рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред Kerasov рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реИ рдФрд░ рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рдЙрдард╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдлрд┐рд░ рд╣рдо Google Play рдкрд░ рдпрд╣ рд╕рдм рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, Google рд╡рд┐рд░реЛрдз рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЖрдХрд╛рд░ (рдПрдХ рднрд╛рд░реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдХрд╛рд░рдг) Google Play рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХреГрдд рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдХреЗ рдХреЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛: рд╣рдореЗрдВ рдмрдВрдбрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Google рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛, рдпрд╣ рдЖрд╡реЗрджрди рдореЗрдВ рдЦреЛрдЬ рдЯреИрдЧ рджрд░реНрдЬ рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд╕ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ... рдПрдХ рдпрд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ "рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ" (рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдореБрдлреНрдд рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг
рдЖрдк рдХреЗрд░рд╕ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдУрдПрд╕ (рдЙрдмрдВрдЯреВ рдЕрдиреБрд╢рдВрд╕рд┐рдд), рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЖрджрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХреБрдЫ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди), рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓реЗ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреВрд▓ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрдм рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ (10 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░) рдЧрддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ... рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рд╢реАрд░реНрд╖ GPU рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ $ 2,000 - $ 7,000 рдХреА рд▓рд╛рдЧрддред рдФрд░ рд╣рд╛рдБ, рдЙрдиреНрд╣реЗрдВ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛ рд╣рдо рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Google рд╣рдорд╛рд░реЗ рдЬреИрд╕реЗ рдЧрд░реАрдм рд╣реЗрдЬрд╣реЛрдЧ рдХреЛ рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдореБрдлреНрдд рдореЗрдВ, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдПрдХ рд╕рд╛рде, рдЗрд╕реЗ Google Colab рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдЖрдкрдХреЛ рдЕрдЬрдЧрд░, рдХреЗрд░рд╕ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдПрдХ Google рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдПрдХ рдЬреАрдореЗрд▓ рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛)ред
рдлрд┐рд▓рд╣рд╛рд▓, рдХреЛрд▓рд╛рдм рдХреЛ
рдпрд╣рд╛рдВ рдХрд╛рдо рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ , рд▓реЗрдХрд┐рди Google рдХреЛ рдЬрд╛рдирдХрд░, рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ Google Google Colabред
рдХреЛрд▓рд╛рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ WEB рд╕реЗрд╡рд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ? рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрд╛рдж рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдмрдЪрд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ?
рдХрдИ рд╣реИрдВ (рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп - рддреАрди) рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ, рд╣рдо рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╣рдо Google рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
Google рдбреНрд░рд╛рдЗрд╡ рдПрдХ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд╣реИ, рдЬреЛ рдирд┐рдпрдорд┐рдд рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ Google Colab рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрддреНрддреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ Google рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдмрд╕ред
рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг
рдиреАрдЪреЗ рдореИрдВ рдкрд╛рдпрдерди рдореЗрдВ рдХреЛрдб рджреЗрддрд╛ рд╣реВрдВ, рдмреНрд▓реЙрдХ рдмрд╛рдп рдмреНрд▓реЙрдХ (рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рд╕реЗ)ред рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмреЗрд╢рдХ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рджреЗрд░ рд╕реЗ рдПрдХ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ)ред
рдкреНрд░рд╛рд░рдВрдн
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП Google Drive рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЗрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдПрдХ Colab рд╕рддреНрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ 6 рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░)ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реА рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рддреНрд░ рдЕрднреА рднреА "рдЬреАрд╡рд┐рдд" рд╣реИ, рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдбреНрд░рд╛рдЗрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реИред
from google.colab import drive drive.mount('/content/drive/')
рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдЯрд┐рд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
>>> Go to this URL in a browser: ... >>> Enter your authorization code: >>> ┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖ >>> Mounted at /content/drive/
рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ
рдореЗрдВ рдЕрдиреБрднрд╛рдЧ
рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ; рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдореНрдорд┐рд▓рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдареАрдХ рд╣реИ ... рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдореНрдорд┐рд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯрд┐рдкреНрдкрдгреА / рдЕрдирд╕реБрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, InceptionV3 NN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, InceptionV3 рдХреЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдореЗрдВ рдЕрд╕рд╣рдЬрддрд╛, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ResNet50ред рдпрд╛ рдирд╣реАрдВ: рдЗрд╕ рд╕рдм рд╕реЗ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ рд╡рд╣ рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реИред
import datetime as dt import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from tqdm import tqdm import cv2 import numpy as np import os import sys import random import warnings from sklearn.model_selection import train_test_split import keras from keras import backend as K from keras import regularizers from keras.models import Sequential from keras.models import Model from keras.layers import Dense, Dropout, Activation from keras.layers import Flatten, Conv2D from keras.layers import MaxPooling2D from keras.layers import BatchNormalization, Input from keras.layers import Dropout, GlobalAveragePooling2D from keras.callbacks import Callback, EarlyStopping from keras.callbacks import ReduceLROnPlateau from keras.callbacks import ModelCheckpoint import shutil from keras.applications.vgg16 import preprocess_input from keras.preprocessing import image from keras.preprocessing.image import ImageDataGenerator from keras.models import load_model from keras.applications.resnet50 import ResNet50 from keras.applications.resnet50 import preprocess_input from keras.applications.resnet50 import decode_predictions from keras.applications import inception_v3 from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input as inception_v3_preprocessor from keras.applications.mobilenetv2 import MobileNetV2 from keras.applications.nasnet import NASNetMobile
Google рдбрд┐рд╕реНрдХ рдкрд░, рд╣рдо рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ:
working_path = "/content/drive/My Drive/DeepDogBreed/data/" !ls "/content/drive/My Drive/DeepDogBreed/data" >>> all_images labels.csv models test train valid
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрддреНрддреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ (Google рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдбреЗрдЯрд╛рд╕реЗрдЯ (рдКрдкрд░ рджреЗрдЦреЗрдВ) рд╕реЗ рдХреЙрдкреА рдХреА рдЧрдИ) рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ
рдСрд▓реНрдЯрд┐рдореЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред рдмрд╛рдж рдореЗрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ
рдЯреНрд░реЗрди, рдорд╛рдиреНрдп рдФрд░
рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд▓реЗрдВрдЧреЗред рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЛ
рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗред рдХреЗ рд░реВрдк рдореЗрдВ Label.csv рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИред
рдРрд╕реЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Google рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, GPU рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдкрдХреЛ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЖрдХрд╛рд░, рдЖрджрд┐ред рд╣рдо 256x256 рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдПрдХ рдмрдбрд╝реА рдкрд░реНрдпрд╛рдкреНрдд рдЫрд╡рд┐ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рди рдЦреЛрдПрдВ, рдФрд░ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЬреЛ рд╣рдо 224x224 рдкрд┐рдХреНрд╕реЗрд▓ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо 256 рдФрд░ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд 224 рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдЯрд┐рдкреНрдкрдгреА рдПрдХ - рдЕрд╕рд╣рдЬрддрд╛) рдЙрди рдореЙрдбрд▓реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧреА рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
warnings.filterwarnings("ignore") os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' np.random.seed(7) start = dt.datetime.now() BATCH_SIZE = 16 EPOCHS = 15 TESTING_SPLIT=0.3
рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП
рд▓реЗрдмрд▓реНрд╕.рдПрд╕рд╕реАрд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЛ
рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрднреА рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
labels = pd.read_csv(working_path + 'labels.csv') print(labels.head()) train_ids, valid_ids = train_test_split(labels, test_size = TESTING_SPLIT) print(len(train_ids), 'train ids', len(valid_ids), 'validation ids') print('Total', len(labels), 'testing images') >>> id breed >>> 0 000bec180eb18c7604dcecc8fe0dba07 boston_bull >>> 1 001513dfcb2ffafc82cccf4d8bbaba97 dingo >>> 2 001cdf01b096e06d78e9e5112d419397 pekinese >>> 3 00214f311d5d2247d5dfe4fe24b2303d bluetick >>> 4 0021f9ceb3235effd7fcde7f7538ed62 golden_retriever >>> 7155 train ids 3067 validation ids >>> Total 10222 testing images
рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг / рд╕рддреНрдпрд╛рдкрди / рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдирд╛рдо рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
def copyFileSet(strDirFrom, strDirTo, arrFileNames): arrBreeds = np.asarray(arrFileNames['breed']) arrFileNames = np.asarray(arrFileNames['id']) if not os.path.exists(strDirTo): os.makedirs(strDirTo) for i in tqdm(range(len(arrFileNames))): strFileNameFrom = strDirFrom + arrFileNames[i] + ".jpg" strFileNameTo = strDirTo + arrBreeds[i] + "/" + arrFileNames[i] + ".jpg" if not os.path.exists(strDirTo + arrBreeds[i] + "/"): os.makedirs(strDirTo + arrBreeds[i] + "/")
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреБрддреНрддреЗ рдХреА рдирд╕реНрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдХрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдирд╕реНрд▓ рдХреЗ рд▓рд┐рдП рдПрдХред рддрджрдиреБрд╕рд╛рд░, рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдирд╕реНрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд░реЗрд╕ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдирд╣реАрдВ, рдЬреЛ рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА 15,000 рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рд╣рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ - рдФрд░ рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
breeds = np.unique(labels['breed']) map_characters = {}
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рд╣рдо Kairas рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ ImageDataGenerators рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред ImageDataGenerator рдЗрдореЗрдЬ, рд╕реНрдХреЗрд▓, рд░реЛрдЯреЗрдЯ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
def preprocess(img): img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE), interpolation = cv2.INTER_AREA)
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
рд╣рдо ImageDataGenerator рдореЗрдВ рд╣реА (рдореВрд▓ 0-255 рдХреЗ рдмрдЬрд╛рдп 0-1 рдХреА рд╕реАрдорд╛ рдХреЗ рддрд╣рдд рдЙрдк-рдбреЗрдЯрд╛) рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдзреБрдВрдзрд▓реА рдХреЙрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ): рдпрд╣ рд╡рд╣реА рдХрд╕реНрдЯрдо рдЫрд╡рд┐ рд╣реЗрд░рдлреЗрд░ рд╣реИ рдЬреЛ рдордирдорд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдЪрдбреАрдЖрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреБрдЫ рднреАред
рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ ImageDataGenerators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдПред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреА "рд╡рд┐рд╡рд┐рдзрддрд╛" рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдбрд╝ рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рдирд╣реАрдВ, рдХрдо рд╕реЗ рдХрдо, рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
train_datagen = ImageDataGenerator( preprocessing_function=preprocess,
рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░ рдХрднреА-рдХрднреА рдПрдХ рдЕрд▓рдЧ рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдХреЛ рдЯрд┐рдкреНрдкрдгреА / рдЕрдирд▓реЙрдХреНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, "рд╡реИрдирд┐рд▓рд╛" рд╕реАрдПрдирдПрди рдмрдирд╛рдПрдВред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рдЖрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдЧрд░ рдЗрдЪреНрдЫрд╛ рд╣реЛ рддреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ)ред
def createModelVanilla(): model = Sequential()
рдЬрдм рд╣рдо
рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:
def createModelMobileNetV2():
рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ:
def createModelResNet50(): base_model = ResNet50(weights='imagenet', include_top=False, pooling='avg', input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3)) x = base_model.output x = Dense(512)(x) x = Activation('relu')(x) x = Dropout(0.5)(x) predictions = Dense(NUM_CLASSES, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions)
рдЪреЗрддрд╛рд╡рдиреА: рд╡рд┐рдЬреЗрддрд╛! рдЗрд╕ рдПрдирдПрди рдиреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛:
def createModelInceptionV3():
рдПрдХ рдФрд░ рдПрдХ:
def createModelNASNetMobile():
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдХрд╛рд░ рдорд╛рдпрдиреЗ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ (рдореЛрдмрд╛рдЗрд▓ рдПрдирдПрди рдЗрдирд╕реЗрдкреНрд╢рди рд╕реЗ 5 рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ) рдФрд░ рдЧрддрд┐ (рдпрджрд┐ рд╣рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рдмрд▓рд┐рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрди рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдмрдЪрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ NN рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ:
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдЯрд╛рдПрдВред
рдбрд┐рд▓реАрдЯ (рдХреЗрд╡рд▓) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдПрдХ "рд░рди рд╕реЗрд▓реЗрдХреНрд╢рди" рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред
рддрдм рд╣рдо рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдЗрд╕рдХреА рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рдереА, рдпрд╛
рд▓реЛрдб рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ: рдмреЗрд╢рдХ, рд╣рдо "рд╣рдЯрд╛рдПрдВ" рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдирдПрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╣реЗрдЬреЗ рдЧрдП рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХреЛ
рд╣рдЯрд╛рдПрдВ рдирд╣реАрдВред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рдПрдирдПрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдореМрдЬреВрджрд╛ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рддрд┐ рдкрд░ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рджреГрд╢реНрдп: рд╣рдордиреЗ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛, рдлрд┐рд░ рдЫреБрдЯреНрдЯреА рдкрд░ рдЪрд▓реЗ рдЧрдПред рд╡реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдП, рдФрд░ Google рдиреЗ рд╕рддреНрд░ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдПрдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: "рд╣рдЯрд╛рдПрдВ" рдФрд░ "рд▓реЛрдб" рдХреЛ рдЕрдирд▓реЛрдб рдХрд░реЗрдВред
deleteSavedNet(working_path + strModelFileName)
рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рд╣реИред рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдпреБрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдпрджрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рд▓реЛрдЧреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред
checkpoint = ModelCheckpoint(working_path + strModelFileName, monitor='val_acc', verbose=1, save_best_only=True, mode='auto', save_weights_only=False) callbacks_list = [ checkpoint ]
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ:
рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╣рд╛рдирд┐ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдЧреНрд░рд╛рдл рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реАрдЦ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░реАрдХреНрд╖рдг
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдирдПрди рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦреЗ рдереЗ - рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдерд╛ - рдкреНрд░рддреНрдпреЗрдХ рдХреБрддреНрддреЗ рдХреА рдирд╕реНрд▓ рдХреЗ рд▓рд┐рдПред
рдПрдХ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдирд┐рд░реНрдпрд╛рдд рдХреЛрдб рдХреЗ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрд▓рдЧ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ - рдЬрдм рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЗрд╕рдХреА рдЗрд╖реНрдЯрддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рд╣реА рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХреБрдЫ рд╕реАрдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрдЪрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдЪреАрдЬ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИ, рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рдмрдЪрд╛ рд▓рд┐рдпрд╛ рд╣реИред
рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ - рдХреЛрдб рдкрд░ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ - рдореИрдВ рдпрд╣рд╛рдВ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВред рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреА рд╕реБрдВрджрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
from keras.models import Model from keras.models import load_model from keras.layers import * import os import sys import tensorflow as tf
рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХрд╛рд░реНрдп:
img = image.load_img(working_path + "test/affenpinscher.jpg")

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░реНрд╕ (рдпрд╛ рддреЛ рдпрд╣ рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрди рдкрд░рддреЛрдВ рдХреЛ "рдирд╛рдо" рджреЗрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╣рдордиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛)ред
model.summary() >>> Layer (type) >>> ====================== >>> input_7 (InputLayer) >>> ______________________ >>> conv2d_283 (Conv2D) >>> ______________________ >>> ... >>> dense_14 (Dense) >>> ====================== >>> Total params: 22,913,432 >>> Trainable params: 1,110,648 >>> Non-trainable params: 21,802,784
рдЬрдм рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░реНрд╕ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд░реЛрдорд┐рдВрдЧ рдХреЛрдб:
def print_graph_nodes(filename): g = tf.GraphDef() g.ParseFromString(open(filename, 'rb').read()) print() print(filename) print("=======================INPUT===================") print([n for n in g.node if n.name.find('input') != -1]) print("=======================OUTPUT==================") print([n for n in g.node if n.name.find('output') != -1]) print("===================KERAS_LEARNING==============") print([n for n in g.node if n.name.find('keras_learning_phase') != -1]) print("===============================================") print()
.
Keras Neural Network
pb , , Android.
def keras_to_tensorflow(keras_model, output_dir, model_name,out_prefix="output_", log_tensorboard=True): if os.path.exists(output_dir) == False: os.mkdir(output_dir) out_nodes = [] for i in range(len(keras_model.outputs)): out_nodes.append(out_prefix + str(i + 1)) tf.identity(keras_model.output[i], out_prefix + str(i + 1)) sess = K.get_session() from tensorflow.python.framework import graph_util from tensorflow.python.framework graph_io init_graph = sess.graph.as_graph_def() main_graph = graph_util.convert_variables_to_constants( sess, init_graph, out_nodes) graph_io.write_graph(main_graph, output_dir, name=model_name, as_text=False) if log_tensorboard: from tensorflow.python.tools import import_pb_to_tensorboard import_pb_to_tensorboard.import_to_tensorboard( os.path.join(output_dir, model_name), output_dir)
:
model = load_model(working_path + strModelFileName) keras_to_tensorflow(model, output_dir=working_path + strModelFileName, model_name=working_path + "models/dogs.pb") print_graph_nodes(working_path + "models/dogs.pb")
.
Android
Android . , , , ( ) .
, Android Studio . ┬л ┬╗, тАФ . activity.

, ┬лassets┬╗ (, ).
Gradle
. ,
tensorflow-android . , Tensorflow (, , Keras) Java:

:
versionCode versionName . , Google Play. gdadle (, 1 -> 2 -> 3...) , ┬л ┬╗.
, ┬л┬╗ тАФ 100 Mb Neural Network , instance ┬л┬╗ Facebook .
instance :
<activity android:name=".MainActivity" android:launchMode="singleTask">
android:launchMode=┬лsingleTask┬╗ MainActivity, Android, () , , instance.
, , - ┬л┬╗ :
<intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter>
, , :
<uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
Android, .
Layout .
layouts, , .
Portrait layout .
: (view) , (, ┬л┬╗), ┬лHelp┬╗, File/Gallery , ( ) ┬лProcess┬╗ .

, enabling/disabling , .
MainActivity
activity (extends) Android Activity:
public class MainActivity extends Activity
, .
, Bitmap. , Bitmap ( ) (m_bitmap), , 256x256 (m_bitmapForNn). (256) :
static Bitmap m_bitmap = null; static Bitmap m_bitmapForNn = null; private int m_nImageSize = 256;
; (. ), , :
private String INPUT_NAME = "input_7_1"; private String OUTPUT_NAME = "output_1";
TensofFlow. , ( assets):
private TensorFlowInferenceInterface tf;
private String MODEL_PATH =
"file:///android_asset/dogs.pb";
, , :
private String[] m_arrBreedsArray;
, Bitmap. , RGB , тАФ , тАФ , . , (, 120 , ):
private float[] m_arrPrediction = new float[120]; private float[] m_arrInput = null;
tensorflow inference library:
static { System.loadLibrary("tensorflow_inference"); }
, , , ┬л ┬╗, .
class PredictionTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); }
In onCreate() of the MainActivity, we need to add the onClickListener for the ┬лProcess┬╗ button:
m_btn_process.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { processImage(); } });
processImage() , :
private void processImage() { try { enableControls(false);
UI- , . , .
instances , (flow of control): ┬л┬╗ Facebook, , . , ┬л┬╗ onCreate , onCreate .
:
1. onCreate MainActivity, onSharedIntent:
protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); .... onSharedIntent(); ....
onNewIntent:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); onSharedIntent(); }
onSharedIntent:
private void onSharedIntent() { Intent receivedIntent = getIntent(); String receivedAction = receivedIntent.getAction(); String receivedType = receivedIntent.getType(); if (receivedAction.equals(Intent.ACTION_SEND)) {
onCreate ( ) onNewIntent ( ).
! , , ┬л┬╗ , ┬л┬╗
.