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

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдмреЛрд░реНрдб рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛ рдкреИрджрд▓ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЛрдВ рдпрд╛ рдЬрд╡рд╛рдиреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ (рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдмрд┐рдирд╛)ред рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдб, рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдпрд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдХрдЯреМрддреА рдЬрд╛рд░реА рд╣реИред
рдЗрд╕ рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд╣реИ рдХреЗрд░рд╕ рдФрд░ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдЬреИрд╕реЗ рдорд╛рдирдХ рдврд╛рдВрдЪреЗ рдХреЛ рдЪрд▓рд╛рдирд╛ред рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╣ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЗрдЯрд╕рди рдиреИрдиреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ рд▓реИрдкрдЯреЙрдк рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╕реЗ рдиреАрдЪ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдореЙрдбрд▓ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рддреИрдпрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓реЗрдирд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╣реИ рдФрд░ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдорд╛рдЗрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣рдж рддрдХ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо-рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрди рдмреЛрд░реНрдбреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг
рдЫрд╡рд┐ рдкрд╣рдЪрд╛рди рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд░рд╕ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ ResNet50 рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рдореЙрдбрд▓ 2015 рдореЗрдВ рдЗрдореЗрдЬрдиреЗрдЯ рдЪреИрд▓реЗрдВрдЬ рдХрд╛ рд╡рд┐рдЬреЗрддрд╛ рдерд╛)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред
import tensorflow as tf import numpy as np import time IMAGE_SIZE = 224 IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3) resnet = tf.keras.applications.ResNet50(input_shape=IMG_SHAPE) img = tf.contrib.keras.preprocessing.image.load_img('cat.png', target_size=(IMAGE_SIZE, IMAGE_SIZE)) t_start = time.time() img_data = tf.contrib.keras.preprocessing.image.img_to_array(img) x = tf.contrib.keras.applications.resnet50.preprocess_input(np.expand_dims(img_data, axis=0)) probabilities = resnet.predict(x) print(tf.contrib.keras.applications.resnet50.decode_predictions(probabilities, top=5)) print("dT", time.time() - t_start)
рдореИрдВрдиреЗ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдХреЛрдб рдирд┐рдХрд╛рд▓рдирд╛ рднреА рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдХреЛ рдкрд╣рд▓реЗ 224x224 (рдпрд╣ рдЗрдирдкреБрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИ) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдВрдд рдореЗрдВ, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛рд░реНрдп рд╕рднреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдмрд┐рд▓реНрд▓реА рдХреА рддрд╕реНрд╡реАрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо:
[[('n02123045', 'tabby', 0.765179), ('n02123159', 'tiger_cat', 0.19059166), ('n02124075', 'Egyptian_cat', 0.013605555), ('n04493381', 'tub', 0.0025916891), ('n04553703', 'washbasin', 0.0021566998)]]
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рд╕реЗ рдкрд░реЗрд╢рд╛рди (рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдЧреИрд░-рджреЗрд╢реА рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рдЯреИрдмрдмреА" рдХреНрдпрд╛ рд╣реИ?), рдореИрдВрдиреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХреА, рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реАрдкреАрдпреВ рдкрд░ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкреАрд╕реА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп
0.5 рдПрд╕ рдерд╛ рдФрд░ рдЬреАрдкреАрдпреВ рдкрд░ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП 2 рдПрд╕ (!)ред рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕рдорд╕реНрдпрд╛ рдпрд╛ рддреЛ рдореЙрдбрд▓ рдпрд╛ рдЯреЗрдиреНрд╕рд░рдлрд╝реНрд▓реЛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдмрд╣реБрдд рд╕реА рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдлреЙрд░реНрдо рдХреА рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП "рдПрд▓реЛрдХреЗрдЯрд░ (GPU_0_bfc) рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░ рднрд╛рдЧ рдЧрдпрд╛ред 2.13GiB рдХреЛ freed_by_count = 0. рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред" ред рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдкрд░, рдпрд╣ рдЕрднреА рднреА рдзреАрдорд╛ рд╣реИ: рд╕реАрдкреАрдпреВ рдкрд░
2.8c рдФрд░ GPU рдкрд░
18.8c , рдЬрдмрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реИ:

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддрд┐ рдЫрд╡рд┐ 3s рднреА, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд gpu_options.allow_growth рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдкрддрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХреА рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рд╣рдореЗрд╢рд╛ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗрддреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкрдирд╛ рдЧрд▓рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреВрд╕рд░реА рдФрд░ рдмрд╛рдж рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ GPU рдХреЗ рдмрд┐рдирд╛ 0.6s рдФрд░ рдПрдХ GPU рдХреЗ рд╕рд╛рде 0.2sред рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░, рдЧрддрд┐, рдХреНрд░рдорд╢рдГ, 2.0s рдФрд░ 0.05s рд╣реИред
ResNet50 рдХреА рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рдкреВрд░реЗ рдореЙрдбрд▓ рдХреЛ рдбрд┐рд╕реНрдХ (рд▓рдЧрднрдЧ 100 рдПрдордмреА) рдкрд░ рдкрдВрдк рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рдпрддреНрддрддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗред рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ AI- рд╕реЗрд╡рд╛рдПрдБ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдмрд┐рдирд╛, рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ "рдХрджреНрджреВ" рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрддреНрддреЗ рдмрдирд╛рдо рдХреБрддреНрддреЗ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Keras рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрдиреНрд╡реЗрдиреНрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛрдЧрд╛ (CNN - рдХрдиреНрд╡реЗрдВрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ), рд╣рдо
рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓реЗрдВрдЧреЗред рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреЗрдирд╕реЛрд░рдлрд╝реНрд▓реЛ_рдбреЗрдЯрд╛рд╕реЗрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдлреЛрдЯреЛ рдирд╣реАрдВ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреАрди рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкрд░реАрдХреНрд╖рдгред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рддреНрд░ рдХреЛ "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд" рдХрд░рддреЗ рд╣реИрдВ, рд░рдВрдЧреЛрдВ рдХреЛ 0..1 рдХреА рд╕реАрдорд╛ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред
import tensorflow as tf from tensorflow.keras import layers import tensorflow_datasets as tfds from keras.preprocessing import image import numpy as np import time IMAGE_SIZE = 64 IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3) splits = tfds.Split.TRAIN.subsplit(weighted=(80, 10, 10)) (cat_train, cat_valid, cat_test), info = tfds.load('cats_vs_dogs', split=list(splits), with_info=True, as_supervised=True) label_names = info.features['label'].int2str def pre_process_image(image, label): image = tf.cast(image, tf.float32) image = image / 255.0
рд╣рдо рдПрдХ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВред
def custom_model():
рдЕрдм рд╣рдо рдЕрдкрдиреЗ "рдХреИрдЯ-рдбреЙрдЧ" рдХрд┐рдЯ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ (GPU рдкрд░ 20 рдорд┐рдирдЯ рдФрд░ CPU рдкрд░ 1-2 рдШрдВрдЯреЗ), рдЗрд╕рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред
tl_model = custom_model() t_start = time.time() tl_model.fit(train_batch, steps_per_epoch=8000, epochs=2, validation_data=validation_batch, validation_steps=10, callbacks=None) print("Training done, dT:", time.time() - t_start) print(tl_model.summary()) validation_steps = 20 loss0, accuracy0 = tl_model.evaluate(validation_batch, steps=validation_steps) print("Loss: {:.2f}".format(loss0)) print("Accuracy: {:.2f}".format(accuracy0)) tl_model.save("dog_cat_model.h5")
рд╡реИрд╕реЗ, рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдкрд░ рд╕реАрдзреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣рд╛ - 5 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдмреЛрд░реНрдб рдиреЗ рдЧрд░реНрдо рдХрд┐рдпрд╛ рдФрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ред рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП, рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХреВрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдкрд░ рд╕реАрдзреЗ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ - рдЖрдк рдПрдХ рдкреАрд╕реА рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдиреИрдиреЛ рдкрд░ рд╕рдорд╛рдкреНрдд рд╕рд╣реЗрдЬреЗ рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рдПрдХ рдФрд░ рдиреБрдХрд╕рд╛рди рд╕рд╛рдордиреЗ рдЖрдпрд╛ - рдкреАрд╕реА рдкрд░ рдЯреЗрдВрд╕реЛрдлреНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг 14 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЧрдИ, рдФрд░ рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдХреЗ рд▓рд┐рдП рдЕрдм рддрдХ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 13. рд╣реИ рдФрд░ 14 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рдореЙрдбрд▓ рдХреЛ 13 рд╡реЗрдВ рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдерд╛ред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдореЙрдбрд▓ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
def predict_model(model, image_file): img = image.load_img(image_file, target_size=(IMAGE_SIZE, IMAGE_SIZE)) t_start = time.time() img_arr = np.expand_dims(img, axis=0) result = model.predict_classes(img_arr) print("Result: {}, dT: {}".format(label_names(result[0][0]), time.time() - t_start)) model = tf.keras.models.load_model('dog_cat_model.h5') predict_model(model, "cat.png") predict_model(model, "dog1.png") predict_model(model, "dog2.png")
рдмрд┐рд▓реНрд▓реА рдХреА рддрд╕реНрд╡реАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди "рдХреБрддреНрддреЗ" рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП 2 рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

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

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