TensorFlow рдХреЗ рд▓рд┐рдП рдХреЗрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛



Tensorflow.org рд╕реЗ рдЕрд╡рд▓реЛрдХрди рдЧрд╛рдЗрдб рдХрд╛ рдЕрдиреБрд╡рд╛рджред рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЖрдкрдХреЛ рдХреЗрд░рд╕ рд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдмрд╛рддреЗрдВ рджреЗрдЧреАред рдкрдврд╝рдиреЗ рдореЗрдВ 10 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред

рдЖрдпрд╛рдд tf.keras


tf.keras Keras API рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЙрддреНрд╕реБрдХ рдирд┐рд╖реНрдкрд╛рджрди , tf.data рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рдПрд╕реНрдЯреАрдореЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред tf.keras рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рддреНрдпрд╛рдЧ рдХрд┐рдП рдмрд┐рдирд╛ TensorFlow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ TensorFlow рд╕реЗрдЯрдЕрдк рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ tf.keras рдЖрдпрд╛рдд рдХрд░реЗрдВ:

 from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf from tensorflow import keras 

tf.keras рдХрд┐рд╕реА рднреА tf.keras рд╕рдВрдЧрдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ:

  • рдирд╡реАрдирддрдо TensorFlow рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ tf.keras рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг keras рдореЗрдВ keras рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред tf.keras.__version__ рджреЗрдЦреЗрдВред
  • рдЬрдм рдЖрдк рдореЙрдбрд▓ рд╡рдЬрд╝рди tf.keras , рддреЛ tf.keras рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред save_format='h5' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП save_format='h5' рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВ (рдпрд╛ рдлрд╝рд╛рдЗрд▓ .h5 рдореЗрдВ .h5 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝реЗрдВ)ред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбрд▓ рдмрдирд╛рдПрдБ


рдЕрдиреБрдХреНрд░рдорд┐рдХ рдореЙрдбрд▓


рдХреЗрд░рд╕ рдореЗрдВ, рдЖрдк рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рддреЗрдВ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ ред рдПрдХ рдореЙрдбрд▓ рдПрдХ (рдЖрдорддреМрд░ рдкрд░) рдкрд░рдд рдЧреНрд░рд╛рдл рд╣реИред рдореЙрдбрд▓ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рдХрд╛рд░ рдкрд░рдд рдвреЗрд░ рд╣реИ: tf.keras.Sequential рдореЙрдбрд▓ред

рд╣рдо рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛рдиреА, рдПрдХ рдмрд╣реБрдкрд░рдд рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ):

 from tensorflow.keras import layers model = tf.keras.Sequential() #       64 : model.add(layers.Dense(64, activation='relu')) #   : model.add(layers.Dense(64, activation='relu')) #   softmax  10 : model.add(layers.Dense(10, activation='softmax')) 

рдкрд░рддреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ


tf.keras.layers рдкрд░рддреЛрдВ рдХреА рдХрдИ рдХрд┐рд╕реНрдореЗрдВ tf.keras.layers ред рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  • activation : рдкрд░рдд рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рддрдерд╛рдХрдерд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдирд╣реАрдВ рд╣реИред
  • kernel_initializer рдФрд░ bias_initializer : рдЖрд░рдВрднрд┐рдХ рдпреЛрдЬрдирд╛рдПрдБ рдЬреЛ рд▓реЗрдпрд░ рд╡реЗрдЯ (рдХреЛрд░ рдФрд░ рд╢рд┐рдлреНрдЯ) рдмрдирд╛рддреА рд╣реИрдВред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдпрд╛ рддрдерд╛рдХрдерд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ "Glorot uniform" ред
  • kernel_regularizer рдФрд░ bias_regularizer : bias_regularizer рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкрд░рдд рднрд╛рд░ (рдХреЛрд░ рдФрд░ рд╢рд┐рдлреНрдЯ) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрд▓ 1 рдпрд╛ рдПрд▓ 2 рдирд┐рдпрдорд┐рддреАрдХрд░рдгред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдирд┐рдпрдорд┐рддреАрдХрд░рдг рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред

'Tf.keras.layers.Dense' рдкрд░рддреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 #    : layers.Dense(64, activation='sigmoid') # : layers.Dense(64, activation=tf.keras.activations.sigmoid) #     L1   0.01    : layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l1(0.01)) #     L2   0.01    : layers.Dense(64, bias_regularizer=tf.keras.regularizers.l2(0.01)) #        : layers.Dense(64, kernel_initializer='orthogonal') #        2.0: layers.Dense(64, bias_initializer=tf.keras.initializers.Constant(2.0)) 

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди


рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯрдЕрдк


рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, compile рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

 model = tf.keras.Sequential([ #     64   : layers.Dense(64, activation='relu', input_shape=(32,)), #  : layers.Dense(64, activation='relu'), #   softmax  10 : layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.01), loss='categorical_crossentropy', metrics=['accuracy']) 

tf.keras.Model.compile рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

  • optimizer : рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред tf.keras.optimizers рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ tf.keras.optimizers.Adam рдпрд╛ tf.keras.optimizers.SGD ред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк 'adam' рдпрд╛ 'sgd' рдЬреИрд╕реЗ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • loss : рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдиреНрдпреВрдирддрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рднрд┐рдиреНрдирддрд╛рдУрдВ рдореЗрдВ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ ( mse ), binary_crossentropy , binary_crossentropy ред рд╣рд╛рдирд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╛рдо рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ tf.keras.losses рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд╛рд╕ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • metrics : рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо рд╣реИрдВ рдпрд╛ рдЬрд┐рдиреНрд╣реЗрдВ tf.keras.metrics рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ run_eagerly=True рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ run_eagerly=True

рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗ:

 #       . model.compile(optimizer=tf.keras.optimizers.Adam(0.01), loss='mse', # mean squared error metrics=['mae']) # mean absolute error #     . model.compile(optimizer=tf.keras.optimizers.RMSprop(0.01), loss=tf.keras.losses.CategoricalCrossentropy(), metrics=[tf.keras.metrics.CategoricalAccuracy()]) 

NumPy Data рд╕реЗ рд╕реАрдЦрдирд╛


рдЫреЛрдЯреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NumPy рдХреА рдореЗрдореЛрд░реА рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореЙрдбрд▓ `рдлрд┐рдЯ` рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд░" рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд "рд╣реИ:

 import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) model.fit(data, labels, epochs=10, batch_size=32) 

tf.keras.Model.fit рдореЗрдВ рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:

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

рдпрд╣рд╛рдБ validation_data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) val_data = np.random.random((100, 32)) val_labels = np.random.random((100, 10)) model.fit(data, labels, epochs=10, batch_size=32, validation_data=(val_data, val_labels)) 

Tf.data рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг


рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред fit рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП 'tf.data.Dataset' рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдВ:

 #    : dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) model.fit(dataset, epochs=10) 

рдЪреВрдВрдХрд┐ Dataset рдмреИрдЪреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ batch_size рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels)) val_dataset = val_dataset.batch(32) model.fit(dataset, epochs=10, validation_data=val_dataset) 

рдЖрдХрд▓рди рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА


tf.keras.Model.evaluate рдФрд░ tf.keras.Model.predict NumPy рдФрд░ tf.data.Dataset рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рдФрд░ рдореАрдЯреНрд░рд┐рдХ рдореЗрдВ рдиреБрдХрд╕рд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 #   Numpy data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) model.evaluate(data, labels, batch_size=32) #   dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) model.evaluate(dataset) 

рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдиреНрдпреВрдордкреА рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реНрддрд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╕реЗ рдХрд░реЗрдВ:

рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдкреАрдЖрдИ


tf.keras.Sequential рдореЙрдбрд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рдд рд╕реНрдЯреИрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рдордирдорд╛рдиреЗ рдореЙрдбрд▓ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд░рд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ:

  • рдПрдХрд╛рдзрд┐рдХ рдЗрдирдкреБрдЯ рдореЙрдбрд▓
  • рдХрдИ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рд▓реЗ рдореЙрдбрд▓,
  • рд╕рд╛рдорд╛рдиреНрдп рдкрд░рддреЛрдВ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ (рдПрдХ рд╣реА рдкрд░рдд рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ),
  • рдЕрд╕рдВрдЧрдд рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ (рдЙрджрд╛ред рдЕрд╡рд╢рд┐рд╖реНрдЯ рд╕рдВрдмрдВрдз)ред

рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рдкрд░рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдПрдХ рдЯреЗрдВрд╕рд░ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  2. рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ tf.keras.Model рдХрд╛ рдЙрдкрдпреЛрдЧ tf.keras.Model рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдпрд╣ рдореЙрдбрд▓ `рдЕрдиреБрдХреНрд░рдорд┐рдХ` рдореЙрдбрд▓ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реИред

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

 inputs = tf.keras.Input(shape=(32,)) #    #        . x = layers.Dense(64, activation='relu')(inputs) x = layers.Dense(64, activation='relu')(x) predictions = layers.Dense(10, activation='softmax')(x) 

рдЗрди рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред

 model = tf.keras.Model(inputs=inputs, outputs=predictions) #     . model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['accuracy']) #   5  model.fit(data, labels, batch_size=32, epochs=5) 

рдЙрдкрд╡рд░реНрдЧ рдореЙрдбрд▓


tf.keras.Model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдореЙрдбрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реАрдзреЗ рд╡рд┐рддрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред __init__ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рддреЗрдВ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред call рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╕рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд call ред

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

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдореЙрдбрд▓ рд╣рдореЗрд╢рд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ, рддреЛ рдЖрдк super рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп dynamic=True рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рдмрд┐рдВрджреБ: рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдореЙрдбрд▓ рдХреЛ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдкреАрдЖрдИ рдЪреБрдиреЗрдВред
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЙрдкрд╡рд░реНрдЧрд┐рдд tf.keras.Model рдореЙрдбрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд╕реНрдЯрдо рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 class MyModel(tf.keras.Model): def __init__(self, num_classes=10): super(MyModel, self).__init__(name='my_model') self.num_classes = num_classes #    . self.dense_1 = layers.Dense(32, activation='relu') self.dense_2 = layers.Dense(num_classes, activation='sigmoid') def call(self, inputs): #     , #      ( `__init__`). x = self.dense_1(inputs) return self.dense_2(x) 

рдирдП рдореЙрдбрд▓ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ:

 model = MyModel(num_classes=10) #     . model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['accuracy']) #   5 . model.fit(data, labels, batch_size=32, epochs=5) 

рдХрд╕реНрдЯрдо рдкрд░рддреЗрдВ


tf.keras.layers.Layer рдПрдХ рдХрд╕реНрдЯрдо рд▓реЗрдпрд░ рдмрдирд╛рдПрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

  • __init__ : рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░рдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд▓реЗрдпрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
  • * build : рдкрд░рдд рд╡рдЬрди рдмрдирд╛рдПрдБред add_weight рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдЯ рдЬреЛрдбрд╝реЗрдВ
  • call : рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рддрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
  • рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, get_config рд╡рд┐рдзрд┐ рдФрд░ from_config рд╡рд░реНрдЧ from_config рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдкрд░рдд рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдиреАрдЪреЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдХрд░реНрдиреЗрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдХреЛ matmul рдЧрдП рдореИрдЯреНрд░рд┐рдХреНрд╕ ( matmul ) рдХреЛ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ:

 class MyLayer(layers.Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape): #       . self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], self.output_dim), initializer='uniform', trainable=True) def call(self, inputs): return tf.matmul(inputs, self.kernel) def get_config(self): base_config = super(MyLayer, self).get_config() base_config['output_dim'] = self.output_dim return base_config @classmethod def from_config(cls, config): return cls(**config) 

рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдБ:

 model = tf.keras.Sequential([ MyLayer(10), layers.Activation('softmax')]) #      model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['accuracy']) #   5 . model.fit(data, labels, batch_size=32, epochs=5) 

рдХреЙрд▓рдмреИрдХ


рдХреЛрд▓реНрдмрдХ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╕реНрдЯрдо рдХреЙрд▓рдмреИрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд tf.keras.callbacks рдЙрдкрдпреЛрдЧ рдХрд░ tf.keras.callbacks рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

tf.keras.callbacks.ModelCheckpoint : рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдореЙрдбрд▓ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╕рд╣реЗрдЬрдирд╛ред
tf.keras.callbacks.LearningRateScheduler : рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рд╢рд┐рдХреНрд╖рдг рдЪрд░рдг рдмрджрд▓реЗрдВред
tf.keras.callbacks.EarlyStopping : рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд░реЛрдХ рджреЗрдирд╛ред
tf.keras.callbacks.TensorBoard: рдореЙрдирд┐рдЯрд░ рдореЙрдбрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
TensorBoard

tf.keras.callbacks.Callback рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ fit рдореЙрдбрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:

 callbacks = [ #    `val_loss`     2  tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'), #   TensorBoard   `./logs` directory tf.keras.callbacks.TensorBoard(log_dir='./logs') ] model.fit(data, labels, batch_size=32, epochs=5, callbacks=callbacks, validation_data=(val_data, val_labels)) 

рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


рдХреЗрд╡рд▓ рд╡рдЬрди рдореВрд▓реНрдпреЛрдВ рдХреА рдмрдЪрдд


tf.keras.Model.save_weights рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рднрд╛рд░ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд▓реЛрдб рдХрд░реЗрдВ:

 model = tf.keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(32,)), layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy']) 

 #     TensorFlow Checkpoint model.save_weights('./weights/my_model') #    #        . model.load_weights('./weights/my_model') 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдореЙрдбрд▓ рд╡реЗрдЯ TensorFlow рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╡рдЬрди рдХреЛ рдХреЗрд░рд╕ рдПрдЪрдбреАрдПрдл 5 рдкреНрд░рд╛рд░реВрдк (рдХреЗрд░рд╕ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп) рдореЗрдВ рднреА рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 #     HDF5 model.save_weights('my_model.h5', save_format='h5') #    model.load_weights('my_model.h5') 

рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╣реЗрдЬрдирд╛


рдореЙрдбрд▓ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рдЬрди рдХреЗ рдореЙрдбрд▓ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореВрд▓ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рд╕рдорд╛рди рдореЙрдбрд▓ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд░рд╕рди JSON рдФрд░ YAML рдХреНрд░рдорд╛рдВрдХрди рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

 #     JSON json_string = model.to_json() json_string 

 import json import pprint pprint.pprint(json.loads(json_string)) 

JSON рд╕реЗ рдПрдХ рдореЙрдбрд▓ (рдкреБрдирд░реНрдирд┐рд╡реЗрд╢рд┐рдд) рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛:

 fresh_model = tf.keras.models.model_from_json(json_string) 

рдореЙрдбрд▓ рдХреЛ рдпрд░рдорд▓ рдХреЗ рд╕рд╛рде рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TensorFlow рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ `pyyaml` рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

 yaml_string = model.to_yaml() print(yaml_string) 

YAML рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛:

 fresh_model = tf.keras.models.model_from_yaml(yaml_string) 

рдиреЛрдЯ: рдЙрдкрд╡рд░реНрдЧрд┐рдд рдореЙрдбрд▓ рдХреНрд░рдорд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ `рдХреЙрд▓` рдкрджреНрдзрддрд┐ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкрд╛рдпрдерди рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреВрд░реЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛


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

 #    model = tf.keras.Sequential([ layers.Dense(10, activation='softmax', input_shape=(32,)), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) #      HDF5 model.save('my_model.h5') #         . model = tf.keras.models.load_model('my_model.h5') 

рдЙрддреНрд╕реБрдХ рдирд┐рд╖реНрдкрд╛рджрди


рдПрдЧрд░ рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬреЛ рддреБрд░рдВрдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ tf.keras рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди tf.keras рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

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

рд╡рд┐рддрд░рдг


рдорд▓реНрдЯреАрдкрд▓ рдЬреАрдкреАрдпреВ


tf.keras рдореЙрдбрд▓ рдХреЛ рдХрдИ GPU рдкрд░ tf.distribute.Strategy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдкреАрдЖрдИ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдХрдо рдпрд╛ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХреЗ рд╕рд╛рде рдХрдИ GPU рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╕реАрдЦрдиреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, tf.distribute.MirroredStrategy рдПрдХрдорд╛рддреНрд░ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рддрд░рдг рд░рдгрдиреАрддрд┐ рд╣реИред MirroredStrategy рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рд░реЗрдЦрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдорд╢реАрди рдкрд░ рд╕рднреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реАрдЦрдиреЗред ` .scope() рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,` Strategy `` .scope() `рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрдХреВрд▓рдХ рдЕрдзрд┐рд╖реНрдард╛рдкрди, рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рд╕рдВрдХрд▓рди рдХреЛ рдШреЛрдВрд╕рд▓реЗ рдореЗрдВ .scope() , рдлрд┐рд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВред

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдХрдИ GPU рдХреЗ рдмреАрдЪ tf.keras.Model рд╡рд┐рддрд░рд┐рдд tf.keras.Model ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╡рд┐рддрд░рд┐рдд рд░рдгрдиреАрддрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рдПрдХ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = tf.keras.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10,))) model.add(layers.Dense(1, activation='sigmoid')) optimizer = tf.keras.optimizers.SGD(0.2) model.compile(loss='binary_crossentropy', optimizer=optimizer) model.summary() 

рдлрд┐рд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдбреЗрдЯрд╛ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 x = np.random.random((1024, 10)) y = np.random.randint(2, size=(1024, 1)) x = tf.cast(x, tf.float32) dataset = tf.data.Dataset.from_tensor_slices((x, y)) dataset = dataset.shuffle(buffer_size=1024).batch(32) model.fit(dataset, epochs=1) 

рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж, рдЕрдиреБрд╡рд╛рдж Tensorflow.org рдкрд░ рднреА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рд░реВрд╕реА рдореЗрдВ Tensorflow.org рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред рдХрд┐рд╕реА рднреА рд╕реБрдзрд╛рд░ рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

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


All Articles