рд░реВрд╕реА рдореЗрдВ рдкреВрд░реНрдг рдкрд╛рдареНрдпрдХреНрд░рдо рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдореВрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдкрд╛рдареНрдпрдХреНрд░рдо рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕рд╛рдордЧреНрд░реА
- рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдЯреНрд░рди рдХреЗ рд╕рд╛рде рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░
- рдкрд░рд┐рдЪрдп
- рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореЙрдбрд▓ рд╕реАрдЦрдирд╛
- MobileNet
- рдХреЛрд▓реИрдм: рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдмрдирд╛рдо рдХреБрддреНрддреЗ
- рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЧреЛрддрд╛рдЦреЛрд░реА
- рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рд░рдВрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг
- рдкрд░рд┐рдгрд╛рдо
рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдЯреНрд░рди рдХреЗ рд╕рд╛рде рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░
- рдпрд╣ рд╕рдмрдХ 6 рд╣реИ рдФрд░ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдкрд┐рдд рд╣реИред рд╕реАрдЦрдирд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдПрдХ рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╢реЛрдзрди рд╣реИред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реАрдЦрдиреЗ рдкрд░ рджрдХреНрд╖рддрд╛ рдореЗрдВ рдХреБрдЫ рд╡реГрджреНрдзрд┐ рджреЗрдХрд░ рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╕реЗрдмрд╕реНрдЯрд┐рдпрди, рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдХрднреА рднреА рдЕрдкрдиреЗ рдХрд╛рдо рдФрд░ рд╢реЛрдз рдореЗрдВ рд╢рд┐рдХреНрд╖рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд╛рдП рд╣реИрдВ?
- рдореЗрд░рд╛ рд╢реЛрдз рдкреНрд░рдмрдВрдз рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛ рдФрд░ рдЗрд╕реЗ " рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг " рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рд╣рдо рдПрдХ рд╢реЛрдз рдкреНрд░рдмрдВрдз рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ (рдбреЗрдЯрд╛ рд╕реЗрдЯ, рдЗрдХрд╛рдИ) рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдиреНрдп рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреЗрдж рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдордиреЗ рд╡рд┐рдХрд╕рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╡рд╕реНрддреБ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ) рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд░рддрд╛ рдерд╛ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдЬреИрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИрдВред
- рд╣рд╛рдВ, рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕реЗрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
- рд╣рд╛рдБ, рд╣рд╛рдБ! рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЬреАрд╡рди рднрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдореЗрдВ рд▓рдЧреЗ рд░рд╣рддреЗ рд╣реИрдВред
- рдХреНрдпрд╛ рд╣рдо рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдорд╛рд░реЗ рдирдП рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдореЙрдбрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛?
- рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓рд╛рдЗрди рд╕реЗ рд▓рд╛рдЗрди рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╣ рдкрд░ рд╣рд░ рдХреЛрдИ рд╕рдХреНрд╖рдо рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд╣рдордд рд╣реИрдВ, рдЕрдЧрд░ рдЖрдк рдХреБрддреНрддреЛрдВ рд╕реЗ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреА 100k рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ 100k рдХреБрддреНрддреЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╣рд╛рдБ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ! рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдкрд░рд┐рдЪрдп
- рдирдорд╕реНрдХрд╛рд░ рдФрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
- рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдЫрд╡рд┐ рдореЗрдВ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЬрд╛рддреАрдп рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреАрдЫреЗ рд╣рдЯ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдерд╛ - рд▓рдЧрднрдЧ 70% рд╕рдЯреАрдХрддрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдбреНрд░реЙрдкрдЖрдЙрдЯ (рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд┐рдпреЛрдЧ) рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ 80% рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
- рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ 80% рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрдХреЗрддрдХ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, 20% рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред рд╣реИ рдирд╛? рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рд╕рдЯреАрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рдкрд╛рда рдореЗрдВ, рд╣рдо рдЬреНрдЮрд╛рди рд╣рд╕реНрддрд╛рдВрддрд░рдг рддрдХрдиреАрдХ (рдЬреНрдЮрд╛рди рдореЙрдбрд▓ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╢рд╛рд▓ рдбреЗрдЯрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдЬреНрдЮрд╛рди рдореЙрдбрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рд╣рдо 95% рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
рдореЙрдбрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реАрдЦрдирд╛
2012 рдореЗрдВ, рдПрд▓реЗрдХреНрд╕рдиреЗрдЯ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдиреЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреНрд░рд╛рдВрддрд┐ рд▓рд╛ рджреА рдФрд░ рдЗрдореЗрдЬрдиреЗрдЯ рд▓рд╛рд░реНрдЬ рд╕реНрдХреЗрд▓ рд╡рд┐рдЬреБрдЕрд▓ рд░рд┐рдХреЙрдЧреНрдирд┐рд╢рди рдЪреИрд▓реЗрдВрдЬ рдХреЛ рдЬреАрддрдХрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЙрд▓реНрдпреВрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдмрдирд╛рдпрд╛ред

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

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

рд╣рдо рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ImageNet рдореЗрдВ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ 1000 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред FashionMNIST рдореЗрдВ 10 рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧреАрдХрд░рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдХреЗрд╡рд▓ 2 рд╡рд░реНрдЧ рд╣реИрдВ - рдмрд┐рд▓реНрд▓рд┐рдпрд╛рдБ рдФрд░ рдХреБрддреНрддреЗред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдЕрдВрддрд┐рдо рдкрд░рдд рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬреЛ рдирдП рд╕реЗрдЯ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧреАред

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

рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ "рдардВрдб" рдХрд░рдХреЗ, рд╣рдо рд╣рдореЗрдВ рд╡рд░реНрдЧреАрдХрд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрд░рдд рд╕реАрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреЗ рд╣реИрдВред
рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓реЛрдВ рдХрд╛ рдПрдХ рдФрд░ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реА рдкрд░рдд рдХреЛ рдХрд╛рдлреА рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдкреВрд░реЗ рдореЙрдбрд▓ рдХреЛред
рдпрджрд┐ рд╣рдо рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рдЪрд░ рдХреЛ "рдлреНрд░реАрдЬ" рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдирдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рдЕрдВрддрд┐рдо рдкрд░рдд рдкрд░ рдЪрд░ рдХреЗ рдорд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рдиреЛрдВ рд╕реЗ рднрд░реЗ рд╣реЛрдВрдЧреЗред рдЕрдВрддрд┐рдо рдкрд░рдд рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдореЗрдВ рдмрдбрд╝реА рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднрд╛рд░ рдореЗрдВ рдордЬрдмреВрдд рдмрджрд▓рд╛рд╡ рд▓рд╛рдПрдЧрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореМрдЬреВрджрд╛ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ "рд╕реНрдерд┐рд░" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЙрдбрд▓ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛! рдпрд╣ рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
MobileNet
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, рдмреЗрд╣рдж рдХреБрд╢рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ рдЬреЛ рдХрд┐ рдЗрдореЗрдЬрдиреЗрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ - рдПрд▓реЗрдХреНрд╕рдиреЗрдЯ, рдЗрдВрд╕реЗрдкреНрд╢рди, рд░реЗрд╕реЛрдиреЗрдВрдЯ рдкрд░ рдЙрдЪреНрдЪ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдпреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрд╣реБрдд рдЧрд╣рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИрдВ рдФрд░ рдЗрдирдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓рд╛рдЦреЛрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреИрдЯрд░реНрди рд╕реАрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдЦрдиреЗ рдХреА рдЧрддрд┐, рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЧрдгрдирд╛рдУрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред
рдЗрд╕ рдкрд╛рда рдореЗрдВ рд╣рдо рдЖрдзреБрдирд┐рдХ рдХрдВрдЯреЗрд╕реНрдЯреЗрдВрдЯ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ MobileNet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдПрдХ рдХреБрд╢рд▓ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ рдЬреЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреА рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реАрдорд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдФрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред
MobileNet Google рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ ImageNet рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЪреВрдВрдХрд┐ MobileNet рдХреЛ ImageNet рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ 1,000 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, MobileNet рдХреЗ рдкрд╛рд╕ 1,000 рдЖрдЙрдЯрдкреБрдЯ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рджреЛрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ - рдПрдХ рдмрд┐рд▓реНрд▓реА рдФрд░ рдПрдХ рдХреБрддреНрддрд╛ред

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ:

Tensorflow рдореЗрдВ, рдПрдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдлрд╝реАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд Keras рдкрд░рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ MobileNet рдХреЛ ImageNet рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдереЗред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, MobileNet рдХреЛ 224x224px рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ RGB рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
TensorFlow рдореЗрдВ TensorFlow Hub рдирд╛рдордХ рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрдВрдбрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

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

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рд▓рд┐рдЦреЗрдЧрд╛ред
рдХреЛрд▓реИрдм: рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдмрдирд╛рдо рдХреБрддреНрддреЗ
рд░реВрд╕реА рдореЗрдВ CoLab рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ CoLab рдХрд╛ рд▓рд┐рдВрдХред
TensorFlow рд╣рдм рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рднрдВрдбрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд░реНрдирд┐рдВрдЧ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдПрдХ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдЫреВрддреЗ рд╣реБрдП рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рд▓рд┐рдВрдХ рдЖрдкрдХреЛ рдЙрдкрд▓рдмреНрдз рдореЙрдбрд▓ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреЛрд▓рд╛рдм рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ
- рд╣рдо рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП TensorFlow рд╣рдм рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ;
- рд╣рдо рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП TensorFlow рд╣рдм-рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ;
- рдЖрдЗрдП TensorFlow рд╣рдм рд╕реЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо Runtime -> Reset all runtimes...
рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ Runtime -> Reset all runtimes...
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдпрд╛рдд
рдЗрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдХрдИ TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрднреА рддрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП TensorFlow рдФрд░ TensorFlow рд╣рдм рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗред
TensorFlow рдХреЗ рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╡реАрдирддрдо рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо TensorFlow рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо Runtime -> Reset all runtimes...
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд▓реМрдЯрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ Runtime -> Reset all runtimes...
рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореВрд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред
!pip install tf-nightly-gpu !pip install "tensorflow_hub==0.4.0" !pip install -U tensorflow_datasets
рдирд┐рд╖реНрдХрд░реНрд╖:
Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (0.8.0) Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (3.7.1) Requirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (0.1.7) Collecting tf-estimator-nightly (from tf-nightly-gpu) Downloading https://files.pythonhosted.org/packages/ea/72/f092fc631ef2602fd0c296dcc4ef6ef638a6a773cb9fdc6757fecbfffd33/tf_estimator_nightly-1.14.0.dev2019092201-py2.py3-none-any.whl (450kB) |тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 450kB 45.9MB/s Requirement already satisfied: numpy<2.0,>=1.16.0 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (1.16.5) Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (1.11.2) Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (0.8.0) Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (3.0.1) Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tf-nightly-gpu) (0.33.6) Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tf-nightly-gpu) (2.8.0) Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tb-nightly<1.16.0a0,>=1.15.0a0->tf-nightly-gpu) (3.1.1) Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.6/dist-packages (from tb-nightly<1.16.0a0,>=1.15.0a0->tf-nightly-gpu) (41.2.0) Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tb-nightly<1.16.0a0,>=1.15.0a0->tf-nightly-gpu) (0.15.6) Installing collected packages: tb-nightly, tf-estimator-nightly, tf-nightly-gpu Successfully installed tb-nightly-1.15.0a20190911 tf-estimator-nightly-1.14.0.dev2019092201 tf-nightly-gpu-1.15.0.dev20190821 Collecting tensorflow_hub==0.4.0 Downloading https://files.pythonhosted.org/packages/10/5c/6f3698513cf1cd730a5ea66aec665d213adf9de59b34f362f270e0bd126f/tensorflow_hub-0.4.0-py2.py3-none-any.whl (75kB) |тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 81kB 5.0MB/s Requirement already satisfied: protobuf>=3.4.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow_hub==0.4.0) (3.7.1) Requirement already satisfied: numpy>=1.12.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow_hub==0.4.0) (1.16.5) Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow_hub==0.4.0) (1.12.0) Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.4.0->tensorflow_hub==0.4.0) (41.2.0) Installing collected packages: tensorflow-hub Found existing installation: tensorflow-hub 0.6.0 Uninstalling tensorflow-hub-0.6.0: Successfully uninstalled tensorflow-hub-0.6.0 Successfully installed tensorflow-hub-0.4.0 Collecting tensorflow_datasets Downloading https://files.pythonhosted.org/packages/6c/34/ff424223ed4331006aaa929efc8360b6459d427063dc59fc7b75d7e4bab3/tensorflow_datasets-1.2.0-py3-none-any.whl (2.3MB) |тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 2.3MB 4.9MB/s Requirement already satisfied, skipping upgrade: future in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.16.0) Requirement already satisfied, skipping upgrade: wrapt in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.11.2) Requirement already satisfied, skipping upgrade: dill in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.3.0) Requirement already satisfied, skipping upgrade: numpy in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.16.5) Requirement already satisfied, skipping upgrade: requests>=2.19.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (2.21.0) Requirement already satisfied, skipping upgrade: tqdm in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (4.28.1) Requirement already satisfied, skipping upgrade: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (3.7.1) Requirement already satisfied, skipping upgrade: psutil in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (5.4.8) Requirement already satisfied, skipping upgrade: promise in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (2.2.1) Requirement already satisfied, skipping upgrade: absl-py in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.8.0) Requirement already satisfied, skipping upgrade: tensorflow-metadata in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.14.0) Requirement already satisfied, skipping upgrade: six in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.12.0) Requirement already satisfied, skipping upgrade: termcolor in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.1.0) Requirement already satisfied, skipping upgrade: attrs in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (19.1.0) Requirement already satisfied, skipping upgrade: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2.8) Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2019.6.16) Requirement already satisfied, skipping upgrade: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (3.0.4) Requirement already satisfied, skipping upgrade: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (1.24.3) Requirement already satisfied, skipping upgrade: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow_datasets) (41.2.0) Requirement already satisfied, skipping upgrade: googleapis-common-protos in /usr/local/lib/python3.6/dist-packages (from tensorflow-metadata->tensorflow_datasets) (1.6.0) Installing collected packages: tensorflow-datasets Successfully installed tensorflow-datasets-1.2.0
рд╣рдордиреЗ рдкрд╣рд▓реЗ рднреА рдХреБрдЫ рдЖрдпрд╛рдд рджреЗрдЦреЗ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рд╣реИрдВред рдирдП рд╕реЗ рдЖрдпрд╛рдд tensorflow_hub
, рдЬреЛ рд╣рдордиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
from __future__ import absolute_import, division, print_function, unicode_literals import matplotlib.pylab as plt import tensorflow as tf tf.enable_eager_execution() import tensorflow_hub as hub import tensorflow_datasets as tfds from tensorflow.keras import layers
рдирд┐рд╖реНрдХрд░реНрд╖:
WARNING:tensorflow: TensorFlow's `tf-nightly` package will soon be updated to TensorFlow 2.0. Please upgrade your code to TensorFlow 2.0: * https://www.tensorflow.org/beta/guide/migration_guide Or install the latest stable TensorFlow 1.X release: * `pip install -U "tensorflow==1.*"` Otherwise your code may be broken by the change.
import logging logger = tf.get_logger() logger.setLevel(logging.ERROR)
рднрд╛рдЧ 1: рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП TensorFlow Hub MobileNet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХреЛрд▓реИрдм рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рд▓реЗрдВрдЧреЗ, рдЗрд╕реЗ рдХреЗрд░рд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ MobileNet v2 рд╣реИ (MobileNet рдХреЗ рдмрдЬрд╛рдп, tfhub.dev рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЕрдиреНрдп tf2 рд╕рдВрдЧрдд рдЫрд╡рд┐ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдХреНрд▓рд╛рд╕реАрдлрд╛рдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
MobileNet рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдПрдХ Keras рдореЙрдбрд▓ рдмрдирд╛рдПрдБред рдЗрдирдкреБрдЯ рдкрд░ MobileNet 3 рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ (RGB) рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ рдореЗрдВ 224x224 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред
CLASSIFIER_URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/2" IMAGE_RES = 224 model = tf.keras.Sequential([ hub.KerasLayer(CLASSIFIER_URL, input_shape=(IMAGE_RES, IMAGE_RES, 3)) ])
рдПрдХрд▓ рдЫрд╡рд┐ рдкрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдЪрд▓рд╛рдПрдВ
MobileNet рдХреЛ ImageNet рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ImageNet рдореЗрдВ 1000 рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓рд╛рд╕ рд╣реИрдВ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рд╕реИрдиреНрдп рд╡рд░реНрджреА рд╣реИред рдЖрдЗрдП рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рдвреВрдВрдвреЗрдВ рдЬрд┐рд╕ рдкрд░ рд╕реИрдиреНрдп рд╡рд░реНрджреА рд╕реНрдерд┐рдд рд╣реЛрдЧреА рдФрд░ рдЬреЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬрдиреЗрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд┐рдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
import numpy as np import PIL.Image as Image grace_hopper = tf.keras.utils.get_file('image.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg') grace_hopper = Image.open(grace_hopper).resize((IMAGE_RES, IMAGE_RES)) grace_hopper
рдирд┐рд╖реНрдХрд░реНрд╖:
Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg 65536/61306 [================================] - 0s 0us/step

grace_hopper = np.array(grace_hopper)/255.0 grace_hopper.shape
рдирд┐рд╖реНрдХрд░реНрд╖:
(224, 224, 3)
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдЗрдирдкреБрдЯ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ (рдмреНрд▓реЙрдХ) рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рдЖрдпрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ред
result = model.predict(grace_hopper[np.newaxis, ...]) result.shape
рдирд┐рд╖реНрдХрд░реНрд╖:
(1, 1001)
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд╛ рдкрд░рд┐рдгрд╛рдо 1,001 рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдХреНрдЯрд░ рдерд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдорд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ argmax
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рднреА рдЙрддреНрддрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ - рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддрддреНрд╡ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд╣реИ?
predicted_class = np.argmax(result[0], axis=-1) predicted_class
рдирд┐рд╖реНрдХрд░реНрд╖:
653
рдирд┐рд░реНрдгрдп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА
рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЙрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдореЗрдЬрдиреЗрдЯ рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдирд┐рд╖реНрдард╛ рдХреЗ рд╕рд╛рде рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
labels_path = tf.keras.utils.get_file('ImageNetLabels.txt','https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt') imagenet_labels = np.array(open(labels_path).read().splitlines()) plt.imshow(grace_hopper) plt.axis('off') predicted_class_name = imagenet_labels[predicted_class] _ = plt.title("Prediction: " + predicted_class_name.title())
рдирд┐рд╖реНрдХрд░реНрд╖:
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt 16384/10484 [==============================================] - 0s 0us/step

рдмрд┐рдВрдЧреЛ! рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдиреЗ рд╕реИрдиреНрдп рд╡рд░реНрджреА рдХреА рд╕рд╣реА рдкрд╣рдЪрд╛рди рдХреАред
рднрд╛рдЧ 2: рдПрдХ рдмрд┐рд▓реНрд▓реА рдФрд░ рдХреБрддреНрддреЗ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП TensorFlow рд╣рдм рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЕрдм рд╣рдо MobileNet рдореЙрдбрд▓ рдХреЗ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдХреИрд╕реЗ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред
рдбреЗрдЯрд╛ рд╕реЗрдЯ
рдмрд┐рд▓реНрд▓реА рдФрд░ рдХреБрддреНрддреЗ рдХреЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо TensorFlow Datasets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
splits = tfds.Split.ALL.subsplit(weighted=(80, 20)) splits, info = tfds.load('cats_vs_dogs', with_info=True, as_supervised=True, split = splits) (train_examples, validation_examples) = splits num_examples = info.splits['train'].num_examples num_classes = info.features['label'].num_classes
рдирд┐рд╖реНрдХрд░реНрд╖:
Downloading and preparing dataset cats_vs_dogs (786.68 MiB) to /root/tensorflow_datasets/cats_vs_dogs/2.0.1... /usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) WARNING:absl:1738 images were corrupted and were skipped Dataset cats_vs_dogs downloaded and prepared to /root/tensorflow_datasets/cats_vs_dogs/2.0.1. Subsequent calls will reuse this data.
рдмрд┐рд▓реНрд▓реА рдФрд░ рдХреБрддреНрддреЗ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рд╕рднреА рдЫрд╡рд┐рдпрд╛рдВ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред
for i, example_image in enumerate(train_examples.take(3)): print("Image {} shape: {}".format(i+1, example_image[0].shape))
рдирд┐рд╖реНрдХрд░реНрд╖:
Image 1 shape: (500, 343, 3) Image 2 shape: (375, 500, 3) Image 3 shape: (375, 500, 3)
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдХрдореА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓ рдЗрдирдкреБрдЯ рдкрд░ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ - 224 x 224ред
.repeat()
рдлрд╝рдВрдХреНрд╢рди рдФрд░ steps_per_epoch
рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 15 рд╕реЗрдХрдВрдб рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
def format_image(image, label): image = tf.image.resize(image, (IMAGE_RES, IMAGE_RES)) / 255.0 return image, label BATCH_SIZE = 32 train_batches = train_examples.shuffle(num_examples//4).map(format_image).batch(BATCH_SIZE).prefetch(1) validation_batches = validation_examples.map(format_image).batch(BATCH_SIZE).prefetch(1)
рдЫрд╡рд┐ рд╕реЗрдЯ рдкрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдЪрд▓рд╛рдПрдВ
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЕрднреА рднреА рдкреНрд░реА-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 1,000 рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓рд╛рд╕ рд╣реИрдВред ImageNet рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреБрддреНрддреЗ рдФрд░ рдмрд┐рд▓реНрд▓рд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЗрдирдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдореЙрдбрд▓ рд╣рдореЗрдВ рдХреНрдпрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рджреЗрдЧрд╛ред
image_batch, label_batch = next(iter(train_batches.take(1))) image_batch = image_batch.numpy() label_batch = label_batch.numpy() result_batch = model.predict(image_batch) predicted_class_names = imagenet_labels[np.argmax(result_batch, axis=-1)] predicted_class_names
рдирд┐рд╖реНрдХрд░реНрд╖:
array(['Persian cat', 'mink', 'Siamese cat', 'tabby', 'Bouvier des Flandres', 'dishwasher', 'Yorkshire terrier', 'tiger cat', 'tabby', 'Egyptian cat', 'Egyptian cat', 'tabby', 'dalmatian', 'Persian cat', 'Border collie', 'Newfoundland', 'tiger cat', 'Siamese cat', 'Persian cat', 'Egyptian cat', 'tabby', 'tiger cat', 'Labrador retriever', 'German shepherd', 'Eskimo dog', 'kelpie', 'mink', 'Norwegian elkhound', 'Labrador retriever', 'Egyptian cat', 'computer keyboard', 'boxer'], dtype='<U30')
рд▓реЗрдмрд▓ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЪрд▓реЛ рдЕрдм рд╣рдорд╛рд░реА рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдХреБрдЫ рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд▓реЗрдмрд▓ рд▓рдЧрд╛рддреЗ рд╣реИрдВред
plt.figure(figsize=(10, 9)) for n in range(30): plt.subplot(6, 5, n+1) plt.subplots_adjust(hspace=0.3) plt.imshow(image_batch[n]) plt.title(predicted_class_names[n]) plt.axis('off') _ = plt.suptitle("ImageNet predictions")

рднрд╛рдЧ 3: TensorFlow рд╣рдм рдХреЗ рд╕рд╛рде рд▓рд░реНрдирд┐рдВрдЧ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдЕрдм рдПрдХ рдореЙрдбрд▓ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реАрдЦрдиреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TensorFlow рд╣рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреА рдкрд┐рдЫрд▓реА рдкрд░рдд, рдпрд╛ рдХрдИ рдкрд░рддреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
TensorFlow Hub рдореЗрдВ, рдЖрдк рди рдХреЗрд╡рд▓ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ (рдЕрдВрддрд┐рдо рдкрд░рдд рдХреЗ рд╕рд╛рде), рдмрд▓реНрдХрд┐ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдХреЗ рдмрд┐рдирд╛ рднреА рдореЙрдбрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо MobileNet v2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рдж рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ TensorFlow Lite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗред
рд╣рдо рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЖрдВрд╢рд┐рдХ рдореЙрдбрд▓ рдХреЛ TensorFlow Hub (рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдХреЗ рдмрд┐рдирд╛) feature_extractor
ред рдЗрд╕ рдирд╛рдо рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЪрдпрдирд┐рдд рдЧреБрдгреЛрдВ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ) рдХреЗ рдПрдХ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдиреЗ рдЫрд╡рд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдг рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЙрдбрд▓ рдиреЗ рдЫрд╡рд┐ рд╕реЗ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдирд┐рдХрд╛рд▓рд╛ред
URL = 'https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2' feature_extractor = hub.KerasLayer(URL, input_shape=(IMAGE_RES, IMAGE_RES, 3))
рдЪрд▓реЛ feature_extractor
рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝реЙрд░реНрдо (рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк) рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред 32 - рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, 1280 - рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ рд╣рдм рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреА рдЕрдВрддрд┐рдо рдкрд░рдд рдореЗрдВ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред
feature_batch = feature_extractor(image_batch) print(feature_batch.shape)
рдирд┐рд╖реНрдХрд░реНрд╖:
(32, 1280)
рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдкрд░рдд рдореЗрдВ рдЪрд░ "рдлреНрд░реАрдЬ" рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдХреЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛред
feature_extractor.trainable = False
рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдЬреЛрдбрд╝реЗрдВ
рдЕрдм TensorFlow рд╣рдм рд╕реЗ рд▓реЗрдпрд░ рдХреЛ tf.keras.Sequential
рдореЙрдбрд▓ рдореЗрдВ tf.keras.Sequential
рдФрд░ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рдд рдЬреЛрдбрд╝реЗрдВред
model = tf.keras.Sequential([ feature_extractor, layers.Dense(2, activation='softmax') ]) model.summary()
рдирд┐рд╖реНрдХрд░реНрд╖:
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= keras_layer_1 (KerasLayer) (None, 1280) 2257984 _________________________________________________________________ dense (Dense) (None, 2) 2562 ================================================================= Total params: 2,260,546 Trainable params: 2,562 Non-trainable params: 2,257,984 _________________________________________________________________
рдЯреНрд░реЗрди рдХрд╛ рдореЙрдбрд▓
рдЕрдм рд╣рдо рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдордиреЗ compile
рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП fit
рдХрд┐рдпрд╛ рдерд╛ред
model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] ) EPOCHS = 6 history = model.fit(train_batches, epochs=EPOCHS, validation_data=validation_batches)
рдирд┐рд╖реНрдХрд░реНрд╖:
Epoch 1/6 582/582 [==============================] - 77s 133ms/step - loss: 0.2381 - acc: 0.9346 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00 Epoch 2/6 582/582 [==============================] - 70s 120ms/step - loss: 0.1827 - acc: 0.9618 - val_loss: 0.1629 - val_acc: 0.9670 Epoch 3/6 582/582 [==============================] - 69s 119ms/step - loss: 0.1733 - acc: 0.9660 - val_loss: 0.1623 - val_acc: 0.9666 Epoch 4/6 582/582 [==============================] - 69s 118ms/step - loss: 0.1677 - acc: 0.9676 - val_loss: 0.1627 - val_acc: 0.9677 Epoch 5/6 582/582 [==============================] - 68s 118ms/step - loss: 0.1636 - acc: 0.9689 - val_loss: 0.1634 - val_acc: 0.9675 Epoch 6/6 582/582 [==============================] - 69s 118ms/step - loss: 0.1604 - acc: 0.9701 - val_loss: 0.1643 - val_acc: 0.9668
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛, рд╣рдо рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреА ~ 97% рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдмрд╣реБрдд рдЦреВрдм! рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдкрд╣рд▓реЗ рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ ~ 87% рдХреА рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ MobileNet рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рд╕рдордп рдХреА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ ImageNet рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдбрд╝реЗ рд╕рд░рдгреА рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреЗрд░рд╕ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╣рд╛рдирд┐ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВред
acc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss'] epochs_range = range(EPOCHS) plt.figure(figsize=(8, 8)) plt.subplot(1, 2, 1) plt.plot(epochs_range, acc, label=' ') plt.plot(epochs_range, val_acc, label=' ') plt.legend(loc='lower right') plt.title(' ') plt.subplot(1, 2, 2) plt.plot(epochs_range, loss, label=' ') plt.plot(epochs_range, val_loss, label=' ') plt.legend(loc='upper right') plt.title(' ') plt.show()

рдпрд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ рдЬреЛ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рддрдХ рд╣реИрдВред
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбрд╛рдЯрд╛рд╕реЗрдЯ рдкрд░ рд╕рдЯреАрдХрддрд╛ рдХреЛ рд╕рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдФрд╕рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдЙрдк-рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдерд╛ред рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ (рдПрдХ рд╣реА рд╡реГрджреНрдзрд┐) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рддреНрдпрд╛рдкрди рд╕реЗрдЯ рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдЙрддреНрдкрдиреНрди рдЫрд╡рд┐рдпрд╛рдВ рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЫрд╡рд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдЧреНрд░рд╛рдл рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреА:
class_names = np.array(info.features['label'].names) class_names
рдирд┐рд╖реНрдХрд░реНрд╖:
array(['cat', 'dog'], dtype='<U3')
рдореЙрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ:
predicted_batch = model.predict(image_batch) predicted_batch = tf.squeeze(predicted_batch).numpy() predicted_ids = np.argmax(predicted_batch, axis=-1) predicted_class_names = class_names[predicted_ids] predicted_class_names
рдирд┐рд╖реНрдХрд░реНрд╖:
array(['cat', 'cat', 'cat', 'cat', 'dog', 'cat', 'dog', 'cat', 'cat', 'cat', 'cat', 'cat', 'dog', 'cat', 'cat', 'dog', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'dog', 'cat', 'cat', 'dog', 'cat', 'cat', 'dog'], dtype='<U3')
рдЖрдЗрдП рд╕рдЪреНрдЪреЗ рд▓реЗрдмрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВ:
print(": ", label_batch) print(": ", predicted_ids)
рдирд┐рд╖реНрдХрд░реНрд╖:
: [0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1] : [0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 1 0 0 1]
plt.figure(figsize=(10, 9)) for n in range(30): plt.subplot(6, 5, n+1) plt.subplots_adjust(hspace=0.3) plt.imshow(image_batch[n]) color = "blue" if predicted_ids[n] == label_batch[n] else "red" plt.title(predicted_class_names[n].title(), color=color) plt.axis('off') _ = plt.suptitle(" (: , : )")

рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЧреЛрддрд╛рдЦреЛрд░реА
рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдХрд┐ рд╡реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдо рд╢рд╛рдпрдж рд╣реА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ, рддреЛ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдХрд╛рдо рдХреЛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рд╕рдВрдмрдВрдзреА рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рддреЛрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╣реИред рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рдВрдХреЗрдВрджреНрд░рд┐рдд рдкрд░рддреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред

рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдиреЗ рд╕реБрд░рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЖрдЧрдорди рдХреЗ рдмрд╛рдж рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИред рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЧрддрд┐ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдиреБрд╕рдВрдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдиреЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрд░рд┐рдгрд╛рдо рджрд┐рдП рд╣реИрдВред рдХреЙрдиреНрдлреНрд▓реБрдПрдВрд╢рд┐рдпрд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдХрд╛ рдЙрджрдп 2012 рдореЗрдВ рдПрд▓реЗрдХреНрд╕рдиреЗрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдерд╛, рдЬрд┐рд╕реЗ рдПрд▓реЗрдХреНрд╕ рдХреНрд░реЗрдЬреЗрд╡реНрд╕реНрдХреА, рдЗрд▓реНрдпрд╛ рд╕реБрддрд╕рд┐рдПрд╡рд░ рдФрд░ рдЬреЗрдлрд░реА рд╣рд┐рдВрдЯрди рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдЗрдореЗрдЬрдиреЗрдЯ рд▓рд╛рд░реНрдЬ-рд╕реНрдХреЗрд▓ рд╡рд┐рдЬреБрдЕрд▓ рд░рд┐рдХреЙрдЧреНрдирд┐рд╢рди рдЪреИрд▓реЗрдВрдЬ рдЬреАрддрд╛ рдерд╛ред рддрдм рд╕реЗ, рдЙрдЬреНрдЬреНрд╡рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЬреНрдЬреНрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдХреАред рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдкрд░ рдЕрдкрдирд╛ рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рдирдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рд╛рдпрддреНрдд рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ, рд╕рдЬрд╛рддреАрдп рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреА рддрд╛рдХрдд рджрд┐рдЦрд╛рдиреЗ рдФрд░ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рд╕реЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВред
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдФрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрднреА-рдХрднреА рдпрд╣ рд╕рдордЭрдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдХреНрдпрд╛ рд╕реАрдЦрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИред , , , Inception, . . , , , , .
" Python"
Fran├зois Chollet. , . Keras, , " " TensorFlow, MXNET Theano. , , . , .
, , .
(training accuracy) . , , , , Inception, .
, , . Inception v3 ( ImageNet) , Kaggle. Inception, , Inception v3 .
10 () 32 , 2292293. 0.3195, тАФ 0.6377. ImageDataGenerator
, . GitHub .
, "" , . .
, Inception v3 , .



тАФ . .
, () . (), , , , . , , , , .
ReLU- . , ReLU(z) = max(0, z)
.

, , , , , , , , .. , . "" () , , , .
"" . .
, Inveption V3 :



, . , , , , .. , , . , , , "" ( , ).
, , , . , .
Class Activation Map ( ). CAM . 2D , .



, . , , Mixed- Inception V3-, . () , .
, , . , , . , . , , , , .
, "" - . . .
, , .
:
Colab Colab .
TensorFlow Hub
TensorFlow Hub , .
. , , , .
.
Runtime -> Reset all runtimes...
, :
from __future__ import absolute_import, division, print_function, unicode_literals import numpy as np import matplotlib.pyplot as plt import tensorflow as tf tf.enable_eager_execution() import tensorflow_hub as hub import tensorflow_datasets as tfds from tensorflow.keras import layers
:
WARNING:tensorflow: The TensorFlow contrib module will not be included in TensorFlow 2.0. For more information, please see: * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md * https://github.com/tensorflow/addons * https://github.com/tensorflow/io (for I/O related ops) If you depend on functionality not listed there, please file an issue.
import logging logger = tf.get_logger() logger.setLevel(logging.ERROR)
TensorFlow Datasets
TensorFlow Datasets. , тАФ tf_flowers
. , . tfds.splits
(70%) (30%). tfds.load
. tfds.load
, , .
splits = tfds.Split.TRAIN.subsplit([70, 30]) (training_set, validation_set), dataset_info = tfds.load('tf_flowers', with_info=True, as_supervised=True, split=splits)
:
Downloading and preparing dataset tf_flowers (218.21 MiB) to /root/tensorflow_datasets/tf_flowers/1.0.0... Dl Completed... 1/|/100% 1/1 [00:07<00:00, 3.67s/ url] Dl Size... 218/|/100% 218/218 [00:07<00:00, 30.69 MiB/s] Extraction completed... 1/|/100% 1/1 [00:07<00:00, 7.05s/ file] Dataset tf_flowers downloaded and prepared to /root/tensorflow_datasets/tf_flowers/1.0.0. Subsequent calls will reuse this data.
, , () , , тАФ .
num_classes = dataset_info.features['label'].num_classes num_training_examples = 0 num_validation_examples = 0 for example in training_set: num_training_examples += 1 for example in validation_set: num_validation_examples += 1 print('Total Number of Classes: {}'.format(num_classes)) print('Total Number of Training Images: {}'.format(num_training_examples)) print('Total Number of Validation Images: {} \n'.format(num_validation_examples))
:
Total Number of Classes: 5 Total Number of Training Images: 2590 Total Number of Validation Images: 1080
тАФ .
for i, example in enumerate(training_set.take(5)): print('Image {} shape: {} label: {}'.format(i+1, example[0].shape, example[1]))
:
Image 1 shape: (226, 240, 3) label: 0 Image 2 shape: (240, 145, 3) label: 2 Image 3 shape: (331, 500, 3) label: 2 Image 4 shape: (240, 320, 3) label: 0 Image 5 shape: (333, 500, 3) label: 1
тАФ , MobilNet v2 тАФ 224224 (grayscale). image
() label
() .
IMAGE_RES = 224 def format_image(image, label): image = tf.image.resize(image, (IMAGE_RES, IMAGE_RES))/255.0 return image, label BATCH_SIZE = 32 train_batches = training_set.shuffle(num_training_examples//4).map(format_image).batch(BATCH_SIZE).prefetch(1) validation_batches = validation_set.map(format_image).batch(BATCH_SIZE).prefetch(1)
TensorFlow Hub
TensorFlow Hub . , , .
feature_extractor
MobileNet v2. , TensorFlow Hub ( ) . . tf2-preview/mobilenet_v2/feature_vector
, URL MobileNet v2 . feature_extractor
hub.KerasLayer
input_shape
.
URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4" feature_extractor = hub.KerasLayer(URL, input_shape=(IMAGE_RES, IMAGE_RES, 3))
, :
feature_extractor.trainable = False
, . . .
model = tf.keras.Sequential([ feature_extractor, layers.Dense(num_classes, activation='softmax') ]) model.summary()
:
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= keras_layer (KerasLayer) (None, 1280) 2257984 _________________________________________________________________ dense (Dense) (None, 5) 6405 ================================================================= Total params: 2,264,389 Trainable params: 6,405 Non-trainable params: 2,257,984
, .
model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) EPOCHS = 6 history = model.fit(train_batches, epochs=EPOCHS, validation_data=validation_batches)
:
Epoch 1/6 81/81 [==============================] - 17s 216ms/step - loss: 0.7765 - acc: 0.7170 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00 Epoch 2/6 81/81 [==============================] - 12s 147ms/step - loss: 0.3806 - acc: 0.8757 - val_loss: 0.3485 - val_acc: 0.8833 Epoch 3/6 81/81 [==============================] - 12s 146ms/step - loss: 0.3011 - acc: 0.9031 - val_loss: 0.3190 - val_acc: 0.8907 Epoch 4/6 81/81 [==============================] - 12s 147ms/step - loss: 0.2527 - acc: 0.9205 - val_loss: 0.3031 - val_acc: 0.8917 Epoch 5/6 81/81 [==============================] - 12s 148ms/step - loss: 0.2177 - acc: 0.9371 - val_loss: 0.2933 - val_acc: 0.8972 Epoch 6/6 81/81 [==============================] - 12s 146ms/step - loss: 0.1905 - acc: 0.9456 - val_loss: 0.2870 - val_acc: 0.9000
~90% 6 , ! , , ~76% 80 . , MobilNet v2 .
.
acc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss'] epochs_range = range(EPOCHS) plt.figure(figsize=(8, 8)) plt.subplot(1, 2, 1) plt.plot(epochs_range, acc, label='Training Accuracy') plt.plot(epochs_range, val_acc, label='Validation Accuracy') plt.legend(loc='lower right') plt.title('Training and Validation Accuracy') plt.subplot(1, 2, 2) plt.plot(epochs_range, loss, label='Training Loss') plt.plot(epochs_range, val_loss, label='Validation Loss') plt.legend(loc='upper right') plt.title('Training and Validation Loss') plt.show()

, , .
, , .
- MobileNet, . ( augmentation), . .
NumPy. , .
class_names = np.array(dataset_info.features['label'].names) print(class_names)
:
['dandelion' 'daisy' 'tulips' 'sunflowers' 'roses']
next()
image_batch
( ) label_batch
( ). image_batch
label_batch
NumPy .numpy()
. .predict()
. np.argmax()
. .
image_batch, label_batch = next(iter(train_batches)) image_batch = image_batch.numpy() label_batch = label_batch.numpy() predicted_batch = model.predict(image_batch) predicted_batch = tf.squeeze(predicted_batch).numpy() predicted_ids = np.argmax(predicted_batch, axis=-1) predicted_class_names = class_names[predicted_ids] print(predicted_class_names)
:
['sunflowers' 'roses' 'tulips' 'tulips' 'daisy' 'dandelion' 'tulips' 'sunflowers' 'daisy' 'daisy' 'tulips' 'daisy' 'daisy' 'tulips' 'tulips' 'tulips' 'dandelion' 'dandelion' 'tulips' 'tulips' 'dandelion' 'roses' 'daisy' 'daisy' 'dandelion' 'roses' 'daisy' 'tulips' 'dandelion' 'dandelion' 'roses' 'dandelion']
print("Labels: ", label_batch) print("Predicted labels: ", predicted_ids)
:
Labels: [3 4 2 2 1 0 2 3 1 1 2 1 1 2 2 2 0 0 2 2 0 4 1 1 0 4 1 2 0 0 4 0] Predicted labels: [3 4 2 2 1 0 2 3 1 1 2 1 1 2 2 2 0 0 2 2 0 4 1 1 0 4 1 2 0 0 4 0]
plt.figure(figsize=(10,9)) for n in range(30): plt.subplot(6,5,n+1) plt.subplots_adjust(hspace = 0.3) plt.imshow(image_batch[n]) color = "blue" if predicted_ids[n] == label_batch[n] else "red" plt.title(predicted_class_names[n].title(), color=color) plt.axis('off') _ = plt.suptitle("Model predictions (blue: correct, red: incorrect)")

Inception-
TensorFlow Hub tf2-preview/inception_v3/feature_vector
. Inception V3 . , Inception V3 . , Inception V3 299299 . Inception V3 MobileNet V2.
IMAGE_RES = 299 (training_set, validation_set), dataset_info = tfds.load('tf_flowers', with_info=True, as_supervised=True, split=splits) train_batches = training_set.shuffle(num_training_examples//4).map(format_image).batch(BATCH_SIZE).prefetch(1) validation_batches = validation_set.map(format_image).batch(BATCH_SIZE).prefetch(1) URL = "https://tfhub.dev/google/tf2-preview/inception_v3/feature_vector/4" feature_extractor = hub.KerasLayer(URL, input_shape=(IMAGE_RES, IMAGE_RES, 3), trainable=False) model_inception = tf.keras.Sequential([ feature_extractor, tf.keras.layers.Dense(num_classes, activation='softmax') ]) model_inception.summary()
:
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= keras_layer_1 (KerasLayer) (None, 2048) 21802784 _________________________________________________________________ dense_1 (Dense) (None, 5) 10245 ================================================================= Total params: 21,813,029 Trainable params: 10,245 Non-trainable params: 21,802,784
model_inception.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) EPOCHS = 6 history = model_inception.fit(train_batches, epochs=EPOCHS, validation_data=validation_batches)
:
Epoch 1/6 81/81 [==============================] - 44s 541ms/step - loss: 0.7594 - acc: 0.7309 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00 Epoch 2/6 81/81 [==============================] - 35s 434ms/step - loss: 0.3927 - acc: 0.8772 - val_loss: 0.3945 - val_acc: 0.8657 Epoch 3/6 81/81 [==============================] - 35s 434ms/step - loss: 0.3074 - acc: 0.9120 - val_loss: 0.3586 - val_acc: 0.8769 Epoch 4/6 81/81 [==============================] - 35s 434ms/step - loss: 0.2588 - acc: 0.9282 - val_loss: 0.3385 - val_acc: 0.8796 Epoch 5/6 81/81 [==============================] - 35s 436ms/step - loss: 0.2252 - acc: 0.9375 - val_loss: 0.3256 - val_acc: 0.8824 Epoch 6/6 81/81 [==============================] - 35s 435ms/step - loss: 0.1996 - acc: 0.9440 - val_loss: 0.3164 - val_acc: 0.8861
рдкрд░рд┐рдгрд╛рдо
. :
- : , . .
- : . "" , , .
- MobileNet: Google, . MobileNet .
MobileNet . . MobileNet .
тАж call-to-action тАФ , share :)
YouTube
рддрд╛рд░
VKontakte
Ojok .