рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЙрди рджреЛ рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдпрд╣ рдХреЗрд░рд╕ рдкрд░ рдПрдХ рддреБрдЪреНрдЫ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВрдЧреЗред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред
рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХрдЯ рдХреЗ рддрд╣рдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдмрд╛рдК рд╡рд░реНрдгрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рдФрд░ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреАред
рд╕рдорд╛рдзрд╛рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
import numpy as np from keras.layers import Input, Dense, Lambda from keras.models import Model import keras.backend as K
рд╕реАрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рдЖрдк рдПрдХ рдирдЦрд░реЗ рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рдордп рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред
Epoch 1/100 1000/1000 [==============================] - 2s 2ms/step - loss: 1044.0806 Epoch 2/100 1000/1000 [==============================] - 2s 2ms/step - loss: 713.5198 Epoch 3/100 1000/1000 [==============================] - 3s 3ms/step - loss: 708.1110 ... Epoch 98/100 1000/1000 [==============================] - 2s 2ms/step - loss: 415.0479 Epoch 99/100 1000/1000 [==============================] - 2s 2ms/step - loss: 416.6932 Epoch 100/100 1000/1000 [==============================] - 2s 2ms/step - loss: 417.2400 [array([[73., 57.]])] [array([[65.]])] [[49.650894]]
49 рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рдереА, рдЬреЛ 65 рд╕реЗ рджреВрд░ рд╣реИред
рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЬрдирд░реЗрдЯрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
def train_iterator_1(batch_size=64): x = np.zeros((batch_size, 2)) x_mean = np.zeros((batch_size,)) while True: for i in range(batch_size): x[i][0] = np.random.randint(0, 100) x[i][1] = np.random.randint(0, 100) x_mean[::] = (x[::,0] + x[::,1]) / 2 x_mean_ex = np.expand_dims(x_mean, -1) yield [x], [x_mean_ex]
рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдЪрдореБрдЪ рддреАрд╕рд░реЗ рдпреБрдЧ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
Epoch 1/5 1000/1000 [==============================] - 2s 2ms/step - loss: 648.9184 Epoch 2/5 1000/1000 [==============================] - 2s 2ms/step - loss: 0.0177 Epoch 3/5 1000/1000 [==============================] - 2s 2ms/step - loss: 0.0030
рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, x_mean рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рд░ рдмрд╛рд░ рдореЗрдореЛрд░реА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдЖрдЧреЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
def train_iterator(batch_size=1): x = np.zeros((batch_size, 2)) while True: for i in range(batch_size): x[i][0] = np.random.randint(0, 100) x[i][1] = np.random.randint(0, 100) x_mean = (x[::,0] + x[::,1]) / 2 yield x, x_mean it = train_iterator() print(next(it), next(it))
(array([[44., 2.]]), array([10.])) (array([[44., 2.]]), array([23.]))
рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЙрд▓ рдореЗрдВ рдФрд╕рдд рдореВрд▓реНрдп рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдФрд╕рдд рдореВрд▓реНрдп рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгреА рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рджреВрд╕рд░реА рдмрд╛рд░ рдЬрдм рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рддреЛ рд╕рд░рдгреА рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкреНрд░рд┐рдВрдЯ () рдлрд╝рдВрдХреНрд╢рди рд╕рд░рдгреА рдореЗрдВ рдХреНрдпрд╛ рдерд╛, рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдорд╣рдВрдЧреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд╣реА рд╣реИрдВред
1. рдЪрд░ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдЪрд░ x рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдЬ рдкрд░ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рдПред
def train_iterator_1(batch_size=1): while True: x = np.zeros((batch_size, 2)) for i in range(batch_size): x[i][0] = np.random.randint(0, 100) x[i][1] = np.random.randint(0, 100) x_mean = (x[::,0] + x[::,1]) / 2 yield x, x_mean it_1 = train_iterator_1() print(next(it_1), next(it_1))
(array([[82., 4.]]), array([43.])) (array([[77., 34.]]), array([55.5]))
2. рд╕рд░рдгреА рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛рдПрдВред
def train_iterator_2(batch_size=1): x = np.zeros((batch_size, 2)) while True: x = np.zeros((batch_size, 2)) for i in range(batch_size): x[i][0] = np.random.randint(0, 100) x[i][1] = np.random.randint(0, 100) x_mean = (x[::,0] + x[::,1]) / 2 yield np.copy(x), x_mean it_2 = train_iterator_2() print(next(it_2), next(it_2))
(array([[63., 31.]]), array([47.])) (array([[94., 25.]]), array([59.5]))
рдЕрдм рд╕рдм рдареАрдХ рд╣реИред рдЖрдЧреЗ рдмрдврд╝реЛред
рдХреНрдпрд╛ Expand_dims рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрдЗрдП рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдирдпрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
def train_iterator(batch_size=64): while True: x = np.zeros((batch_size, 2)) for i in range(batch_size): x[i][0] = np.random.randint(0, 100) x[i][1] = np.random.randint(0, 100) x_mean = (x[::,0] + x[::,1]) / 2 yield [x], [x_mean]
рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реАрдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЖрдХрд╛рд░ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [[рек репред]] рдерд╛, рдФрд░ рдпрд╣ [рек репред] рдмрди рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдХреЗрд░рд╕ рдХреЗ рдЕрдВрджрд░, рдпрд╣, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╡рд╛рдВрдЫрд┐рдд рдЖрдпрд╛рдо рддрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдШрдЯрд╛ рд╣реИред
рддреЛ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╣реА рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдм рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░рд╛_рдбрд┐рдореНрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦреЗрдВред
рд╣рдо рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рд╕рд┐рд░реНрдл рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реА рдореВрд▓реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
def calc_mean(x): res = (x[::,0] + x[::,1]) / 2 res = K.expand_dims(res, -1) return res def create_model(): x = Input(name = 'x', shape=(2,)) x_mean = Lambda(lambda x: calc_mean(x), output_shape=(1,))(x) model = Model(inputs=x, outputs=x_mean) return model
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ:
Epoch 1/5 100/100 [==============================] - 0s 3ms/step - loss: 0.0000e+00 Epoch 2/5 100/100 [==============================] - 0s 2ms/step - loss: 0.0000e+00 Epoch 3/5 100/100 [==============================] - 0s 3ms/step - loss: 0.0000e+00
рдЕрдм рдЕрдкрдиреЗ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд╕рдкреЗрдВрд╢рди_рдбрд┐рдореНрд╕ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
def calc_mean(x): res = (x[::,0] + x[::,1]) / 2 return res
рдореЙрдбрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдпрд╛рдо рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреА, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ рд╣реИ, рдиреБрдХрд╕рд╛рди рдХреЛ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗред рддреЛ рдпрд╣рд╛рдБ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░_ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреБрдЫ рднреА рдЕрдкрдиреЗ рдЖрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
Epoch 1/5 100/100 [==============================] - 0s 3ms/step - loss: 871.6299 Epoch 2/5 100/100 [==============================] - 0s 3ms/step - loss: 830.2568 Epoch 3/5 100/100 [==============================] - 0s 2ms/step - loss: 830.8041
рдФрд░ рдпрджрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА () рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдпрд╛рдо рдЧрд▓рдд рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ [46.] рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд [[46.]] рд╣реИред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ред рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред