рдХреИрд╕реЗ рдЕрдЬреАрдм рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ? TensorFlow.NET рд╡рд┐рд╢реНрд▓реЗрд╖рдг

TensorFlow.NET рдФрд░ PVS-Studio

рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордп рдореЗрдВ рди рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рд╕рдВрджрд┐рдЧреНрдз рдФрд░ рдЕрдЬреАрдм рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЖрдШрд╛рдд рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ TensorFlow.NET рдУрдкрди C # рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп TensorFlow рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

рдкрд░рд┐рдЪрдп


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

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

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

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

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

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

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

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

TensorFlow.NET




рдпрд╣ рд▓реЗрдЦ TensorFlow.NET рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИред рдпрд╣ C # рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп TensorFlow рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рд╡реИрд╕реЗ, рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд┐рдпрд╛ рд╣реИ )ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд░реЛрдЪрдХ рд▓рдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди, рдЬрд╛рд╡рд╛ рдФрд░ рдЧреЛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред GitHub

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


TensorFlow.NET рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХрдИ рдЕрд▓рд░реНрдЯ рджрд┐рдЦрд╛рдП: 39 рдЙрдЪреНрдЪ рд╕реНрддрд░, 227 рдордзреНрдпрдо рд╕реНрддрд░ рдФрд░ 154 рдирд┐рдореНрди рд╕реНрддрд░ (рдЖрдк "рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕реНрддрд░ рдФрд░ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ") рдореЗрдВ рдпрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рд╕реНрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╡рд┐рд╢рд╛рд▓ рдмрдирд╛ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддреЗ рдереЗ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдкрд╛рдИ рдЧрдИ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

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

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдЬреЛ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЗрддрдиреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдЬреАрдм рдХреЛрдб рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдШрдмрд░рд╛рд╣рдЯ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдпрдж тА│ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИрдВ the, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рд╡рд╛рд▓ рд╣реЛрдВрдЧреЗ, рдЬрд┐рдирдХреЗ рдЬрд╡рд╛рдм рдЦреЛрдЬрдиреЗ рд╣реЛрдВрдЧреЗред рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рд▓рдЧреЗрдЧрд╛ред


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

рдкрд░рд┐рд╖реНрдХреГрдд рд╕рдВрдЧреНрд░рд╣ рдпрд╛рддреНрд░рд╛


private static void _RemoveDefaultAttrs(....)
{
  var producer_op_dict = new Dictionary<string, OpDef>();
  producer_op_list.Op.Select(op =>
  {
    producer_op_dict[op.Name] = op;
    return op;
  }).ToArray();           
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3010 'ToArray' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред importer.cs 218

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рддреЛрд░реЗ рдХреЛ рдХреЙрд▓ рдХреЛ рд╕рдВрджрд┐рдЧреНрдз рдорд╛рдирддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдХреЛрдб рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрдорд╛рддрд╛_рдУрдкреА_ рдбрд┐рд╕реАрдЯ рдбрд┐рдХреНрд╢рдирд░реА рдХреЛ рдкреНрд░реЛрдбреНрдпреВрд╕рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рддрд╛_рдУрдк_рд▓рд┐рд╕реНрдЯ.рдУрдк рд╕реВрдЪреА рдХреЗ рддрддреНрддреНрд╡реЛрдВ рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ ред ToArray рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПред

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

var producer_op_dict = new Dictionary<string, OpDef>();

foreach (var op in producer_op_list.Op)
{
  producer_op_dict[op.Name] = op;
}

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдб рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рд╕рдорд╛рди рдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

public GraphDef convert_variables_to_constants(....)
{
  ....
  inference_graph.Node.Select(x => map_name_to_node[x.Name] = x).ToArray();
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3010 'ToArray' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред graph_util_impl.cs 48

рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ ToArray рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рд▓реЛрднрди рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди


public GraphDef convert_variables_to_constants(....)
{
  ....
  var source_op_name = get_input_name(node);
  while(map_name_to_node[source_op_name].Op == "Identity")
  {
    throw new NotImplementedException);
    ....
  }
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3020 рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рдлреЗрдВрдХ'ред graph_util_impl.cs 73

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

рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:

public static Tensor[] _SoftmaxCrossEntropyWithLogitsGrad(
  Operation op, Tensor[] grads
)
{
  var grad_loss = grads[0];
  var grad_grad = grads[1];
  var softmax_grad = op.outputs[1];
  var grad = _BroadcastMul(grad_loss, softmax_grad);

  var logits = op.inputs[0];
  if(grad_grad != null && !IsZero(grad_grad)) // <=
  {
    throw new NotImplementedException("_SoftmaxCrossEntropyWithLogitsGrad");
  }

  return new Tensor[] 
  {
    grad,
    _BroadcastMul(grad_loss, -nn_ops.log_softmax(logits))
  };
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'grad_grad! = Null &&! IsZero (grad_grad)' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред nn_grad.cs 93

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ NotImplementedException ("_ SoftmaxCrossEntropyWithLogitsGrad") рдХреЛ рдХрднреА рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдмрд╕ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдХрд╛рд░рдг рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IsZero рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ :

private static bool IsZero(Tensor g)
{
  if (new string[] { "ZerosLike", "Zeros" }.Contains(g.op.type))
    return true;

  throw new NotImplementedException("IsZero");
}

рд╡рд┐рдзрд┐ рдпрд╛ рддреЛ рд╕рд╣реА рд▓реМрдЯрд╛рддреА рд╣реИ рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреА рд╣реИред рдпрд╣ рдХреЛрдб рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ - рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ тА│ рддрдм тА│ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рдХрд▓рд╛ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдкрдХреЛ рдпрд╣ рднреВрд▓рдиреЗ рдирд╣реАрдВ рджреЗрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдкреВрд░реНрдгрддрд╛ рд╣реИ :)

рдХреНрдпрд╛ Tensor Tensor рд╣реИ?


private static Tensor[] _ExtractInputShapes(Tensor[] inputs)
{
  var sizes = new Tensor[inputs.Length];
  bool fully_known = true;
  for(int i = 0; i < inputs.Length; i++)
  {
    var x = inputs[i];

    var input_shape = array_ops.shape(x);
    if (!(input_shape is Tensor) || input_shape.op.type != "Const")
    {
      fully_known = false;
      break;
    }

    sizes[i] = input_shape;
  }
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'Tensor' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред array_grad.cs 154 рдЖрдХреГрддрд┐

рдкрджреНрдзрддрд┐ рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ Tensor рд╣реИ ред рддреЛ input_shape Tensor check рдХрдо рд╕реЗ рдХрдо рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдПрдХ рдмрд╛рд░ рд╡рд┐рдзрд┐ рдиреЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдиреЗ рд╕рдордЭрджрд╛рд░реА рдмрдирд╛ рд▓реА, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реЗрдВрд╕рд░ рдХреА рдмрдЬрд╛рдп рд╣рд╛рд▓рдд рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рд╡рд╛рд░рд┐рд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗред рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


public static Tensor[] _BaseFusedBatchNormGrad(....)
{
  ....
  if (data_format == "NCHW") // <=
    throw new NotImplementedException("");

  var results = grad_fun(new FusedBatchNormParams
  {
    YBackprop = grad_y,
    X = x,
    Scale = scale,
    ReserveSpace1 = pop_mean,
    ReserveSpace2 = pop_var,
    ReserveSpace3 = version == 2 ? op.outputs[5] : null,
    Epsilon = epsilon,
    DataFormat = data_format,
    IsTraining = is_training
  });

  var (dx, dscale, doffset) = (results[0], results[1], results[2]);
  if (data_format == "NCHW") // <=
    throw new NotImplementedException("");

  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА :

  • V3021 рд╕рдорд╛рди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ 'рдпрджрд┐' рдХрдерди рд╣реИрдВред рдкрд╣рд▓реЗ 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдореЗрдердб рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗрдВрд╕рд▓реЗрд╕ nn_grad.cs 230 рд╣реИ
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'data_format == "NCHW"' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред nn_grad.cs 247

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

рдкрд╕рдВрдж рдХрд╛ рднреНрд░рдо


public Tensor Activate(Tensor x, string name = null)
{
  ....
  Tensor negative_part;
  if (Math.Abs(_threshold) > 0.000001f)
  {
    negative_part = gen_ops.relu(-x + _threshold);
  } else
  {
    negative_part = gen_ops.relu(-x + _threshold);
  }
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред gen_nn_ops.activations.cs 156

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

рдПрдХ рд╕рдорд╛рди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреНрдп рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

private static Operation _GroupControlDeps(
  string dev, Operation[] deps, string name = null
)
{
  return tf_with(ops.control_dependencies(deps), ctl =>
  {
    if (dev == null)
    {
      return gen_control_flow_ops.no_op(name);
    }
    else
    {
      return gen_control_flow_ops.no_op(name);
    }
  });
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред control_flow_ops.cs 135

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

рдЪреЗрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд


public static Tensor[] Input(int[] batch_shape = null,
  TF_DataType dtype = TF_DataType.DtInvalid,
  string name = null,
  bool sparse = false,
  Tensor tensor = null)
{
  var batch_size = batch_shape[0];
  var shape = batch_shape.Skip(1).ToArray(); // <=

  InputLayer input_layer = null;
  if (batch_shape != null)                   // <=
    ....
  else
    ....

  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдмреИрдЪ_рд╢реИрдк' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 39, 42. keras.layers.cs 39

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

рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ тА│?


public MnistDataSet(
  NDArray images, NDArray labels, Type dataType, bool reshape // <=
) 
{
  EpochsCompleted = 0;
  IndexInEpoch = 0;

  NumOfExamples = images.shape[0];

  images = images.reshape(
    images.shape[0], images.shape[1] * images.shape[2]
  );
  images = images.astype(dataType);
  // for debug np.multiply performance
  var sw = new Stopwatch();
  sw.Start();
  images = np.multiply(images, 1.0f / 255.0f);
  sw.Stop();
  Console.WriteLine($"{sw.ElapsedMilliseconds}ms");
  Data = images;

  labels = labels.astype(dataType);
  Labels = labels;
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ ' рд░рд┐рд╢реЗрдк ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред MnistDataSet.cs 15

рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд╖рдорддрд╛рдУрдВ рдХреА рддрд░рд╣, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдлреЗрд░рдмрджрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рдЙрд╕реЗ рдпрд╣рд╛рдБ рдлреЗрдВрдХрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ тА│ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реЛрдЧреАред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдРрд╕рд╛ рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред

рдорд╛рдпрд╛рд╡реА рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛


public static Tensor[] _GatherV2Grad(Operation op, Tensor[] grads)
{
  ....
  if((int)axis_static == 0)
  {
    var params_tail_shape = params_shape.slice(new NumSharp.Slice(start:1));
    var values_shape = array_ops.concat(
      new[] { indices_size, params_tail_shape }, 0
    );
    var values = array_ops.reshape(grad, values_shape);
    indices = array_ops.reshape(indices, indices_size);
    return new Tensor[]
    {
      new IndexedSlices(values, indices, params_shape), // <=
      null,
      null
    };
  }
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3146 рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ 1 рддрд░реНрдХ 'рдореВрд▓реНрдпреЛрдВ' рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ ред '_Outputs.FirstOrDefault ()' рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрд╢рдХреНрдд рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред array_grad.cs 199

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП :

public IndexedSlices(
  Tensor values, Tensor indices, Tensor dense_shape = null
)
{
  _values = values;
  _indices = indices;
  _dense_shape = dense_shape;

  _values.Tag = this; // <=
}

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдорд╛рди рдЪрд░ рдореЗрдВ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ?

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбреЗрдЯрд╛-рдлреНрд▓реЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдореЗрдВ рдЪрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЪрд░ рдореЗрдВ рдЕрд╢рдХреНрдд рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: _outputs.FirstOrDefault () ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ рдЪрд░ рдХрд╛ рдорд╛рди array_ops.reshape (рдЧреНрд░реЗрдб, рдорд╛рди_рд╢реИрдк) рдХрд╣рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рддреЛ рдХрд╣рд╛рдБ _outputs.FirstOrDefault () рддреЛ ?

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп, рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рднреА рдХреЛ рднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рд╛рдзрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐ array_ops.reshape (рд╕реНрдирд╛рддрдХ, values_shape) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ ) _outputs.FirstOrDefault ( , рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдВрддрддрдГ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реАрд╢реЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЬрд╛рдПрдВ :

public static Tensor reshape<T1, T2>(T1 tensor, T2 shape, string name = null)
            => gen_array_ops.reshape(tensor, shape, null);

рдлрд┐рд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХреГрддрд┐ рдмрджрд▓реЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдмреБрд▓рд╛рдпрд╛:
public static Tensor reshape<T1, T2>(T1 tensor, T2 shape, string name = null)
{
  var _op = _op_def_lib._apply_op_helper(
    "Reshape", name, new { tensor, shape }
  );
  return _op.output;
}

_Apply_op_helper рдлрд╝рдВрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ рдЧреБрдг рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдкрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

public Tensor output => _outputs.FirstOrDefault();

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

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реБрдП рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ _outputs рдореЗрдВ рддрддреНрд╡ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ ред

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

рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рддреАрдХреНрд╖рд╛?


private (LoopVar<TItem>, Tensor[]) _BuildLoop<TItem>(
  ....
) where ....
{
  ....
  // Finds the closest enclosing non-None control pivot.
  var outer_context = _outer_context;
  object control_pivot = null;
  while (outer_context != null && control_pivot == null) // <=
  {

  }

  if (control_pivot != null)
  {

  }
  ....
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3032 рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреБрдЫ рдЪрд░ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдЪрд░ (рдУрдВ) рдпрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬрдмрдХрд┐ Context.cs 212

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

рд╕реАрдорд╛рдПрдБ рддреЛрдбрд╝рдирд╛


public TensorShape(int[][] dims)
{
  if(dims.Length == 1)
  {
    switch (dims[0].Length)
    {
      case 0: shape = new Shape(new int[0]); break;
      case 1: shape = Shape.Vector((int)dims[0][0]); break;
      case 2: shape = Shape.Matrix(dims[0][0], dims[1][2]); break; // <=
      default: shape = new Shape(dims[0]); break;
    }
  }
  else
  {
    throw new NotImplementedException("TensorShape int[][] dims");
  }
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3106 рд╕рдВрднрд╡рддрдГ рд╕реВрдЪрдХрд╛рдВрдХ рдмрд╛рдзреНрдп рд╣реИред '1' рдЗрдВрдбреЗрдХреНрд╕ 'рдбреАрдореНрд╕' рдмрд╛рдЙрдВрдб рд╕реЗ рдкрд░реЗ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред TensorShape.cs 107

рдХреЛрдб рдХреЗ рдЕрдЬреАрдм рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрд▓рддреА рдереА, рдЬрд┐рд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреБрдХрдбрд╝рд╛ рдпрд╣рд╛рдБ рдЧрд▓рдд рд╣реИ: dims [1] [реи] ред рдПрдХ рддрддреНрд╡ рдХреЗ рдПрдХ рд╕рд░рдгреА рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ 1 рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдЖрдк рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрджрд▓рдХрд░ dims [0] [2] рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - dims [0] рд╕рд░рдгреА рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ 2 рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ , рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреА рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реИ 2. рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрдиреАред рдорд╛рдиреЛ "рдбрдмрд▓ рдмреЙрдЯрдо" рдХреЗ рд╕рд╛рдеред

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

Olepatka?


private void _init_from_args(object initial_value = null, ....) // <=
{
  var init_from_fn = initial_value.GetType().Name == "Func`1"; // <=
  ....
  tf_with(...., scope =>
  {
    ....
    tf_with(...., delegate
    {
      initial_value = ops.convert_to_tensor(  // <=
        init_from_fn ? (initial_value as Func<Tensor>)():initial_value,
        name: "initial_value",
        dtype: dtype
      );
    });
    _shape = shape ?? (initial_value as Tensor).TensorShape;
    _initial_value = initial_value as Tensor; // <=
    ....
    _dtype = _initial_value.dtype.as_base_dtype(); // <=

    if (_in_graph_mode)
    {
      ....

      if (initial_value != null) // <=
      {
        ....
      }

      ....
    }

    ....
  });
}

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, tf_with рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рд╕рд╛рд░реНрдердХ рд╣реИ:

[DebuggerStepThrough] // with "Just My Code" enabled this lets the 
[DebuggerNonUserCode()]  //debugger break at the origin of the exception
public static void tf_with<T>(
  T py, Action<T> action
) where T : ITensorFlowObject
{
  try
  {
    py.__enter__();
    action(py);
  }
  finally
  {
    py.__exit__();
    py.Dispose();
  }
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА : V3019 рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрд▓рдд рдЪрд░ рдХреА рддреБрд▓рдирд╛ 'рдЯрд╛рдЗрдк' рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж рд╢реВрдиреНрдп рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЪрд░ 'рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рд╡рд╛рдпреБ', '_initial_value' рджреЗрдЦреЗрдВред ResourceVariable.cs 137

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

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

рджреВрд╕рд░реА рдмрд╛рдд, рд╕рддреНрдпрд╛рдкрдиinitial_value рдХреЛ рдЕрд╢рдХреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдЕрдЬреАрдм рд▓рдЧ: рдЕрдЧрд░ initial_value рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрди рдЧрдпрд╛ рдЕрд╢рдХреНрдд рдмреБрд▓рд╛ рдХреЗ рдмрд╛рдж ops.convert_to_tensor , рддреЛ _initial_value рд╣реЛрдЧрд╛ рдЕрд╢рдХреНрдд , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлреЛрди рдХрд░рдиреЗ _initial_value.dtype.as_base_dtype () рднреА рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╣реЛрдЧрд╛ред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ _initial_value , рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЪрд░ рдХрд╛ рдЬрд┐рдХреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдХрд▓реНрдк рднреА рдЧрд▓рдд рд╣реЛрдЧрд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЗрд╕ рдЫреЛрдЯреА рд╕реА рдЧрд▓рддреА рдХреЛ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛? рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд╕рдВрджреЗрд╣ рд╣реИред

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


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

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


рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдирд┐рдХрд┐рддрд╛ рд▓рд┐рдкрд┐рд▓рд┐рдиред рдХреИрд╕реЗ рдЕрдЬреАрдм рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ? TensorFlow.NET рд╡рд┐рд╢реНрд▓реЗрд╖рдг ред

All Articles