рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рд╕рд╛рдерд┐рдпреЛрдВ!
рд╢рд╛рдпрдж рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдЗрд╕ рдкреБрд╕реНрддрдХ рдХреЛ рд╣рдорд╛рд░реЗ рдкреВрд░реНрд╡-рдХреНрд░рдо рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рдиреЗ рднреА рдорд╢реАрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЧрд╣рди рд╕реАрдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ
рдлреНрд░реЗрдВрдХреЛрдЗрд╕ рд╢реЙрд▓реЗрдЯ рдиреЗ рдЦреБрдж
рдЗрд╕ рд╡рд┐рд╖рдп рдХреА
рдЕрдирджреЗрдЦреА рдирд╣реАрдВ рдХреА рдереА ред рд╣рдо рдмрд┐рд▓реНрд▓реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ Tensorflow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
TensorFlow.js рд▓реЛрдХрдкреНрд░рд┐рдп рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдореГрджреНрдз рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдм
рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХреБрдЫ рд╣реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ
рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ ,
рд╕рдВрдЧреАрдд рдкреАрдврд╝реА рдпрд╛
рдорд╛рдирд╡ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Tensorflow.js рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╛рд▓ Node.js рдХреЗ
рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, TensorFlow.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрдХрдПрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдкрд╛рдпрдерди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкрд░ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ ...рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рджреГрд╢реНрдп рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП TensorFlow.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
рдкреНрд░рд▓реЗрдЦрди рдФрд░
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдиреЗ рдЕрднреА рддрдХ Node.js. рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рджреЗрдирд╛ рдкрдбрд╝рд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЙрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рднреА рдореИрдВрдиреЗ
рдЗрд╕реЗ рдХрд┐рдпрд╛ ! рд╣реБрд░реНрд░реЗ!
рдХреЛрдб рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВредTensorFlowTensorFlow рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред TensorFlow рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдиреНрдп рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ Google рджреНрд╡рд╛рд░рд╛ рдирд╡рдВрдмрд░ 2015 рдореЗрдВ рдЬрд╛рд░реА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ,
рдЬреЛ рдореВрд▓
рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ред рдирд┐рд░реНрдорд┐рдд рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реАрдкреАрдпреВ рдпрд╛ рдЬреАрдкреАрдпреВ рдкрд░ рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдЬреАрдкреАрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдереАред
рд╣рд╛рд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рдиреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ред
TensorFlow LiteTensorflow Lite , рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг, рдордИ 2017 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде, рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд╣рд░реЗ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ
рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред MobileNet рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреБрд╢рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ред
TensorFlow.js
Tensorflow Lite рдХреЗ рдмрд╛рдж, TensorFlow.js рдХреА
рдШреЛрд╖рдгрд╛ рдорд╛рд░реНрдЪ 2018 рдореЗрдВ
рдХреА рдЧрдИ рдереАред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ
deeplearn.js рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред WebGL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ GPU рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ, рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдмрд╛рдж рдореЗрдВ TensorFlow.js рдХреЛ Node.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП
tfjs-node
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдРрдб- tfjs-node
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рдХреЛ TensorFlow.js рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВрд░реЗрдбреА-рдореЗрдб TensorFlow рдФрд░ Keras рдореЙрдбрд▓ TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ
рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ, рдкреЛрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЗ-рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдореЙрдбрд▓
рдЧрд┐рдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред
Node.js рдХреЗ рд╕рд╛рде TensorFlow.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
TensorFlow.js рдХреЛ
NPM рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
npm install @tensorflow/tfjs @tensorflow/tfjs-node // ... npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu
Node.js рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреЗрд╢реА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдорд╛рдВрдЧ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ Tensorflow рдХреЗ рд▓рд┐рдП
JavaScript API рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди API рдирд╣реАрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ Node.js. рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ
const tf = require('@tensorflow/tfjs')
TensorFlow рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВTensorFlow.js рдПрдХ
NPM рд▓рд╛рдЗрдмреНрд░реЗрд░реА (
tfjs-models
) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ
рдЪрд┐рддреНрд░реЛрдВ рдХреЛ
рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ ,
рдкреЙрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░
рдХреЗ-рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЛ рд╕рд░рд▓
tfjs-models
рд╣реИ ред
MobileNet рдХреА рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг
рдореЙрдбрд▓ рдПрдХ рдЧрд╣рд░реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬреЛ
рдЫрд╡рд┐рдпреЛрдВ рдХреЗ 1000 рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ
рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП README рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
import * as mobilenet from '@tensorflow-models/mobilenet';
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╣реБрдИ рдереА, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб Node.js. рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
Error: browserHTTPRequest is not supported outside the web browser.
рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореЛрдмрд┐рд▓рдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
tf.Model
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
load()
рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрд╛рд╣рд░реА HTTP рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рдЖрд╡рд╢реНрдпрдХ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреА рд╣реИ рдФрд░ TensorFlow рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддреА рд╣реИред
рд▓реЗрдЦрди рдХреЗ рд╕рдордп Node.js рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрддрд┐рд╢реАрд▓ рдореЙрдбрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдЬреЛ рдХреБрдЫ рднреА рдерд╛ рд╡рд╣ рд╕рднреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ ...рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛рдпрджрд┐ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдХреНрд▓рд╛рд╕ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рддреЛ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреА
load
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрде рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрддреЗ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ HTTP рдкрддреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдЪрд░
path
рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬрдм
load
рд╡рд┐рдзрд┐ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ,
рддреЛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдбрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЖрдЧ рд▓рдЧ рдЬрд╛рдПрдЧреА; рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░-рдЖрдзрд╛рд░рд┐рдд HTTP рдбрд╛рдЙрдирд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
const path = "mobilenet/model.json" const mn = new mobilenet.MobileNet(1, 1); mn.path = `file://${path}` await mn.load()
рдХреВрд▓, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рд▓реЗрдХрд┐рди рдореЙрдбрд▓ рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИрдВ?
рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓TensorFlow.js рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдФрд░ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореЙрдбрд▓ рд╡рдЬрдиред рдмреНрд░рд╛рдЙрдЬрд░ рдХреИрдЪрд┐рдВрдЧ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рд╡реЗрдЯ рдХреЛ рдЕрдХреНрд╕рд░ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
MobileNet рдореЙрдбрд▓
рдХреЗ рд▓рд┐рдП
рд╕реНрд╡рдд: рдбрд╛рдЙрдирд▓реЛрдб рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддреЗ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдореЙрдбрд▓, рдЙрдирдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рд╡рдЬрди рдХреЗ рдЯреБрдХрдбрд╝реЗ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v${version}_${alpha}_${size}/
URL рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░
рдпрд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ
рд╣реИрдВ ред рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рднреА рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ v1 рдХреЗ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЛ
tensorflow-models/mobilenet
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
HTTP рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЛрдб рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдерд╛рди рд╕реЗ
model.json
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░
model.json
рд╕рд╛рде рдореЙрдбрд▓ рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╛рдЗрд▓ рд╣реИрдВ
groupX-shard1of1
ред
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╕рднреА рднрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдореИрдВ 1.0 рдХреЗ рдЕрд▓реНрдлрд╛ рдорд╛рди рдФрд░ 224 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде MobileNet V1 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ ред рддреЛ рдореБрдЭреЗ рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП
рдирд┐рдореНрди URL рдорд┐рд▓рддрд╛ рд╣реИред
https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/model.json
рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рд╕рднреА рд╡реЗрдЯреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
jq
рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
$ cat model.json | jq -r ".weightsManifest[].paths[0]" group1-shard1of1 group2-shard1of1 group3-shard1of1 ...
sed
рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рдЬрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП URL рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ HTTP рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдЙрдкрд╕рд░реНрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
$ cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//' https:
parallel
рдФрд░
curl
рдХрдорд╛рдВрдб рддрдм рдЖрдкрдХреЛ рдЗрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//' | parallel curl -O
рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдгTensorFlow.js рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛
рдпрд╣ рдирдореВрдирд╛ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПред
const img = document.getElementById('img');
DOM рд╕рдкреЛрд░реНрдЯ рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг Node.js рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
classify
рд╡рд┐рдзрд┐ рд╡рд┐рднрд┐рдиреНрди DOM рддрддреНрд╡реЛрдВ (
canvas
,
video
,
image
) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рддрддреНрд╡реЛрдВ рд╕реЗ "рдЪрд┐рддреНрд░" рдмрд╛рдЗрдЯреНрд╕ рдХреЛ
tf.Tensor3D
рд╡рд░реНрдЧ рдореЗрдВ
tf.Tensor3D
, рдФрд░ рдореЙрдбрд▓ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ,
tf.Tensor3D
рдХреЛ рд╕реАрдзреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ DOM рддрддреНрд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ рдХрд┐ tf.Tensor3D
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ ред
рд╣рдо рдЫрд╡рд┐ рд╕реЗ Tensor3D рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВDOM рддрддреНрд╡реЛрдВ рдХреЛ Tensor3D рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ
рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЗ
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ Tensor3D рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
const values = new Int32Array(image.height * image.width * numChannels);
pixels
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ
(Int32Array)
рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИред
numChannels
рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
JPEG рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╡реИрд▓реНрдпреВ рдмрдирд╛рдирд╛jpeg-js
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП Node.js рдХреЗ рд▓рд┐рдП JPEG рдПрдирдХреЛрдбрд░ / рдбрд┐рдХреЛрдбрд░ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП RGB рдорд╛рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
const pixels = jpeg.decode(buffer, true);
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ (
width * height
) рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдЪреИрдирд▓ рдорд╛рди (
RGBA
) рдХреЗ рд╕рд╛рде Uint8Array рдорд┐рд▓рддрд╛ рд╣реИред MobileNet рдореЙрдбрд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддреАрди рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ (
RGB
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдЪрд╛рд░-рдЪреИрдирд▓ рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕рдЪреНрдЪреЗ рддреАрди-рдЪреИрдирд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
const numChannels = 3; const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) { for (let channel = 0; channel < numChannels; ++channel) { values[i * numChannels + channel] = pixels[i * 4 + channel]; } }
MobileNet рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБрдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛
рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓ 224 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЙрдЪреНрдЪ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдЯреЗрдирд░реНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рддреАрди рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП -1 рд╕реЗ 1 рдХреА рд╕реАрдорд╛ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЕрд▓рдЧ рдЖрдпрд╛рдо рд╡рд╛рд▓реА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реА рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JPEG рдбрд┐рдХреЛрдбрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рди 0 - 255, рдирдВ -1 - 1. рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реИрдВред рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
TensorFlow.js рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рдПрдХ
рд╡рд┐рд╢реЗрд╖ tfjs-models/mobilenet
рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ !рдбреЗрд╡рд▓рдкрд░ рдЗрдирдкреБрдЯ Tensor3Ds рдХреЗ рдкреНрд░рдХрд╛рд░
int32
, рд╕рд╛рде рд╣реА
classify
рдкрджреНрдзрддрд┐ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреЛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╕реБрдкрд░!
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдБ рд╣реЛ рд░рд╣реА рд╣реИрдВTensorflow рдХреЗ MobileNet рдореЙрдбрд▓
ImageNet рдХреЗ рдбреЗрдЯрд╛
рд╕реЗрдЯ рд╕реЗ
1000 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╕реАрдЦрддреЗ рд╣реИрдВред рдореЙрдбрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рдВрднрд╛рд╡реНрдп рдореВрд▓реНрдп рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧреАрдХреГрдд рдЫрд╡рд┐ рдореЗрдВ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреНрдпрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИ ред
tfjs-models/mobilenet
MobileNet
рдХреНрд▓рд╛рд╕ рдореЗрдВ
classify
рдкрджреНрдзрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреЛ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ
MobileNet
X рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИред
const predictions = await mn_model.classify(input, 10);
predictions
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХреНрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред
{ className: 'panda', probability: 0.9993536472320557 }
рдЙрджрд╛рд╣рд░рдгрдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ Node.js рдореЗрдВ TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ MobileNet рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЫрд╡рд┐ рдХреЛ рдХреИрд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреА рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдбрдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреИрдХреЗрдЬ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
{ "name": "tf-js", "version": "1.0.0", "main": "script.js", "license": "MIT", "dependencies": { "@tensorflow-models/mobilenet": "^0.2.2", "@tensorflow/tfjs": "^0.12.3", "@tensorflow/tfjs-node": "^0.1.9", "jpeg-js": "^0.3.4" } }
const tf = require('@tensorflow/tfjs') const mobilenet = require('@tensorflow-models/mobilenet'); require('@tensorflow/tfjs-node') const fs = require('fs'); const jpeg = require('jpeg-js'); const NUMBER_OF_CHANNELS = 3 const readImage = path => { const buf = fs.readFileSync(path) const pixels = jpeg.decode(buf, true) return pixels } const imageByteArray = (image, numChannels) => { const pixels = image.data const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) { for (let channel = 0; channel < numChannels; ++channel) { values[i * numChannels + channel] = pixels[i * 4 + channel]; } } return values } const imageToInput = (image, numChannels) => { const values = imageByteArray(image, numChannels) const outShape = [image.height, image.width, numChannels]; const input = tf.tensor3d(values, outShape, 'int32'); return input } const loadModel = async path => { const mn = new mobilenet.MobileNet(1, 1); mn.path = `file://${path}` await mn.load() return mn } const classify = async (model, path) => { const image = readImage(path) const input = imageToInput(image, NUMBER_OF_CHANNELS) const mn_model = await loadModel(model) const predictions = await mn_model.classify(input) console.log('classification results:', predictions) } if (process.argv.length !== 4) throw new Error('incorrect arguments: node script.js <MODEL> <IMAGE_FILE>') classify(process.argv[2], process.argv[3])
рдкрд░реАрдХреНрд╖рдгрдКрдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдореЛрдмрд┐рд▓рдиреЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЙрдбрд▓ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
NPM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░реЗрдВ
npm install
рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ JPEG рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
wget http://bit.ly/2JYSal9 -O panda.jpg

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рддрд░реНрдХ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рд╣реЛрдВрдЧреЗред
node script.js mobilenet/model.json panda.jpg
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
classification results: [ { className: 'giant panda, panda, panda bear, coon bear', probability: 0.9993536472320557 } ]
рдЫрд╡рд┐ рдХреЛ 99.93% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкрд╛рдВрдбрд╛ рдпреБрдХреНрдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
рдирд┐рд╖реНрдХрд░реНрд╖TensorFlow.js рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреЗ рдЧрд╣рд░реЗ рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ Node.js рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдЯреВрд▓ рдФрд░ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬрд╝ рдЗрд╕ рдирдП рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреА рджреГрд╢реНрдп рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦрд╛ред