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

рд╣рд░ 2-3 рджрд┐рдиреЛрдВ рдореЗрдВ рдирдП рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА
- рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдЯреНрд░рди рдХреЗ рд╕рд╛рде рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░
- рдкрд░рд┐рдЪрдп
- рдХреБрддреНрддреЛрдВ рдФрд░ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдбреЗрдЯрд╛рд╕реИрдЯ
- рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рдЫрд╡рд┐рдпрд╛рдБ
- рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВред рднрд╛рдЧ 1
- рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВред рднрд╛рдЧ реи
- рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдмрд╛рддрдЪреАрдд рдСрдкрд░реЗрд╢рди
- рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╕реЗ рд╕рдмрд╕рдореНрдкрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди
- рдХреЛрд▓реИрдм: рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ
- рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдФрд░ рд╕рд┐рдЧреНрдореЙрдЗрдб
- рдирд┐рд░реАрдХреНрд╖рдг
- рдЫрд╡рд┐ рд╡рд┐рд╕реНрддрд╛рд░
- рдЕрдкрд╡рд╛рдж
- CoLab: рдХреБрддреНрддреЛрдВ рдФрд░ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВред рджреБрд╣рд░рд╛рд╡
- рдореБрдВрд╣рддреЛрдбрд╝ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрдХрдиреАрдХреЗрдВ
- рд╡реНрдпрд╛рдпрд╛рдо: рд░рдВрдЧ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг
- рдкрд░рд┐рдгрд╛рдо
рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдФрд░ рд╕рд┐рдЧрдореЙрдЗрдб
рдЕрдкрдиреЗ рдЖрдЦрд┐рд░реА рд╣рд╛рдереЛрдВ рдореЗрдВ рдХреЛрд▓реИрдм рдкрд░, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(2, activation='softmax') ])
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рдЕрдВрддрд┐рдо рдкрд░рдд (рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░) рдореЗрдВ рджреЛ рдЖрдЙрдЯрдкреБрдЯ рдиреНрдпреВрд░реЙрдиреНрд╕ рдФрд░ softmax
рд╕рдХреНрд░рд┐рдпрдг softmax
рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реА рдкрд░рдд рд╢рд╛рдорд┐рд▓ рд╣реИ:
tf.keras.layers.Dense(2, activation='softmax')
рдмрд╛рдЗрдирд░реА рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 1 рдЖрдЙрдЯрдкреБрдЯ рдиреНрдпреВрд░реЙрди рдФрд░ sigmoid
рд╕рдХреНрд░рд┐рдпрдг sigmoid
рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдкрд░рдд рд╢рд╛рдорд┐рд▓ sigmoid
:
tf.keras.layers.Dense(1, activation='sigmoid')
рдпреЗ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдирд░реА рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдХреНрдпрд╛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЗрдВ sigmoid
рд╕рдХреНрд░рд┐рдпрдг sigmoid
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ binary_crossentropy
sparse_categorical_crossentropy
рд╕реЗ binary_crossentropy
рдореЗрдВ sparse_categorical_crossentropy
model.compile()
рд╡рд┐рдзрд┐ рдореЗрдВ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
рдорд╛рдиреНрдпрддрд╛
рдкрд┐рдЫрд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ accuracy
рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдорд╛рд░реЗ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рдЯреАрдХрддрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ред рдЬрдм рд╣рдордиреЗ рдлреИрд╢рди MNIST рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ 97% рд╕рдЯреАрдХрддрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдХреЗрд╡рд▓ 92% рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред рдпрд╣ рд╕рдм рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдкреАрдЫреЗ рд╣рдЯ рдЧрдпрд╛ рдерд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рдкрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдлрд┐рд░ рд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдХреНрд╕рд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд╣рдорд╛рд░рд╛ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ "рджреЗрдЦрддрд╛ рд╣реИ" рдФрд░ рдЖрдВрддрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ - рднрд╛рд░ рдФрд░ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рд╕реЗрдЯ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗрд╡рд▓ рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЗрд╕ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдореЙрдбрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдиреЗ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЛ рдПрдХ рдирдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реАрдЦрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рддреНрдпрд╛рдкрди рд╕реЗрдЯ рдкрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреА рдХрд┐ рдореЙрдбрд▓ рдкреАрдЫреЗ рд╣рдЯ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
CoLab рдореЗрдВ, рдЬреЛ рд╣рдордиреЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдКрдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рд╣рдордиреЗ рдЕрдкрдиреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ 15 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ред
Epoch 15/15 10/10 [===] - loss: 1.0124 - acc: 0.7170 20/20 [===] - loss: 0.0528 - acc: 0.9900 - val_loss: 1.0124 - val_acc: 0.7070
рдпрджрд┐ рд╣рдо рдкрдВрджреНрд░рд╣рд╡реЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдХрд╛рдлреА рдХрдо рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ - 0.9900
рдмрдирд╛рдо 0.7070
ред
рдпрд╣ рдореБрдВрд╣рддреЛрдбрд╝ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рд╣реИред рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕рд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕реЗ рд╣реА рдПрдХ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд╕рдЯреАрдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдиреЗ "рдирд╣реАрдВ" рджреЗрдЦрд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдП рд╣реИрдВред
рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ:

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

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

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

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

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

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

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

рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╕рд╛рд░ рдФрд░ рд╡рд╛рдкрд╕ рдкреНрд░рд╕рд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреГрдердХ рджреЛ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рд╣реЛрддреА рд╣реИред
рджреВрд╕рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рдиреНрдпреВрд░реЙрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░реЗрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рд╕рд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ, рд╣рдо рдЗрди рддреАрди рдиреНрдпреВрд░реЙрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо, рддреАрд╕рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдЗрди рджреЛ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ:

рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рд╕рд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдХреЗ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╢рд┐рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдиреНрдпреВрд░реЙрдиреНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреНрдп рдиреНрдпреВрд░реЙрдиреНрд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрдЙрдЯрдкреБрдЯ рдореВрд▓реНрдп рдХреЗ рдЧрдарди рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдХреНрд░рд┐рдп рднрд╛рдЧ рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рднреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рд╣рдо рдЦреБрдж рдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рдиреНрдпреВрд░реЙрдиреНрд╕ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдФрд╕рддрди рдкреНрд░рддреНрдпреЗрдХ рдиреНрдпреВрд░реЙрди рдХреЛ рдПрдХ рд╣реА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
CoLab: рдХреБрддреНрддреЛрдВ рдФрд░ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВред рджреБрд╣рд░рд╛рд╡
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ CoLab рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рд░реВрд╕реА рдореЗрдВ рдХреЛрд▓реИрдм рдЙрдкрд▓рдмреНрдз рд╣реИред
рдмрд┐рд▓реНрд▓реА рдмрдирд╛рдо рдХреБрддреНрддреЗ: рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tf.keras.Sequential
рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдФрд░ tf.keras.Sequential
рдХрд╛ рдЙрдкрдпреЛрдЧ tf.keras.Sequential
ред
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЪрд╛рд░:
рд╣рдо рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рд╕рд╣рдЬ рд╕рдордЭ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ:
tf.keras.preprocessing.image.ImageDataGenerator
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ ( рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди ) рдХреЗ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ?)- рдореБрдХрд░рдирд╛ - рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
- рдбреЗрдЯрд╛ рд╡реГрджреНрдзрд┐ рдФрд░ рдбреНрд░реЙрдкрдЖрдЙрдЯ рдкрджреНрдзрддрд┐ рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрдХрдиреАрдХреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред
рд╣рдо рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдореЙрдбрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ:
- рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╕рдордЭреЗрдВ
- рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
- рдореЙрдбрд▓ рдмрдирд╛рдПрдБ
- рдЯреНрд░реЗрди рдХрд╛ рдореЙрдбрд▓
- рдЯреЗрд╕реНрдЯ рдореЙрдбрд▓
- рдореЙрдбрд▓ / рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо ...
рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреЛрдб рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ -> рд╢реАрд░реНрд╖ рдореЗрдиреВ рдореЗрдВ рд╕рднреА рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ ред рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА, рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдпрд╛ рдХрдИ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЖрдпрд╛рдд рдкреИрдХреЗрдЬ
рдЖрдЗрдП рдЙрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
os
- рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрдврд╝реЗрдВ;numpy
- numpy
рдмрд╛рд╣рд░ рдХреБрдЫ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП;matplotlib.pyplot
- рдПрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд▓реЙрдЯ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред
from __future__ import absolute_import, division, print_function, unicode_literals import os import matplotlib.pyplot as plt import numpy as np
TensorFlow
рдЖрдпрд╛рдд TensorFlow
:
import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator
import logging logger = tf.get_logger() logger.setLevel(logging.ERROR)
рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╣рдо рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рд╕реЗрдЯ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХрд╛рдЧрд▓реЗ рд╕реЗрд╡рд╛ рд╕реЗ рд╕реЗрдЯ рдбреЙрдЧреНрд╕ рдмрдирд╛рдо рдХреИрдЯреНрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ (рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдбреЗрдЯрд╛ рд╕реЗрдЯ Microsoft рдЕрдиреБрд╕рдВрдзрд╛рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдЕрддреАрдд рдореЗрдВ, CoLab рдФрд░ рдореИрдВрдиреЗ рдЦреБрдж TensorFlow Dataset рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдХрд╛рдо рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕ CoLab рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдбрд┐рд╕реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП tf.keras.preprocessing.image.ImageDataGenerator
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдбреЙрдЧ рд╡реАрдПрд╕ рдХреИрдЯреНрд╕ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
_URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip' zip_dir = tf.keras.utils.get_file('cats_and_dogs_filterted.zip', origin=_URL, extract=True)
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
cats_and_dogs_filtered |__ train |______ cats: [cat.0.jpg, cat.1.jpg, cat.2.jpg ...] |______ dogs: [dog.0.jpg, dog.1.jpg, dog.2.jpg ...] |__ validation |______ cats: [cat.2000.jpg, cat.2001.jpg, cat.2002.jpg ...] |______ dogs: [dog.2000.jpg, dog.2001.jpg, dog.2002.jpg ...]
рдирд┐рджреЗрд╢рдХреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
zip_dir_base = os.path.dirname(zip_dir) !find $zip_dir_base -type d -print
рдЖрдЙрдЯрдкреБрдЯ (рдЬрдм рдХреЛрд▓реИрдм рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ):
/root/.keras/datasets /root/.keras/datasets/cats_and_dogs_filtered /root/.keras/datasets/cats_and_dogs_filtered/train /root/.keras/datasets/cats_and_dogs_filtered/train/dogs /root/.keras/datasets/cats_and_dogs_filtered/train/cats /root/.keras/datasets/cats_and_dogs_filtered/validation /root/.keras/datasets/cats_and_dogs_filtered/validation/dogs /root/.keras/datasets/cats_and_dogs_filtered/validation/cats
рдЕрдм рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ:
base_dir = os.path.join(os.path.dirname(zip_dir), 'cats_and_dogs_filtered') train_dir = os.path.join(base_dir, 'train') validation_dir = os.path.join(base_dir, 'validation') train_cats_dir = os.path.join(train_dir, 'cats') train_dogs_dir = os.path.join(train_dir, 'dogs') validation_cats_dir = os.path.join(validation_dir, 'cats') validation_dogs_dir = os.path.join(validation_dir, 'dogs')
рдбреЗрдЯрд╛ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ (рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдореЗрдВ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдХрд┐рддрдиреА рдЫрд╡рд┐рдпрд╛рдВ рд╣реИрдВред
num_cats_tr = len(os.listdir(train_cats_dir)) num_dogs_tr = len(os.listdir(train_dogs_dir)) num_cats_val = len(os.listdir(validation_cats_dir)) num_dogs_val = len(os.listdir(validation_dogs_dir)) total_train = num_cats_tr + num_dogs_tr total_val = num_cats_val + num_dogs_val
print(' : ', num_cats_tr) print(' : ', num_dogs_tr) print(' : ', num_cats_val) print(' : ', num_dogs_val) print('--') print(' : ', total_train) print(' : ', total_val)
рдирд┐рд╖реНрдХрд░реНрд╖:
: 1000 : 1000 : 500 : 500 -- : 2000 : 1000
рдореЙрдбрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
BATCH_SIZE = 100
рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рд░рд┐рдЯреНрд░реЗрд╕реНрдЯрд┐рдВрдЧ рдЖрдорддреМрд░ рдкрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╣реЛрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдХреА рдХрдореА рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рд╕рд╣реА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ред рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореВрд▓ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрджреНрд╡рд┐рддреАрдп рдЗрдирдкреБрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдлрд┐рд░ рдХрднреА рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рдХреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
tf.keras
рдХрд╛ рдЙрдкрдпреЛрдЧ tf.keras
рд╣рдо рдРрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ImageDataGenerator
рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдИ рдЫрд╡рд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреБрдЬрд░реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╡рд░реНрдЧ рдЦреБрдж рдХреЛ рдмрд╛рдХреА рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдореВрд▓ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
def plotImages(images_arr): fig, axes = plt.subplots(1, 5, figsize=(20,20)) axes = axes.flatten() for img, ax in zip(images_arr, axes): ax.imshow(img) plt.tight_layout() plt.show()
рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдХреЛ рдкрд▓рдЯреЗрдВ
рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХреНрд╖реИрддрд┐рдЬ рдЫрд╡рд┐ flippingред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╣рдорд╛рд░реА рд╕реНрд░реЛрдд рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред horizontal_flip=True
ImageDataGenerator .
image_gen = ImageDataGenerator(rescale=1./255, horizontal_flip=True) train_data_gen = image_gen.flow_from_directory(batch_size=BATCH_SIZE, directory=train_dir, shuffle=True, target_size=(IMG_SHAPE, IMG_SHAPE))
:
Found 2000 images belonging to 2 classes.
. ( ) .
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
(2 5 ):

. 45.
image_gen = ImageDataGenerator(rescale=1./255, rotation_range=45) train_data_gen = image_gen.flow_from_directory(batch_size=BATCH_SIZE, directory=train_dir, shuffle=True, target_size=(IMG_SHAPE, IMG_SHAPE))
:
Found 2000 images belonging to 2 classes.
тАФ 5 . ( ) .
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
(2 5):

тАФ 50%.
image_gen = ImageDataGenerator(rescale=1./255, zoom_range=0.5) train_data_gen = image_gen.flow_from_directory(batch_size=BATCH_SIZE, directory=train_dir, shuffle=True, target_size=(IMG_SHAPE, IMG_SHAPE))
:
Found 2000 images belonging to 2 classes.
, тАФ 5 . ( ) .
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
(2 5 ):

, , , ImageDataGenerator
.
тАФ , 45 , , , .
image_gen_train = ImageDataGenerator( rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' ) train_data_gen = image_gen_train.flow_from_directory(batch_size=BATCH_SIZE, directory=train_dir, shuffle=True, target_size=(IMG_SHAPE, IMG_SHAPE), class_mode='binary')
:
Found 2000 images belonging to 2 classes.
, .
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
(2 5):

, , , . , , .
image_gen_val = ImageDataGenerator(rescale=1./255) val_data_gen = image_gen_val.flow_from_directory(batch_size=BATCH_SIZE, directory=validation_dir, target_size=(IMG_SHAPE, IMG_SHAPE), class_mode='binary')
4 .
0.5. , 50% 0. .
512 relu
. тАФ тАФ softmax
.
model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SHAPE, IMG_SHAPE, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Dropout(0.5), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(2, activation='softmax') ])
adam
. sparse_categorical_crossentropy
. , accuracy
metrics
:
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
summary :
model.summary()
:
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 148, 148, 32) 896 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 74, 74, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 72, 72, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 36, 36, 64) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 34, 34, 128) 73856 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 17, 17, 128) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 15, 15, 128) 147584 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 7, 7, 128) 0 _________________________________________________________________ dropout (Dropout) (None, 7, 7, 128) 0 _________________________________________________________________ flatten (Flatten) (None, 6272) 0 _________________________________________________________________ dense (Dense) (None, 512) 3211776 _________________________________________________________________ dense_1 (Dense) (None, 2) 1026 ================================================================= Total params: 3,453,634 Trainable params: 3,453,634 Non-trainable params: 0 _________________________________________________________________
!
( ImageDataGenerator
) fit_generator
fit
:
EPOCHS = 100 history = model.fit_generator( train_data_gen, steps_per_epoch=int(np.ceil(total_train / float(BATCH_SIZE))), epochs=EPOCHS, validation_data=val_data_gen, validation_steps=int(np.ceil(total_val / float(BATCH_SIZE))) )
:
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.savefig('./foo.png') plt.show()
:

, :
- : ( ).
- (.. augmentation) : .
- / (.. dropout) : ( , ).
, . .
:
CoLab .
CoLab .
. CoLab . CoLab . CoLab , .
CoLab. CoLab , , .
!
я╗┐я╗┐# tf.keras
CoLab . tf.keras.Sequential
, ImageDataGenerator
.
. os
, numpy
python- numpy- , , matplotlib.pyplot
.
from __future__ import absolute_import, division, print_function, unicode_literals import os import numpy as np import glob import shutil import matplotlib.pyplot as plt
TODO: TensorFlow Keras-
TensorFlow tf
Keras- , . , ImageDataGenerator
- Keras .
тАФ . .
.
_URL = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz" zip_file = tf.keras.utils.get_file(origin=_URL, fname="flower_photos.tgz", extract=True) base_dir = os.path.join(os.path.dirname(zip_file), 'flower_photos')
, , 5 :
:
classes = ['', '', '', '', '']
, , :
flower_photos |__ diasy |__ dandelion |__ roses |__ sunflowers |__ tulips
. . , .
2 train
val
5 - ( ). , 80% , 20% . :
flower_photos |__ diasy |__ dandelion |__ roses |__ sunflowers |__ tulips |__ train |______ daisy: [1.jpg, 2.jpg, 3.jpg ....] |______ dandelion: [1.jpg, 2.jpg, 3.jpg ....] |______ roses: [1.jpg, 2.jpg, 3.jpg ....] |______ sunflowers: [1.jpg, 2.jpg, 3.jpg ....] |______ tulips: [1.jpg, 2.jpg, 3.jpg ....] |__ val |______ daisy: [507.jpg, 508.jpg, 509.jpg ....] |______ dandelion: [719.jpg, 720.jpg, 721.jpg ....] |______ roses: [514.jpg, 515.jpg, 516.jpg ....] |______ sunflowers: [560.jpg, 561.jpg, 562.jpg .....] |______ tulips: [640.jpg, 641.jpg, 642.jpg ....]
, , . .
for cl in classes: img_path = os.path.join(base_dir, cl) images = glob.glob(img_path + '/*.jpg') print("{}: {} ".format(cl, len(images))) train, val = images[:round(len(images)*0.8)], images[round(len(images)*0.8):] for t in train: if not os.path.exists(os.path.join(base_dir, 'train', cl)): os.makedirs(os.path.join(base_dir, 'train', cl)) shutil.move(t, os.path.join(base_dir, 'train', cl)) for v in val: if not os.path.exists(os.path.join(base_dir, 'val', cl)): os.makedirs(os.path.join(base_dir, 'val', cl)) shutil.move(v, os.path.join(base_dir, 'val', cl))
:
train_dir = os.path.join(base_dir, 'train') val_dir = os.path.join(base_dir, 'val')
, , , . тАФ (.. augmentation) . . , , тАФ , . .
tf.keras , тАФ ImageDataGenerator . .
. тАФ () batch_size
, IMG_SHAPE
.
TODO:
100 batch_size
150 IMG_SHAPE
:
batch_size = IMG_SHAPE =
TODO:
ImageDataGenerator
, , . .flow_from_directory
. , , , .
image_gen = train_data_gen =
5 :
def plotImages(images_arr): fig, axes = plt.subplots(1, 5, figsize=(20,20)) axes = axes.flatten() for img, ax in zip(images_arr, axes): ax.imshow(img) plt.tight_layout() plt.show() augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
TODO:
, ImageDataGenerator
45 . .flow_from_directory . , , , .
image_gen = train_data_gen =
5 :
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
TODO:
, ImageDataGenerator 50%. .flow_from_directory . , , , .
image_gen = train_data_gen =
5 :
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
TODO:
, ImageDataGenerator
:
flow_from_directory
. , , , .
image_gen_train = train_data_gen =
5 :
augmented_images = [train_data_gen[0][0][0] for i in range(5)] plotImages(augmented_images)
TODO:
. , , ImageDataGenerator
, . flow_from_directory
. , , . .
image_gen_val = val_data_gen =
TODO:
, 3 тАФ . 16 , тАФ 32 , тАФ 64 . 33. 22.
Flatten
, 512 . 5 , softmax . relu . , , 20%.
model =
TODO:
, adam
sparse_categorical_crossentropy
. , compile(...)
.
TODO:
, fit_generator fit , . fit_generator ImageDataGenerator . 80 , fit_generator -.
epochs = history =
TODO: /
, :
acc = val_acc = loss = val_loss = epochs_range =
TODO:
( + ) 512 . . . , , .. , ImageDataGenerator тАФ . , .
?
.
RGB- :
- : , ( );
- : 3D-;
- RGB- : 3 : , ;
- : (). , (). тАФ .
- : . , .
- : . , .
:
. , . .
тАж call-to-action тАФ , share :)
YouTube
рддрд╛рд░
VKontakte