рдкрд░рд┐рдЪрдп
рдЖрд░реНрдЯрд┐рдХрд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЖрд░реНрдЯрд┐рдлрд┐рд╢рд┐рдпрд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ
( ANN) рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдХрднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддреЗ рд╣реИрдВред рдЕрдм рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдПрдирдПрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡рд╕реНрддреБ (
рдкреИрдЯрд░реНрди ) рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕реЗ рджрд┐рдЦрддреА рд╣реИ, рдПрдПрдирдПрди рдХреА рдкрд░рддреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП,
рдХреЗрд░рд╕ рдРрдб рдХреЗ рд╕рд╛рде
рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛
рдЧрдпрд╛ ред
рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг):
рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдЦреАрдВрдЪрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
рдХреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡рд┐рдзрд┐ рдореЗрдВ
PLOT_PATTERN_PROCCESS(...)
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
PLOT_MODEL = рд╕рддреНрдп def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True):

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░
рдПрдХ рдкреИрдЯрд░реНрди (рдЬрд┐рд╕ рдорд╛рд░реНрдЧ рдХрд╛ рд╣рдо рдЕрд╡рд▓реЛрдХрди рдХрд░реЗрдВрдЧреЗ) рдЪреБрдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ
рдЯреЗрдиреЙрд░ рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реА рд╕реЗ рдЕрдВрддрд┐рдо рдкрд░рдд рддрдХ рдХреЗ рдЪрдХреНрд░ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдЪрдХреНрд░ рдореЗрдВ рдкрд░рдд рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреИрдЯрд░реНрди рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП, рдкрд░рд┐рдгрд╛рдо рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдПрдХ n- рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
from keras.models import * from keras.layers import * import matplotlib.pyplot as plt import os import numpy as np
рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпрд╛рдБ:
def PLOT_PATTERN_PROCCESS (рдореЙрдбрд▓, рдкреИрдЯрд░реНрди, FOLDER_TO_SAVE, рдЧреНрд░рд┐рдб_рд╕рд╛рдЗрдЬрд╝ = (3, 3), limit_size_layer = (15, 15), PLOT_MODE = True): def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True): """ :param model: keras :type model: Sequential :param pattern: , :type pattern: np.array :param FOLDER_TO_SAVE: :type FOLDER_TO_SAVE: str :param grid_size: :type grid_size: tuple :param limit_size_layer: :type limit_size_layer: tuple :param PLOT_MODEL: :type PLOT_MODEL: PLOT_MODEL """ SAVE_AR_LIST = [] for num_layer in range(1, len(model.layers)): LO = model.layers[num_layer].output _model = Model(inputs=model.input, outputs=LO) if ( len(_model.output_shape) == 3 and _model.output_shape[1] > limit_size_layer[0] and _model.output_shape[2] > limit_size_layer[1] ): _output = _model.predict(pattern)[0] SAVE_AR_LIST.append( [ num_layer, model.layers[num_layer].name, _output.tolist() ] )
def build_model (IN_SHAPE = 50, CLASSES = 5) -> рдЕрдиреБрдХреНрд░рдорд┐рдХ: def build_model(IN_SHAPE=50,CLASSES=5) -> Sequential: inputs_LAYER0 = Input(shape=(IN_SHAPE,IN_SHAPE)) Dense_2_2 = Dense(75, activation='relu')(inputs_LAYER0) Dense_2_3 = Dense(50, activation='relu', name="my_dense")(Dense_2_2) Dense_2_4 = Dense(25, activation='relu')(Dense_2_3) Dense_2_5 = Dense(10, activation='relu')(Dense_2_4) flat_f_0 = Flatten()(Dense_2_5) final_layer= Dense(CLASSES, activation='softmax')(flat_f_0)
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб
model_ = build_model() pattern = np.random.sample((1,50,50)) os.makedirs("PLOT_PATTERN_PROCCESS") PLOT_PATTERN_PROCCESS( model = model_, pattern = pattern, FOLDER_TO_SAVE = "PLOT_PATTERN_PROCCESS", PLOT_MODEL=False, grid_size=(2, 2) )
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╡рд░рдг
рд╡рд┐рдзрд┐
build_model()
рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ ANN рдореЙрдбрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ 5 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
model.summary () _________________________________________________________________ Layer (type) Output Shape Param
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдкреИрдЯрд░реНрди рдЖрдХрд╛рд░ 50x50 рд╣реИред рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓
pattern
рдФрд░ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рд╣реИред
рдЕрдЧрд▓рд╛, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ
os.makedirs("PLOT_PATTERN_PROCCESS")
ред
рдЬрд╣рд╛рдВ рдкреВрд░рд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг PLOT_PATTERN_PROCCESS
рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛ рдЕрд░реНрде рдмрддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рднреА рдкрд░рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдкрд░рддреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЖрдЙрдЯрдкреБрдЯ рдкреИрдЯрд░реНрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдпрд╣рд╛рдБ рд╣реЛрддрд╛ рд╣реИ:
_output = _model.predict(pattern)[0]
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрдк рджреЛ-рдЖрдпрд╛рдореА рдЖрдЙрдЯрдкреБрдЯ рдкреИрдЯрд░реНрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЖрдпрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ
limit_size_layer
рдПрдПрдирдПрди рдореЙрдбрд▓ рдХреА рдкрд░рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ, рдЪрд░
SAVE_AR_LIST
рдзреАрд░реЗ-рдзреАрд░реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛:
- рдкрд░рдд рд╕рдВрдЦреНрдпрд╛
num_layer
- рдкрд░рдд рдирд╛рдо
model.layers[num_layer].name
- рдЖрдЙрдЯрдкреБрдЯ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА
_output.tolist()
рдзреАрд░реЗ-рдзреАрд░реЗ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░
SAVE_AR_LIST
ред
рдФрд░ рдЗрд╕реЗ рдХреИрдирд╡рд╛рд╕ рд╕реЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛
ax.imshow(np.array(ar), cmap='viridis', extent=(xmin, xmax, ymin, ymax))
ред
рдкрд░рд┐рдгрд╛рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ
(0.png)
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдЕ рдЫрд╛!