
рд╡рд╛рд░реНрд╖рд┐рдХ рдЬреАрд░реЛрдирд╛рдЗрдЯреНрд╕ рд╣реИрдХрдХреНрд╡реЗрд╕реНрдЯ 2018 рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдХрдИ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рдЕрдкрдирд╛ рд╣рд╛рде рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рднрд╛рдЧ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рдкреАрдврд╝реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ред рд╣рдорд╛рд░реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдмрдЪрд╛рд╡ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдореВрд░реНрдЦ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╝реАрд░реЛрдирд╛рдЗрдЯреНрд╕ рд╣реИрдХрдХреНрд╡реЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рдерд╛ред
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдереАред рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рдЧреГрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рджреЗрдЦреА:
| Home --| KerasModel.h5 --| Task.txt --| ZeroSource.bmp
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдЯрд╛рд╕реНрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереА:
Now it is time for a final boss! http://51.15.100.188:36491/predict You have a mode and an image. To get a ticket, you need to change an image so that it is identified as "1". curl -X POST -F image=@ZeroSource.bmp 'http://51.15.100.188:36491/predict'. (don't forget about normalization (/255) ^_^)
рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдЯрд┐рдХрдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ ZeroSource.bmp рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛:

рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЗрд╕ рдЫрд╡рд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ 1. рдпрджрд┐ рдЖрдк рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо 0 рд╣реЛрдЧрд╛ред
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕рдВрдХреЗрдд рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ KerasModel.h5 рд╣реИ (рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрдмреЙрдХреНрд╕ рд╡рд┐рдорд╛рди рдкрд░ рд╣рдорд▓реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╕рднреА рдбреЗрдЯрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИрдВ)ред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рддреБрд░рдВрдд рдПрдХ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИ - рдЙрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕ рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрди рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдиреЛрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдерд╛ рдЬреЛ рдкреНрд░рддрд┐рднрд╛рдЧреА рдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛:
- рдХрд░рд╛рд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ред
- рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЫрд╡рд┐ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рдореВрд▓ рдЫрд╡рд┐ рдЬрд┐рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, рдЪреЗрдХ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдерд╛:
- рдЫрд╡рд┐ рдХрд╛ рд╕рд╣реА рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - 28x28 рдкрд┐рдХреНрд╕реЗрд▓ред
- рдЗрд╕ рдЫрд╡рд┐ рдореЗрдВ, рдореЙрдбрд▓ рдХреЛ 1 рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред
- ZeroSource.bmp рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЫрд╡рд┐ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ MSE рдореАрдЯреНрд░рд┐рдХ (рдорд╛рдирдХ рддреНрд░реБрдЯрд┐) рджреНрд╡рд╛рд░рд╛ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб k рд╕реЗ рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред Google рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ "рдПрдбрд╡рд╛рдВрд╕рд░рд┐рдпрд▓ рдЙрджрд╛рд╣рд░рдг" рдФрд░ "рдПрдбрд╡рд╛рдВрд╕рд░рд┐рдпрд▓ рдЕрдЯреИрдХ" рдХреАрд╡рд░реНрдб рдорд┐рд▓реЗред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдХреВрд▓ рд╣рдорд▓реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрджрд┐ рдЖрдк Google рдореЗрдВ "рдХреЗрд░реЗрд╕ рдиреНрдпреВрд░рд▓ рдиреЗрдЯ рдкрд░ рдПрдбрд╡рд╛рдВрд╕рд░рд┐рдпрд▓ рдЕрдЯреИрдХ" рдХреНрд╡реЗрд░реА рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рд▓рд┐рдВрдХ рдлрд╝реВрд▓рдмреЙрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЧреАрдерд╣рдм рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ - рдЬреЛ рдкреНрд░рддрд┐рдХреВрд▓ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдмреЗрд╢рдХ, рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ (рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЦрд░реЛрдВрдЪ рд╕реЗред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдХреВрд▓ рд╣рдорд▓реЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реИ, рд╡рд╣ Google рдкрд░ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдкрд░ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рддрд┐рдХреВрд▓ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧреАред
рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
import keras import numpy as np from PIL import Image import foolbox
рд╣рдо рдпрд╣рд╛рдБ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?
- рдХреЗрд░рд╕ рд╡рд╣ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдзреЛрдЦрд╛ рджреЗрдВрдЧреЗред
- NumPy рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
- PIL рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред
- FoolBox рдкреНрд░рддрд┐рдХреВрд▓ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдореЙрдбрд▓ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдирд╛ рд╣реИред
model = keras.models.load_model("KerasModel.h5")
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:
Layer (type) Output Shape Param # ================================================================= conv2d_1 (Conv2D) (None, 26, 26, 32) 320 _________________________________________________________________ conv2d_2 (Conv2D) (None, 26, 26, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 13, 13, 64) 0 _________________________________________________________________ dropout_1 (Dropout) (None, 13, 13, 64) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 13, 13, 64) 36928 _________________________________________________________________ conv2d_4 (Conv2D) (None, 13, 13, 128) 73856 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 6, 6, 128) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 4608) 0 _________________________________________________________________ dense_1 (Dense) (None, 256) 1179904 _________________________________________________________________ dense_2 (Dense) (None, 10) 2570 ================================================================= Total params: 1,312,074 Trainable params: 1,312,074 Non-trainable params: 0 _________________________________________________________________ <tf.Tensor 'conv2d_1_input_1:0' shape=(?, 28, 28, 1) dtype=float32>
рдореБрдЭреЗ рдпрд╣рд╛рдВ рд╕реЗ рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?
- рдЗрдирдкреБрдЯ рдореЙрдбрд▓ (conv2d_1 рд▓реЗрдпрд░) рдЖрдпрд╛рдо рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ? X28x28x1, рдХрд╣рд╛рдБ "?" - рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛; рдпрджрд┐ рдЫрд╡рд┐ рдПрдХ рд╣реИ, рддреЛ рдЖрдпрд╛рдо 1x28x28x1 рд╣реЛрдЧрд╛ред рдФрд░ рдЫрд╡рд┐ рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдЖрдпрд╛рдо 1 рд╣реИред рдЕрд░реНрдерд╛рдд, рдЫрд╡рд┐ рдХреЛ 0 рд╕реЗ 255 рддрдХ рдХреЗ рдорд╛рдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдореЙрдбрд▓ (dense_2 рдкрд░рдд) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдЖрдпрд╛рдо 10 рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ (рдЖрдЧреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛) рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░реЗрдВ (рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ 255 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ)ред рдпрд╣рд╛рдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг "рдЕрдирд┐рд╡рд╛рд░реНрдп" рдЪрд╛рд▓ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝рд╛ рд╣реИ:
img = Image.open("ZeroSource.bmp")
рдЕрдм рд╣рдо рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
model.predict(img.reshape(1,28,28,1))
рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ
array([[1.0000000e+00, 4.2309660e-19, 3.1170484e-15, 6.2545637e-18, 1.4199094e-16, 6.3990816e-13, 6.9493417e-10, 2.8936278e-12, 8.9440377e-14, 1.6340098e-12]], dtype=float32)
рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдг рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХрдХреНрд╖рд╛ 0,1,2 ... 9 рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ 1 рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ 100% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ 0 рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред
рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

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

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдЧ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдореЙрдбрд▓ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ 10% рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддрд░реНрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд┐рд░реНрдгрдп рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдЖрдЗрдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рднрд╛рдЧ - рдкреНрд░рддрд┐рдХреВрд▓ рд╣рдорд▓реЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, FoolBox рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Foolbox рд╕рдВрдХреЗрддрди рдореЗрдВ рдореЙрдбрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
fmodel = foolbox.models.KerasModel(model,bounds=(0,1))
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╣рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - FGSM:
FGSM
attack = foolbox.attacks.FGSM(fmodel)
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛
[4.8592144e-01 2.5432981e-14 5.7048566e-13 1.6787202e-14 1.6875961e-11 1.2974949e-07 5.1407838e-01 3.9819957e-12 1.9827724e-09 5.7383300e-12] 6
рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐:

рддреЛ, рдЕрдм 50% 0 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде 6. рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрднреА рднреА 1 рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╢реЛрд░ рдХрд╛ рд╕реНрддрд░ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИред рдЫрд╡рд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВред рдЗрд╕ рдмреАрдЪ, рдЪрд▓реЛ рд╣рдорд▓реЛрдВ рдХреЛ рд╣рд╡рд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЪрд╛рдирдХ, рд╣рдо рдЕрднреА рднреА 1 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдПрд▓-рдмреАрдПрдлрдЬреАрдПрд╕ рд╣рдорд▓рд╛
attack = foolbox.attacks.LBFGSAttack(fmodel) adversarial = attack(img.reshape(28,28,1),0) probs = model.predict(adversarial.reshape(1,28,28,1)) print(probs) print(np.argmax(probs))
рдирд┐рд╖реНрдХрд░реНрд╖:
[4.7782943e-01, 1.9682934e-10, 1.0285517e-06, 3.2558936e-10, 6.5797998e-05, 4.0495447e-06, 2.5545436e-04, 3.4730587e-02, 5.5223148e-07, 4.8711312e-01] 9
рдЪрд┐рддреНрд░:

рдлрд┐рд░ рд╕реЗ рдЕрдм рд╣рдордиреЗ ~ 49% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде 9 рдХреЛ 9 рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реЛрд░ рдмрд╣реБрдд рдХрдо рд╣реИред
рдЪрд▓реЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣рд░рд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдордиреЗ рдХрд╣реАрдВ рднреА рдпрд╣ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо 1. рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рд╣рдордиреЗ рдПрдХ рдЧреИрд░-рд▓рдХреНрд╖рд┐рдд рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдорд╛рдирд╛ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдХрдХреНрд╖рд╛ 1 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд▓рдХреНрд╖рд┐рдд рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЖрдЗрдП рд╣рдо рдореВрд░реНрдЦ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдорд╛рдкрджрдВрдб рдореЙрдбреНрдпреВрд▓ рдвреВрдВрдвреЗрдВ
рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рдЖрдк рдПрдХ рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирджрдВрдб рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рджреЛ рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
- рдЯрд╛рд░рдЧреЗрдЯрдХреНрд▓рд╛рд╕ - рдРрд╕рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рд╡рд┐рддрд░рдг рдХреЗ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ k рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
- TargetClassProbability - рдпрд╣ рдЗрд╕рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рд╡рд┐рддрд░рдг рдХреЗ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ k рд╡рд╛рд▓реЗ рддрддреНрд╡ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо p рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛред
рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рджреЛрдиреЛрдВ:
L-BFGS + TargetClass
рдЯрд╛рд░рдЧреЗрдЯрдХреНрд▓рд╛рд╕ рдорд╛рдирджрдВрдб рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рдХрдХреНрд╖рд╛ k рдХреА рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЕрдзрд┐рдХред рддрдм рдиреЗрдЯрд╡рд░реНрдХ рдЬреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджреЗрдЦрдХрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рдЙрд╕реЗ рдЧрд▓рдд рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
attack = foolbox.attacks.LBFGSAttack(fmodel,foolbox.criteria.TargetClass(1))
рдирд┐рд╖реНрдХрд░реНрд╖:
[3.2620126e-01 3.2813528e-01 8.5446298e-02 8.1292394e-04 1.1273423e-03 2.4886258e-02 3.3904776e-02 1.9947644e-01 8.2347924e-07 8.5878673e-06] 1
рдЪрд┐рддреНрд░:

рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдпрд╣ 32.8% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде 1 рд╣реИ, рдЬрдмрдХрд┐ 0 рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдпрдерд╛рд╕рдВрднрд╡ рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рдХрд░реАрдм рд╣реИ рдФрд░ 32.6% рд╣реИред рд╣рдордиреЗ рдХрд░ рджрд┐рдЦрд╛рдпрд╛! рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ 0.5 рд╕реЗ рдКрдкрд░ 1 рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
L-BFGS + TargetClassProbability
рдЕрдм рд╣рдо рдорд╛рдирджрдВрдб TargetClassProbability рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреА рд╕реЗ рдХрдо рдирд╣реАрдВ рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХреЗрд╡рд▓ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
1) рд╡рд╕реНрддреБ рдХреА рд╡рд░реНрдЧ рд╕рдВрдЦреНрдпрд╛ред
2) рдкреНрд░рддрд┐рдХреВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред
рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдпрд╛ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╕реНрддреБ рдХреЛрдИ рднреА рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред , 0.99 рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдХреЗ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рд╡рд┐рдзрд┐ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрднрд┐рд╕рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред
attack = foolbox.attacks.LBFGSAttack(fmodel,foolbox.criteria.TargetClassProbability(1,0.5)) adversarial = attack(img.reshape(28,28,1),0) probs = model.predict(adversarial.reshape(1,28,28,1)) print(probs) print(np.argmax(probs))
рдирд┐рд╖реНрдХрд░реНрд╖:
[4.2620126e-01 5.0013528e-01 9.5413298e-02 8.1292394e-04 1.1273423e-03 2.4886258e-02 3.3904776e-02 1.9947644e-01 8.2347924e-07 8.5878673e-06]
рд╣реБрд░реНрд░реЗ! рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдХреВрд▓-рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ 1 50% рд╕реЗ рдКрдкрд░ рд╣реИ! рдЕрджреНрднреБрдд! рдЕрдм рдЖрдЗрдП рд╡рд┐рдпреЛрдЧреАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ (рдЫрд╡рд┐ рдХреЛ 0-255 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдПрдВ) рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬреЗрдВред
рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
import keras from PIL import Image import numpy as np import foolbox from foolbox.criteria import TargetClassProbability import scipy.misc model = keras.models.load_model("KerasModel.h5") img = Image.open("ZeroSource.bmp") img = np.array(img.getdata()) img = img.astype('float32') img = img /255. img = img.reshape(28,28,1) fmodel = foolbox.models.KerasModel(model,bounds=(0,1)) attack = foolbox.attacks.LBFGSAttack(fmodel,criterion=TargetClassProbability(1 ,p=.5)) adversarial = attack(img[:,:,::-1], 0) adversarial = adversarial * 255 adversarial = adversarial.astype('int') scipy.misc.toimage(adversarial.reshape(28,28)).save('AdversarialExampleZero.bmp')
рдФрд░ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджреЗрдЦрд╛, рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдмреЗрд╡рдХреВрдл рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рднреА рд╣реИред рдХреЗрд╡рд▓ рдореВрд░реНрдЦреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣рдорд▓реЛрдВ рдХреА рд╕реВрдЪреА рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рдВрджрд░реНрдн рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдПрдХ рд╣реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдПрдХ рд╣реА рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрдж рдХреЛ рдХреНрд░реИрдВрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ!
рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдореЙрдбрд▓ рдЪрд╛рд╣реЗ рдХрд┐рддрдиреЗ рднреА рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рди рд╣реЛрдВ, рд╡реЗ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЕрд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдЬрдЧрд░ рдФрд░ рдореВрд░реНрдЦ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!