рдПрдХ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреАрддрдХрд╛рд░

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреАрдд рд░рдЪрдирд╛



рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдмрд╛рдж, рдореИрдВ рд╕рдВрдЧреАрдд рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

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

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


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


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


LSTM рдЗрдВрдЯрд░реНрдирд▓ рднрдпрднреАрдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди TensorFlow рдФрд░ / рдпрд╛ Keras рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ LSTM рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╕рдВрдЧреАрдд


рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░рд▓ LSTM рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рд░рдЪрдирд╛рдПрдБ рдПрдХ рдорд┐рдбреА рдЪреИрдирд▓ рд╣реЛрдВред рдЗрд╕ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдПрдХрд▓ рд╕реЗ рдкрд┐рдпрд╛рдиреЛ рддрдХ рдорд┐рдбреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдореБрдЭреЗ рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдкрд┐рдпрд╛рдиреЛ рдорд┐рдбреА рдкреЗрдЬ рдФрд░ mfiles рдкрд░ рдкрд┐рдпрд╛рдиреЛ рд╕реЙрд▓реЛрд╕ рдХреЗ рд╕рд╛рде рдорд┐рдбреА рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реАрдВ , рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

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

LSTM рдореЙрдбрд▓


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

рдореИрдВрдиреЗ lstm.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдФрд░ 15 рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рдЬрдм рдореИрдВрдиреЗ рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЪрд▓рд╛рдпрд╛, рддреЛ рдореИрдВ рдирд┐рд░рд╛рд╢ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рдПрдХ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЧрдП рдиреЛрдЯ рд╢рд╛рдорд┐рд▓ рдереЗред рджреЛ рдмрд╛рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗред

рд╕реНрд░реЛрдд рдореЙрдбрд▓

model = Sequential() model.add(CuDNNLSTM(512,input_shape=(network_input.shape[1], network_input.shape[2]),return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512, return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512)) model.add(Dense(256)) model.add(Dropout(0.3)) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"]) 

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


рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реБрдЖред рд▓реЗрдХрд┐рди рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

 model = Sequential() model.add(CuDNNLSTM(512, input_shape=(network_input.shape[1], network_input.shape[2]), return_sequences=True)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(CuDNNLSTM(256)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(128, activation="relu")) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=["accuracy"]) 

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

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

рдореЙрдбрд▓ рдХреЛ рдХрдм рддрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП


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

рд▓реЗрдХрд┐рди рдЖрдк рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдпреБрдЧреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИ?

рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ 500 рдпреБрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ 50 рдпреБрдЧ рдореЗрдВ рдореЙрдбрд▓ рдФрд░ рд╕рдЯреАрдХрддрд╛ / рд╣рд╛рдирд┐ рдЧреНрд░рд╛рдл рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ 50 рдпреБрдЧреЛрдВ рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдФрд░ рдЧреНрд░рд╛рдлрд╝ рдорд┐рд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреИрд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ 50 рдпреБрдЧреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд░рди рдХреЗ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ, рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдЬреАрдЖрдИрдПрдл рдореЗрдВ рд╕рдВрдпреБрдХреНрддред


рдпреЗ рд╡реЗ рдЧреНрд░рд╛рдлрд╝ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдиреБрдХрд╕рд╛рди рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдо рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдЯреАрдХрддрд╛ рдмрдврд╝рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ 100% рдХреЗ рдХрд░реАрдм рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЗрди рд╕реНрддрдВрднреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдореЙрдбрд▓ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЧрдИ рдПрдВрдЯреЗрдореНрд╕ рд╢реНрд░реЗрдгреА рдХреА рдорд┐рдбреА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



150 рдпреБрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рдбреА рдбреЗрдЯрд╛ред



100-рдпреБрдЧ рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдорд┐рдбреА рдЖрдЙрдЯрдкреБрдЯред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 100 рдпреБрдЧреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ рд╕реНрд░реЛрдд рдХреЛ рдмрд╣реБрдд рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ рдирдореВрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рд╕реАрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЬрдм рд╕реАрдЦрдирд╛ рдмреБрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ



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


рд╕реАрдЦрдиреЗ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЧрдИ рдорд┐рдбреА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрд╕рдиреЗ 200 рдпреБрдЧреЛрдВ рд╕реЗ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред 200 рдпреБрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдорд┐рдбреА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред



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

рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг




рдЪреЛрдкрд┐рди рдХреА рд░рдЪрдирд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 75 рдпреБрдЧреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдХреНрд░рд┐рд╕рдорд╕ рдХреА рд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд┐рдбреА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 50-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред



рдХреНрд░рд┐рд╕рдорд╕ рдХреА рд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд┐рдбреА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ 100-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдХреНрд░рд┐рд╕рдорд╕" рд╣реИрдВ?



рдмрд╛рдЪ рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 300-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ рдпрд╣рд╛рдВ рд╕реЗ рдФрд░ рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред



рдмрд╛рд▓рд╛рдХрд┐рд░рд╡ рдХреА рдХреЗрд╡рд▓ рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 200-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ рдпрд╣рд╛рдБ рд▓рд┐рдпрд╛ рдЧрдпрд╛ ред



рдбреЗрдмреНрдпреВ рд░рдЪрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 200 рдпреБрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ред



рдореЛрдЬрд╛рд░реНрдЯ рдХреА рд░рдЪрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 175-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред



рд╢реВрдмрд░реНрдЯ рд░рдЪрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 100 рдпреБрдЧреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ред



рд╢реБрдорд╛рди рд░рдЪрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ 200-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред



рддрдЪреАрдХреЛрд╡рд╕реНрдХреА рдХреА рд░рдЪрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ 200-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред



рд▓реЛрдХ рдЧреАрддреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд 175 рдпреБрдЧреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ред



рд▓реЛрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд 100 рдпреБрдЧреЛрдВ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ред



рд╢рд╛рджреА рдХреЗ рд╕рдВрдЧреАрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд 100-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред



рдореЗрд░реЗ YouTube рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдЙрдВрдбрдЯреНрд░реИрдХ рд╕реЗ рд▓реА рдЧрдИ рдореЗрд░реА рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ 200-рдпреБрдЧ рдХрд╛ рдореЙрдбрд▓ред рдпрд╣ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣рдЯ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдореЗрд░реА рдЫреЛрдЯреА рдПрдХ- рдФрд░ рджреЛ-рд╕реНрдЯреНрд░реЛрдХ рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рд╕реНрдХреЛрд░


рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЛ рдЕрдкрдиреА рдорд┐рдбреА рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓ рдЬрд╛рддреА рд╣реИрдВ , рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреЛрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрд▓рдореАрдЖрд░ рдЬреИрд╕реЗ рдСрдирд▓рд╛рдЗрди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдорд┐рдбреА рд╕реЙрдлреНрдЯреЛрд▓реЙрдЬреА 200-рдпреБрдЧ рдХреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реНрдХреЛрд░ рд╣реИред



рдореИрдВ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддрд╛ / рд╕рдХрддреА рд╣реВрдВ


LSTM рдХрдореНрдкреЛрдЬрд╝рд░ рдЕрдм рд╡рд┐рдЬреАрдУ рдХреА рдЕрд░рд╛рдЬрдХрддрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред


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

рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрднреА рддрдХ рдкреВрд░реНрдг рд░рдЪрдирд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдиреЛрдЯреНрд╕ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдЫреЛрдЯреЗ рдЕрдиреБрдХреНрд░рдо рд╣реИрдВ рдЬреЛ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрдЧреАрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, LSTM рд╕рдВрдЧреАрддрдХрд╛рд░ рдирдИ рд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдкрд╛рдпрдерди рд╕реНрд░реЛрдд


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

рдпрд╣рд╛рдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ lstm_music_train.py

lstm_music_train.py
 # based on code from https://github.com/Skuldur/Classical-Piano-Composer # to use this script pass in; # 1. the directory with midi files # 2. the directory you want your models to be saved to # 3. the model filename prefix # 4. how many total epochs you want to train for # eg python -W ignore "C:\\LSTM Composer\\lstm_music_train.py" "C:\\LSTM Composer\\Bach\\" "C:\\LSTM Composer\\" "Bach" 500 import os import tensorflow as tf # ignore all info and warning messages os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) import glob import pickle import numpy import sys import keras import matplotlib.pyplot as plt from music21 import converter, instrument, note, chord from datetime import datetime from keras.models import Sequential from keras.layers.normalization import BatchNormalization from keras.layers import Dense from keras.layers import Dropout from keras.layers import CuDNNLSTM from keras.layers import Activation from keras.utils import np_utils from keras.callbacks import TensorBoard from shutil import copyfile # name of midi file directory, model directory, model file prefix, and epochs mididirectory = str(sys.argv[1]) modeldirectory = str(sys.argv[2]) modelfileprefix = str(sys.argv[3]) modelepochs = int(sys.argv[4]) notesfile = modeldirectory + modelfileprefix + '.notes' # callback to save model and plot stats every 25 epochs class CustomSaver(keras.callbacks.Callback): def __init__(self): self.epoch = 0 # This function is called when the training begins def on_train_begin(self, logs={}): # Initialize the lists for holding the logs, losses and accuracies self.losses = [] self.acc = [] self.logs = [] def on_epoch_end(self, epoch, logs={}): # Append the logs, losses and accuracies to the lists self.logs.append(logs) self.losses.append(logs.get('loss')) self.acc.append(logs.get('acc')*100) # save model and plt every 50 epochs if (epoch+1) % 25 == 0: sys.stdout.write("\nAuto-saving model and plot after {} epochs to ".format(epoch+1)+"\n"+modeldirectory + modelfileprefix + "_" + str(epoch+1).zfill(3) + ".model\n"+modeldirectory + modelfileprefix + "_" + str(epoch+1).zfill(3) + ".png\n\n") sys.stdout.flush() self.model.save(modeldirectory + modelfileprefix + '_' + str(epoch+1).zfill(3) + '.model') copyfile(notesfile,modeldirectory + modelfileprefix + '_' + str(epoch+1).zfill(3) + '.notes'); N = numpy.arange(0, len(self.losses)) # Plot train loss, train acc, val loss and val acc against epochs passed plt.figure() plt.subplots_adjust(hspace=0.7) plt.subplot(2, 1, 1) # plot loss values plt.plot(N, self.losses, label = "train_loss") plt.title("Loss [Epoch {}]".format(epoch+1)) plt.xlabel('Epoch') plt.ylabel('Loss') plt.subplot(2, 1, 2) # plot accuracy values plt.plot(N, self.acc, label = "train_acc") plt.title("Accuracy % [Epoch {}]".format(epoch+1)) plt.xlabel("Epoch") plt.ylabel("Accuracy %") plt.savefig(modeldirectory + modelfileprefix + '_' + str(epoch+1).zfill(3) + '.png') plt.close() # train the neural network def train_network(): sys.stdout.write("Reading midi files...\n\n") sys.stdout.flush() notes = get_notes() # get amount of pitch names n_vocab = len(set(notes)) sys.stdout.write("\nPreparing note sequences...\n") sys.stdout.flush() network_input, network_output = prepare_sequences(notes, n_vocab) sys.stdout.write("\nCreating CuDNNLSTM neural network model...\n") sys.stdout.flush() model = create_network(network_input, n_vocab) sys.stdout.write("\nTraining CuDNNLSTM neural network model...\n\n") sys.stdout.flush() train(model, network_input, network_output) # get all the notes and chords from the midi files def get_notes(): # remove existing data file if it exists if os.path.isfile(notesfile): os.remove(notesfile) notes = [] for file in glob.glob("{}/*.mid".format(mididirectory)): midi = converter.parse(file) sys.stdout.write("Parsing %s ...\n" % file) sys.stdout.flush() notes_to_parse = None try: # file has instrument parts s2 = instrument.partitionByInstrument(midi) notes_to_parse = s2.parts[0].recurse() except: # file has notes in a flat structure notes_to_parse = midi.flat.notes for element in notes_to_parse: if isinstance(element, note.Note): notes.append(str(element.pitch)) elif isinstance(element, chord.Chord): notes.append('.'.join(str(n) for n in element.normalOrder)) with open(notesfile,'wb') as filepath: pickle.dump(notes, filepath) return notes # prepare the sequences used by the neural network def prepare_sequences(notes, n_vocab): sequence_length = 100 # get all pitch names pitchnames = sorted(set(item for item in notes)) # create a dictionary to map pitches to integers note_to_int = dict((note, number) for number, note in enumerate(pitchnames)) network_input = [] network_output = [] # create input sequences and the corresponding outputs for i in range(0, len(notes) - sequence_length, 1): sequence_in = notes[i:i + sequence_length] # needs to take into account if notes in midi file are less than required 100 ( mod ? ) sequence_out = notes[i + sequence_length] # needs to take into account if notes in midi file are less than required 100 ( mod ? ) network_input.append([note_to_int[char] for char in sequence_in]) network_output.append(note_to_int[sequence_out]) n_patterns = len(network_input) # reshape the input into a format compatible with CuDNNLSTM layers network_input = numpy.reshape(network_input, (n_patterns, sequence_length, 1)) # normalize input network_input = network_input / float(n_vocab) network_output = np_utils.to_categorical(network_output) return (network_input, network_output) # create the structure of the neural network def create_network(network_input, n_vocab): ''' """ create the structure of the neural network """ model = Sequential() model.add(CuDNNLSTM(512, input_shape=(network_input.shape[1], network_input.shape[2]), return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512, return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512)) model.add(Dense(256)) model.add(Dropout(0.3)) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"]) ''' model = Sequential() model.add(CuDNNLSTM(512, input_shape=(network_input.shape[1], network_input.shape[2]), return_sequences=True)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(CuDNNLSTM(256)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(128, activation="relu")) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=["accuracy"]) return model # train the neural network def train(model, network_input, network_output): # saver = CustomSaver() # history = model.fit(network_input, network_output, epochs=modelepochs, batch_size=50, callbacks=[tensorboard]) history = model.fit(network_input, network_output, epochs=modelepochs, batch_size=50, callbacks=[CustomSaver()]) # evaluate the model print("\nModel evaluation at the end of training") train_acc = model.evaluate(network_input, network_output, verbose=0) print(model.metrics_names) print(train_acc) # save trained model model.save(modeldirectory + modelfileprefix + '_' + str(modelepochs) + '.model') # delete temp notes file os.remove(notesfile) if __name__ == '__main__': train_network() 

рдФрд░ рдпрд╣рд╛рдБ midi lstm_music_predict.py рдкреАрдврд╝реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

lstm_music_predict.py
 # based on code from https://github.com/Skuldur/Classical-Piano-Composer # to use this script pass in; # 1. path to notes file # 2. path to model # 3. path to midi output # eg python -W ignore "C:\\LSTM Composer\\lstm_music_predict.py" "C:\\LSTM Composer\\Bach.notes" "C:\\LSTM Composer\\Bach.model" "C:\\LSTM Composer\\Bach.mid" # ignore all info and warning messages import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) import pickle import numpy import sys import keras.models from music21 import instrument, note, stream, chord from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.layers import Activation # name of weights filename notesfile = str(sys.argv[1]) modelfile = str(sys.argv[2]) midifile = str(sys.argv[3]) # generates a piano midi file def generate(): sys.stdout.write("Loading notes data file...\n\n") sys.stdout.flush() #load the notes used to train the model with open(notesfile, 'rb') as filepath: notes = pickle.load(filepath) sys.stdout.write("Getting pitch names...\n\n") sys.stdout.flush() # Get all pitch names pitchnames = sorted(set(item for item in notes)) # Get all pitch names n_vocab = len(set(notes)) sys.stdout.write("Preparing sequences...\n\n") sys.stdout.flush() network_input, normalized_input = prepare_sequences(notes, pitchnames, n_vocab) sys.stdout.write("Loading LSTM neural network model...\n\n") sys.stdout.flush() model = create_network(normalized_input, n_vocab) sys.stdout.write("Generating note sequence...\n\n") sys.stdout.flush() prediction_output = generate_notes(model, network_input, pitchnames, n_vocab) sys.stdout.write("\nCreating MIDI file...\n\n") sys.stdout.flush() create_midi(prediction_output) # prepare the sequences used by the neural network def prepare_sequences(notes, pitchnames, n_vocab): # map between notes and integers and back note_to_int = dict((note, number) for number, note in enumerate(pitchnames)) sequence_length = 100 network_input = [] output = [] for i in range(0, len(notes) - sequence_length, 1): sequence_in = notes[i:i + sequence_length] sequence_out = notes[i + sequence_length] network_input.append([note_to_int[char] for char in sequence_in]) output.append(note_to_int[sequence_out]) n_patterns = len(network_input) # reshape the input into a format compatible with LSTM layers normalized_input = numpy.reshape(network_input, (n_patterns, sequence_length, 1)) # normalize input normalized_input = normalized_input / float(n_vocab) return (network_input, normalized_input) # create the structure of the neural network def create_network(network_input, n_vocab): model = keras.models.load_model(modelfile) return model # generate notes from the neural network based on a sequence of notes def generate_notes(model, network_input, pitchnames, n_vocab): # pick a random sequence from the input as a starting point for the prediction start = numpy.random.randint(0, len(network_input)-1) int_to_note = dict((number, note) for number, note in enumerate(pitchnames)) pattern = network_input[start] prediction_output = [] # generate 500 notes for note_index in range(500): prediction_input = numpy.reshape(pattern, (1, len(pattern), 1)) prediction_input = prediction_input / float(n_vocab) prediction = model.predict(prediction_input, verbose=0) index = numpy.argmax(prediction) result = int_to_note[index] prediction_output.append(result) pattern.append(index) pattern = pattern[1:len(pattern)] if (note_index + 1) % 50 == 0: sys.stdout.write("{} out of 500 notes generated\n".format(note_index+1)) sys.stdout.flush() return prediction_output # convert the output from the prediction to notes and create a midi file from the notes def create_midi(prediction_output): offset = 0 output_notes = [] # create note and chord objects based on the values generated by the model for pattern in prediction_output: # pattern is a chord if ('.' in pattern) or pattern.isdigit(): notes_in_chord = pattern.split('.') notes = [] for current_note in notes_in_chord: new_note = note.Note(int(current_note)) new_note.storedInstrument = instrument.Piano() notes.append(new_note) new_chord = chord.Chord(notes) new_chord.offset = offset output_notes.append(new_chord) # pattern is a note else: new_note = note.Note(pattern) new_note.offset = offset new_note.storedInstrument = instrument.Piano() output_notes.append(new_note) # increase offset each iteration so that notes do not stack offset += 0.5 midi_stream = stream.Stream(output_notes) midi_stream.write('midi', fp=midifile) if __name__ == '__main__': generate() 

рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░


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

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

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


рдЗрд╕ рд╕реНрддрд░ рдкрд░, LSTM рд╕рдВрдЧреАрддрдХрд╛рд░ рд╕рдВрдЧреАрдд рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред

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

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


All Articles