рдбрд┐рдмрдЧ рдСрдЯреЛрдПрдиреНрдХреЛрдбрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЧрд╣рд░реА рд╕реАрдЦрдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ, рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 1

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


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


рдлрд┐рд░ рднреА, рдЙрди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╢рд╛рдо рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдСрдЯреЛ-рдПрдирдХреЛрдбрд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдПрдХ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ? рдЦреИрд░, рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рдереЗ:


  • рдПрдХ рднрд╛рд╡рдирд╛ рдереА рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рдЧрднрдЧ 3 рдпрд╛ 4 рдереЗ, рдмрд╛рдХреА рд╕рднреА рдХреЛ рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛;
  • рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ - рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреАрдбрд╝рд┐рдд MNIST'e рдкрд░ 28x28;
  • рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ - рд╡реЗ рдПрдХ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдмрд╕ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВ;
  • рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд╛рдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде MNIST рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ - рддреЛ рдпрд╣ рд╕рдм рдмреЗрд╡рдХреВрдлреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ ред

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


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


рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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


рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ 4000 рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдЪрд┐рддреНрд░реЛрдВ рдХреА 64x64 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдХрд╛рд▓реА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рдмрд╕ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдФрд░ 64x64 рдЪрд┐рддреНрд░ рдореЗрдВ рд▓рдЧрднрдЧ 2% рдЕрдВрдХ рднрд░реЗ рдЧрдП рд╣реИрдВред рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд╛рдЗрдиреЗрдВ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВред


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


рдХреЛрдб
# only for google colab %tensorflow_version 2.x import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import os import zipfile import datetime import tensorflow_addons as tfa BATCH_SIZE = 128 AUTOTUNE=tf.data.experimental.AUTOTUNE def load_image(fpath): img_raw = tf.io.read_file(fpath) img = tf.io.decode_png(img_raw, channels=1, dtype=tf.uint8) return tf.image.convert_image_dtype(img, dtype=tf.float32) ## for splitting test/train def is_test(x, y): return x % 4 == 0 def is_train(x, y): return not is_test(x,y) ## for image augmentation def random_flip_flop(img): return tf.image.random_flip_left_right(img) def transform_aug(shift_val): def random_transform(img): return tfa.image.translate(img,tf.random.uniform([2], -1*shift_val, shift_val)) return random_transform def prepare_for_training(ds, cache=True, shuffle_buffer_size=1000, transform=0, flip=False): if cache: if isinstance(cache, str): ds = ds.cache(cache) else: ds = ds.cache() ds = ds.shuffle(buffer_size=shuffle_buffer_size) if transform != 0: ds = ds.map(transform_aug(transform)) if flip: ds = ds.map(random_flip_flop) ds = ds.repeat() ds = ds.batch(BATCH_SIZE) ds = ds.prefetch(buffer_size=AUTOTUNE) return ds def prepare_input_output(x): return (x, x) list_ds = tf.data.Dataset.list_files("/content/planes64/*") imgs_df = list_ds.map(load_image) train = imgs_df.enumerate().filter(is_train).map(lambda x,y: y) train_ds = prepare_for_training(train, transform=10, flip=True) train_ds = train_ds.map(prepare_input_output) val = imgs_df.enumerate().filter(is_test).map(lambda x, y: y) val_ds = val.map(prepare_input_output).batch(BATCH_SIZE, drop_remainder=True) 

рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, keras.io рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд╣рд▓рд╛ рдореЙрдбрд▓ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ mnist рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛:


 # this is the size of our encoded representations encoding_dim = 32 # 32 floats -> compression of factor 24.5, assuming the input is 784 floats # this is our input placeholder input_img = Input(shape=(784,)) # "encoded" is the encoded representation of the input encoded = Dense(encoding_dim, activation='relu')(input_img) # "decoded" is the lossy reconstruction of the input decoded = Dense(784, activation='sigmoid')(encoded) 

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64/10, activation='relu')) model.add(tf.keras.layers.Dense(64*64, activation="sigmoid")) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рд╣реИрдВ рдЬреЛ рдореИрдВ рд╕реАрдзреЗ рдореЙрдбрд▓ рдореЗрдВ рд╕рдкрд╛рдЯ рдФрд░ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдХрд┐ рдореИрдВ 25 рдмрд╛рд░ "рд╕рдВрдкреАрдбрд╝рд┐рдд" рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 10. рдпрд╣ рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдПрдХ рд╣рд╛рдирд┐-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ - рдорддрд▓рдм рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдореМрд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ, рдПрдбрд╛рдо рджреЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо 20 рдпреБрдЧреЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐ рдпреБрдЧ 100 рдХрджрдоред


рдпрджрд┐ рдЖрдк рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдЖрдЧ рдкрд░ рд╣реИред рд╕рдЯреАрдХрддрд╛ == 0.993ред рдпрджрд┐ рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рджреБрдЦреА рд╣реИ, рддреЛ рд╣рдо рддреАрд╕рд░реЗ рдпреБрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдкрдард╛рд░ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред



рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдПрдирдХреЛрдбрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЖрдо рддреМрд░ рдкрд░ рджреБрдЦрдж рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ (рдореВрд▓ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ, рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ-рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рд╣реИ):



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


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


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдкрд░рд┐рдгрд╛рдо:


рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдкрдврд╝рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЦреИрд░, рдЙрд╕реА рд╕рдордп, рдпрд╣ рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рдХрд┐ рдореЗрд░рд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


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


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation="sigmoid")) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рд╡рд╣ рдХреБрдЫ рд╕реАрдЦ рд░рд╣реА рд╣реИ, рд╕рдЯреАрдХрддрд╛ == 0.995 рдФрд░ рдлрд┐рд░ рд╡рд╣ рдПрдХ рдкрдард╛рд░ рдореЗрдВ рдареЛрдХрд░ рдЦрд╛рддреА рд╣реИред


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


рдпрджрд┐ рдЖрдк рдШрдиреЗ рдкрд░рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ: output = activation(dot(input, kernel) + bias)
рдЗрдирдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рд░рд▓ рдЪреАрдЬреЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ - рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ = 0 рдФрд░ рдХрд░реНрдиреЗрд▓ - рдкрд╣рдЪрд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдпрд╣рд╛рдВ рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рднрд░реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рдпреЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ)ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдФрд░ рдпрд╣ рдПрдХ рд╣реА Dense рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation = "sigmoid", use_bias=False, kernel_initializer = tf.keras.initializers.Identity())) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рддреБрд░рдВрдд рд╡рдЬрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдЕрднреА рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ:


рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рдореЙрдбрд▓ рд╕рдЯреАрдХрддрд╛ == 1.0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ: 8/Unknown - 1s 140ms/step - loss: 0.2488 - accuracy: 1.0000[0.24875330179929733, 1.0] ред рд╢рд┐рдХреНрд╖рд╛:


 Epoch 1/20 100/100 [==============================] - 6s 56ms/step - loss: 0.1589 - accuracy: 0.9990 - val_loss: 0.0944 - val_accuracy: 0.9967 Epoch 2/20 100/100 [==============================] - 5s 51ms/step - loss: 0.0836 - accuracy: 0.9964 - val_loss: 0.0624 - val_accuracy: 0.9958 Epoch 3/20 100/100 [==============================] - 5s 50ms/step - loss: 0.0633 - accuracy: 0.9961 - val_loss: 0.0470 - val_accuracy: 0.9958 Epoch 4/20 100/100 [==============================] - 5s 48ms/step - loss: 0.0520 - accuracy: 0.9961 - val_loss: 0.0423 - val_accuracy: 0.9961 Epoch 5/20 100/100 [==============================] - 5s 48ms/step - loss: 0.0457 - accuracy: 0.9962 - val_loss: 0.0357 - val_accuracy: 0.9962 

рд╣рд╛рдВ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрджрд░реНрд╢ рдореЙрдбрд▓ рд╣реИ - рдЪрд┐рддреНрд░ 1 рдореЗрдВ 1 рд╕реЗ рдмрд╛рд╣рд░ рдЖрддрд╛ рд╣реИ, рдФрд░ рдиреБрдХрд╕рд╛рди (рдорддрд▓рдм рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐) рд▓рдЧрднрдЧ 0.25 рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдпрд╣, рд╡реИрд╕реЗ, рдордВрдЪреЛрдВ рдкрд░ рдПрдХ рд▓рдЧрд╛рддрд╛рд░ рд╕рд╡рд╛рд▓ рд╣реИ - рдиреБрдХрд╕рд╛рди рдЧрд┐рд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдЯреАрдХрддрд╛ рдирд╣реАрдВ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣рд╛рдВ рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдШрдиреЗ рдкрд░рдд рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: output = activation(dot(input, kernel) + bias) рдФрд░ рдЙрд╕рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╢рдмреНрдж рд╕рдХреНрд░рд┐рдпрдг, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдерд╛ред рдкрд╣рдЪрд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ, рд╣рдореЗрдВ output = activation(input) ред


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


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: The sigmoid activation: (1.0 / (1.0 + exp(-x))) ред рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрддрд╛рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реВрдБред
рд▓реЗрдХрд┐рди рдЖрдк рдкреЗрди рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 import matplotlib.ticker as plticker range_tensor = tf.range(-4, 4, 0.01, dtype=tf.float32) fig, ax = plt.subplots(1,1) plt.plot(range_tensor.numpy(), tf.keras.activations.sigmoid(range_tensor).numpy()) ax.grid(which='major', linestyle='-', linewidth='0.5', color='red') ax.grid(which='minor', linestyle=':', linewidth='0.5', color='black') ax.yaxis.set_major_locator(plticker.MultipleLocator(base=0.5) ) plt.minorticks_on() 


рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╢реВрдиреНрдп рдкрд░ рд╕рд┐рдЧреНрдореЙрдЗрдб 0.5 рдорд╛рди рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрдХрд╛рдИ рдореЗрдВ - рд▓рдЧрднрдЧ 0.73ред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдмрд┐рдВрджреБ рд╣реИрдВ рд╡реЗ рдпрд╛ рддреЛ рдХрд╛рд▓реЗ рд╣реИрдВ (0.0) рдпрд╛ рд╕рдлреЗрдж (1.0)ред рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд╣рдЪрд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐ рдЧреИрд░-рд╢реВрдиреНрдп рд░рд╣рддрд╛ рд╣реИред


рдЖрдк рдкреЗрди рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЫрд╡рд┐ рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ:


 array([0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.7310586, 0.7310586, 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ], dtype=float32) 

рдФрд░ рдпрд╣ рд╕рдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдкреНрд░рд╢реНрди рдПрдХ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:


  • рдпрд╣ рдКрдкрд░ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛?
  • рдлрд┐рд░ рд╕рдЯреАрдХрддрд╛ == 1.0, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдЪрд┐рддреНрд░ 0 рдФрд░ 1 рд╣реИрдВред

рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИред рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ matplotlib: plt.imshow(res_imgs[i][:, :, 0]) ред рдФрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрджрд┐ рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛: The Normalize instance used to scale scalar data to the [0, 1] range before mapping to colors using cmap. By default, a linear scaling mapping the lowest value to 0 and the highest to 1 is used. The Normalize instance used to scale scalar data to the [0, 1] range before mapping to colors using cmap. By default, a linear scaling mapping the lowest value to 0 and the highest to 1 is used. рдпрд╛рдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдзреНрдпрд╛рди рд╕реЗ 0 рд╕реЗ 1. рд░реЗрдВрдЬ рдореЗрдВ рдореЗрд░реЗ 0.5 рдФрд░ 0.73 рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ред рдХреЛрдб рдмрджрд▓реЗрдВ:


 plt.imshow(res_imgs[i][:, :, 0], norm=matplotlib.colors.Normalize(0.0, 1.0)) 


рдФрд░ рдпрд╣рд╛рдВ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╡рд╛рд▓ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрджрдд рд╕реЗ рдмрд╛рд╣рд░, рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, tf.keras.metrics.Accuracy рд▓рд┐рдП tf.keras.metrics.Accuracy рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


 For example, if y_true is [1, 2, 3, 4] and y_pred is [0, 2, 3, 4] then the accuracy is 3/4 or .75. 

рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реА рд╕рдЯреАрдХрддрд╛ 0. рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реНрд░реЛрдд рдореЗрдВ рдЦреБрдж рдХреЛ рджрдлрди рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ:


  When you pass the strings 'accuracy' or 'acc', we convert this to one of `tf.keras.metrics.BinaryAccuracy`, `tf.keras.metrics.CategoricalAccuracy`, `tf.keras.metrics.SparseCategoricalAccuracy` based on the loss function used and the model output shape. We do a similar conversion for the strings 'crossentropy' and 'ce' as well. 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдпрд╣ рдЕрдиреБрдЪреНрдЫреЗрдж .compile рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ .compile ред


рдпрд╣рд╛рдВ https://github.com/tensorflow/tensorflow/blob/66c48046f169f3565d12e5fea263f6d731f9bfd2-tensorflow/py_n/engine/compile_utils.py рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ


 y_t_rank = len(y_t.shape.as_list()) y_p_rank = len(y_p.shape.as_list()) y_t_last_dim = y_t.shape.as_list()[-1] y_p_last_dim = y_p.shape.as_list()[-1] is_binary = y_p_last_dim == 1 is_sparse_categorical = ( y_t_rank < y_p_rank or y_t_last_dim == 1 and y_p_last_dim > 1) if metric in ['accuracy', 'acc']: if is_binary: metric_obj = metrics_mod.binary_accuracy elif is_sparse_categorical: metric_obj = metrics_mod.sparse_categorical_accuracy else: metric_obj = metrics_mod.categorical_accuracy 

y_t y_true, рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, y_p y_predenced, рдпрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ: shape=(64,64,1) , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмрд╛рдЗрдирд░реА_рд╕реБрд░рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ:


 def binary_accuracy(y_true, y_pred, threshold=0.5): threshold = math_ops.cast(threshold, y_pred.dtype) y_pred = math_ops.cast(y_pred > threshold, y_pred.dtype) return K.mean(math_ops.equal(y_true, y_pred), axis=-1) 

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


 m = tf.keras.metrics.BinaryAccuracy() m.update_state(x_batch, res_imgs) print(m.result().numpy()) 

рд╣рдореЗрдВ 1.0 ред


рдФрд░ рдпрд╣рд╛рдБ


 m = tf.keras.metrics.Accuracy() m.update_state(x_batch, res_imgs) print(m.result().numpy()) 

рд╣рдореЗрдВ рдЙрд╕реА рдбреЗрдЯрд╛ рдкрд░ 0.0 рджреЗрдЧрд╛ред


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


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ mse рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА evaluate рдореЙрдбрд▓ рджрд┐рдП рдереЗ:


 8/Unknown - 2s 221ms/step - loss: 0.2488 - accuracy: 1.0000[0.24876083992421627, 1.0] 

рдпрд╛рдиреА loss == 0.2488 рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: y_true рдФрд░ y_predict рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЪреБрдХрддрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдФрд╕рдд рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред


 tf.keras.backend.mean(tf.math.squared_difference(x_batch[0], res_imgs[0])) 

рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ:


 <tf.Tensor: shape=(), dtype=float32, numpy=0.24826494> 

рдпрд╣рд╛рдВ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЕрдзрд┐рдХрд╛рдВрд╢ рдЦрд╛рд▓реА рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИрдВ, рдореЙрдбрд▓ 0.5 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП 0.25 - рдЪреБрдХрддрд╛ рдЕрдВрддрд░ рдорд┐рд▓рддрд╛ рд╣реИред


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


  if from_logits: return nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output) if not isinstance(output, (ops.EagerTensor, variables_module.Variable)): output = _backtrack_identity(output) if output.op.type == 'Sigmoid': # When sigmoid activation function is used for output operation, we # use logits from the sigmoid function directly to compute loss in order # to prevent collapsing zero when training. assert len(output.op.inputs) == 1 output = output.op.inputs[0] return nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output) # Compute cross entropy from probabilities. bce = target * math_ops.log(output + epsilon()) bce += (1 - target) * math_ops.log(1 - output + epsilon()) return -bce 

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЗрди рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рд▓реБрдЯрд╛ рджрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╛ рддреЛ sigmoid_cross_entropy_with_logits рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЕрдВрддрд┐рдо рдЬреЛрдбрд╝реА рдХрд╛рдо рдХрд░реЗрдЧреАред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ sigmoid_cross_entropy_with_logits logits (рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, doh) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рдХреЛрдб рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


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


рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рд╣реИ - рд▓реЙрдЧрд░рд┐рджрдо рдХреНрдпреЛрдВ рд╣реИрдВ

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


 ln(1/2) == -0.69 ln(2/1) == 0.69 ln(1/100) == -4.6 ln(100/1) == 4.6 

рдЯреЗрдВрд╕реЛрдлрд╝реНрд▓реЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрд▓реНрдХрд┐ рдордирдорд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рдкрд░, рдкрд░рдд рдХрд╛ рдЙрддреНрдкрд╛рджрди рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд▓реЙрдЧ-рдСрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрдЪреНрдЪрд╛ рдорд╛рди -тИЮ рд╕реЗ + raw рддрдХ рд╣реИ - рддреЛ рд▓реЙрдЧрд┐рди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛, рд╕рд┐рдЧреНрдореЙрдЗрдбред рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ - рд▓реЙрдЧ рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд▓реЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдпреЛрдЧ 1 рдирд┐рдХрд▓рддрд╛ рд╣реИред рд╕рд┐рдЧреНрдореЙрдЗрдб (tf рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд▓реЙрдЧ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рднреА рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд╛рдХреА рд╕реЗред


 # 1+ln(0.5) == 0.30685281944 tf.math.softmax(tf.constant([0.30685281944, 1.0, 0.30685281944])) ## <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.25, 0.5 , 0.25], dtype=float32)> tf.math.sigmoid(tf.constant([0.30685281944, 1.0, 0.30685281944])) ## <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.57611686, 0.7310586 , 0.57611686], dtype=float32)> 

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


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


рдареАрдХ рд╣реИ, рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛, рдЕрдм рдмрд╛рдЗрдирд░реА_рдХреНрд░реЛрд╕реЗрдВрдЯреНрд░реЙрдкреАред рджреЛ рд▓реЛрдХрдкреНрд░рд┐рдп "рд╕рд╣рдЬ" рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИрдВ рдЬреЛ рдХреНрд░реЙрд╕-рдПрдВрдЯреНрд░реЛрдкреА рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВред


рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ: рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЙрдбрд▓ рд╣реИ рдЬреЛ n рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ (y 0 , y 1 , ..., y n )ред рдФрд░ рдЕрдм рдЬреАрд╡рди рдореЗрдВ, рдЗрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ k n рдмрд╛рд░ (k 1 , k 1 , ..., k n ) рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реИ - (y 1 ^ k 1 ) (y 2 ^ k 2 ) ... (y n ^ k n )ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░реЙрд╕-рдПрдиреНрдЯреНрд░реЙрдкреА рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ - рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджреВрд╕рд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ 0 рд╕реЗ 1 рддрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛; рдРрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рд╣рдо рдЗрд╕рд╕реЗ рд▓рдШреБрдЧрдгрдХ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ k 1 log (y 1 ) + k 2 log (y 2 ) рдмрд╛рд╣рд░ рдЖрдПрдЧрд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ тИЮ рд╕реЗ 0. рддрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдЗрди рд╕рднреА рдХреЛ -1 / n рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ - рдФрд░ 0 рд╕реЗ + more рддрдХ рдХреА рд╕реАрдорд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╣реА рдЕрдиреБрдорд╛рдирд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред


рдЕрдзрд┐рдХ рд╕рд░рд▓: рдХреНрд░реЙрд╕-рдПрдиреНрдЯреНрд░рд╛рдкреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирдореВрдирд╛ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдмреЗрд╕ 2 рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдШреБрдЧрдгрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдереЗ, рддреЛ рд╣рдо рд╕реАрдзреЗ рдмрд┐рдЯреНрд╕ рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рд╣рд░ рдЬрдЧрд╣ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдШреБрдЧрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдирдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ ( https://en.wikipedia.org/wiki/Nat_(unit )), рдмрд┐рдЯреНрд╕ рдирд╣реАрдВред


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


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


рд╕рдХреНрд░рд┐рдпрдг рдХреЗ рдмрд┐рдирд╛:


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, use_bias=False, kernel_initializer=tf.keras.initializers.Identity())) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рд╣рдореЗрдВ рдкреВрд░реНрдг рдкрд╣рдЪрд╛рди рдореЙрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИ:


 model.evaluate(x=val.map(lambda x: (x,x)).batch(BATCH_SIZE, drop_remainder=True)) # 8/Unknown - 1s 173ms/step - loss: 0.0000e+00 - accuracy: 1.0000[0.0, 1.0] 

рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╡реИрд╕реЗ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рдирд┐ == 0.0ред


рдЕрдм рд░рд┐рд▓реЗ рдХреЗ рд╕рд╛рдеред рдЙрдирдХрд╛ рдЧреНрд░рд╛рдл рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 import matplotlib.ticker as plticker range_tensor = tf.range(-4, 4, 0.01, dtype=tf.float32) fig, ax = plt.subplots(1,1) plt.plot(range_tensor.numpy(), tf.keras.activations.relu(range_tensor).numpy()) ax.grid(which='major', linestyle='-', linewidth='0.5', color='red') ax.grid(which='minor', linestyle=':', linewidth='0.5', color='black') ax.yaxis.set_major_locator(plticker.MultipleLocator(base=1) ) plt.minorticks_on() 


рд╢реВрдиреНрдп рд╕реЗ рдиреАрдЪреЗ - рд╢реВрдиреНрдп, рдКрдкрд░ - y = x, рдЕрд░реНрдерд╛рдд рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рд╕рдХреНрд░рд┐рдпрддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдПрдХ рдЖрджрд░реНрд╢ рдореЙрдбрд▓ред


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation='relu', use_bias=False, kernel_initializer=tf.keras.initializers.Identity())) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) model.evaluate(x=val.map(lambda x: (x,x)).batch(BATCH_SIZE, drop_remainder=True)) # 8/Unknown - 1s 158ms/step - loss: 0.0000e+00 - accuracy: 1.0000[0.0, 1.0] 

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


рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЛ рддреАрди рд╕рдХреНрд░рд┐рдпрдг рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдХрд░реВрдБрдЧрд╛ред рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - relu, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЦреБрдж рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди kernel_initializer рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ glorot_uniform рд╣реЛрдЧрд╛):


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation='relu', use_bias=False)) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реАрдЦрддрд╛ рд╣реИ:



рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдерд╛, рд╕рдЯреАрдХрддрд╛: 0.9999, рд╣рд╛рдирд┐ (mse): 2e-04 20 рдпреБрдЧреЛрдВ рдХреЗ рдмрд╛рдж рдФрд░ рдЖрдк рдЖрдЧреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдЧрд▓рд╛, рд╕рд┐рдЧреНрдореЙрдЗрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation='sigmoid', use_bias=False)) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рд╢рд┐рдХреНрд╖рд╛ рджреА рдереА, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдпрд╣рд╛рдБ рдЕрдХреНрд╖рдо рд╣реИред рд╡рд╣ рдореБрдЭреЗ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реИ, 50 рд╡реЗрдВ рдпреБрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдкрдард╛рд░ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдЯреАрдХрддрд╛: 0.9970, рд╣рд╛рдирд┐: 60 рдХреЗ рджрд╢рдХ рдХреЗ рдмрд╛рдж 0.01ред


рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИ:



рдЦреИрд░, рддрди рдХреА рднреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation='tanh', use_bias=False)) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдкрд░рд┐рдгрд╛рдо рд░рд┐рд▓реЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рд╣реИ - рд╕рдЯреАрдХрддрд╛: 0.9999, рдиреБрдХрд╕рд╛рди: 20 рдпреБрдЧреЛрдВ рдХреЗ рдмрд╛рдж 6e-04, рдФрд░ рдЖрдк рдЖрдЧреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:




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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмреИрдЪрдирдирд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 model = tf.keras.Sequential() model.add(tf.keras.Input(shape=(64,64,1))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(64*64, activation='sigmoid', use_bias=False)) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Reshape(target_shape=(64,64,1))) 

рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИред 13 рд╡реЗрдВ рдпреБрдЧ рдореЗрдВ, рд╕рдЯреАрдХрддрд╛: 1.0ред рдФрд░ рдЙрдЧреНрд░ рдкрд░рд┐рдгрд╛рдо:



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

Source: https://habr.com/ru/post/hi484016/


All Articles