рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

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

рдЫрд╡рд┐

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

рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рдЪрдпред

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

рдЫрд╡рд┐

рд▓рд┐рдП рдХреНрдпрд╛ рд▓реЗрдирд╛ рд╣реИ рдФрд░ рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН , рдкрд░реНрдпрд╡реЗрдХреНрд╖рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░рд╛рд╢рд╛рдУрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ-рдЖрдпрд╛рдореА рдФрд░ рдмрд╣реБрдЖрдпрд╛рдореА рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рд╡реЗрдХреНрдЯрд░ (Y) рдХрд╛ рдЧрдарди рд╕рдорд╛рди рд╣реИ: рд▓рдХреНрд╖реНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рдВрдХреЗрдд T (degC) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ(рд╣рд╡рд╛ рдХрд╛ рддрд╛рдкрдорд╛рди)ред рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдореЙрдбрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдП рдЧрдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ "рджрдлрди" рд╣реИ: рднрд╡рд┐рд╖реНрдп рдореЗрдВ рддрд╛рдкрдорд╛рди рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдпрд╛рдореА рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдирдкреБрдЯ рд╡реЗрдХреНрдЯрд░ (рдПрдХреНрд╕) рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рд╡рд╛ рдХрд╛ рддрд╛рдкрдорд╛рди; рдФрд░ рдмрд╣реБрдЖрдпрд╛рдореА рдХреЗ рд▓рд┐рдП - рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ: рд╣рд╡рд╛ рдХреЗ рддрд╛рдкрдорд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреА (mbar) (рд╡рд╛рдпреБрдордВрдбрд▓реАрдп рджрдмрд╛рд╡) рдФрд░ rho (g / m ** 3) (рдЖрд░реНрджреНрд░рддрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╢реНрди рдореЗрдВ рдореИрдиреБрдЕрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

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

рдЗрд╕рд▓рд┐рдП, рдореИрдиреБрдЕрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рда рдЗрдЯреИрд▓рд┐рдХ рдореЗрдВ рд╣реЛрдЧрд╛ ред

рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди


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

import tensorflow as tf

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd

mpl.rcParams['figure.figsize'] = (8, 6)
mpl.rcParams['axes.grid'] = False

рдореМрд╕рдо рд╕рдВрдмрдВрдзреА рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдСрдл рдмрд╛рдпреЛрдЧреЗрдХреЗрдорд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рд╣рд╛рдЗрдбреНрд░реЛрдореЗрдереЗрд░реЛрд▓реЙрдЬрд┐рдХрд▓ рд╕реНрдЯреЗрд╢рди рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдореМрд╕рдо рдбреЗрдЯрд╛

рдХреЗ рдореИрдиреБрдЕрд▓ рдЙрдкрдпреЛрдЧ рд╕рдордп рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдореИрдХреНрд╕ рдкреНрд▓реИрдВрдХ ред

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

zip_path = tf.keras.utils.get_file(
    origin='https://storage.googleapis.com/tensorflow/tf-keras-datasets/jena_climate_2009_2016.csv.zip',
    fname='jena_climate_2009_2016.csv.zip',
    extract=True)
csv_path, _ = os.path.splitext(zip_path)

df = pd.read_csv(csv_path)

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред

df.head()

рдЫрд╡рд┐

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╡рд▓реЛрдХрди рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдЕрд╡рдзрд┐ 10 рдорд┐рдирдЯ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЖрдкрдХреЗ 6 рдЕрд╡рд▓реЛрдХрди рд╣реЛрдВрдЧреЗред рдмрджрд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐ рджрд┐рди 144 (6x24) рдЕрд╡рд▓реЛрдХрди рдЬрдорд╛ рд╣реЛрддреЗ рд╣реИрдВред

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

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

def univariate_data(dataset, start_index, end_index, history_size, target_size):
  data = []
  labels = []

  start_index = start_index + history_size
  if end_index is None:
    end_index = len(dataset) - target_size

  for i in range(start_index, end_index):
    indices = range(i-history_size, i)
    # Reshape data from (history_size,) to (history_size, 1)
    data.append(np.reshape(dataset[indices], (history_size, 1)))
    labels.append(dataset[i+target_size])
  return np.array(data), np.array(labels)

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

TRAIN_SPLIT = 300000

рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреАрдЬ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

tf.random.set_seed(13)

рднрд╛рдЧ 1. рдПрдХ рдЖрдпрд╛рдореА рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди


рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ - рддрд╛рдкрдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ; рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдХреЗ рддрд╛рдкрдорд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдХреЗрд╡рд▓ рддрд╛рдкрдорд╛рди рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред

uni_data = df['T (degC)']
uni_data.index = df['Date Time']
uni_data.head()

Date Time
01.01.2009 00:10:00 -8.02
01.01.2009 00:20:00 -8.41
01.01.2009 00:30:00 -8.51
01.01.2009 00:40:00 -8.31
01.01.2009 00:50:00 -8.27
Name: T (degC), dtype: float64


рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рдпрд╣ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред

uni_data.plot(subplots=True)

рдЫрд╡рд┐

uni_data = uni_data.values

рдПрдХ рдХреГрддреНрд░рд┐рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ (рдЗрд╕рдХреЗ рдмрд╛рдж - рдПрдПрдирдПрди) рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рдбреЗрдЯрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣реИред рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирдХреАрдХрд░рдг ( рдорд╛рдирдХреАрдХрд░рдг ) рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рджреНрд╡рд╛рд░рд╛ рдФрд╕рдд рдФрд░ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдШрдЯрд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк tf.keras.utils.normalizeрдЙрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдиреЛрдВ рдХреЛ рд╢реНрд░реЗрдгреА [0,1] рддрдХ рд▓реЗ рдЬрд╛рддреА рд╣реИред

рдиреЛрдЯ : рдорд╛рдирдХреАрдХрд░рдг рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

uni_train_mean = uni_data[:TRAIN_SPLIT].mean()
uni_train_std = uni_data[:TRAIN_SPLIT].std()

рд╣рдо рдбреЗрдЯрд╛ рдорд╛рдирдХреАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред

uni_data = (uni_data-uni_train_mean)/uni_train_std

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

univariate_past_history = 20
univariate_future_target = 0

x_train_uni, y_train_uni = univariate_data(uni_data, 0, TRAIN_SPLIT,
                                           univariate_past_history,
                                           univariate_future_target)
x_val_uni, y_val_uni = univariate_data(uni_data, TRAIN_SPLIT, None,
                                       univariate_past_history,
                                       univariate_future_target)

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо univariate_dataред

print ('Single window of past history')
print (x_train_uni[0])
print ('\n Target temperature to predict')
print (y_train_uni[0])

Single window of past history
[[-1.99766294]
[-2.04281897]
[-2.05439744]
[-2.0312405 ]
[-2.02660912]
[-2.00113649]
[-1.95134907]
[-1.95134907]
[-1.98492663]
[-2.04513467]
[-2.08334362]
[-2.09723778]
[-2.09376424]
[-2.09144854]
[-2.07176515]
[-2.07176515]
[-2.07639653]
[-2.08913285]
[-2.09260639]
[-2.10418486]]

Target temperature to predict
-2.1041848598100876

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

рдЫрд╡рд┐

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

def create_time_steps(length):
  return list(range(-length, 0))

def show_plot(plot_data, delta, title):
  labels = ['History', 'True Future', 'Model Prediction']
  marker = ['.-', 'rx', 'go']
  time_steps = create_time_steps(plot_data[0].shape[0])
  if delta:
    future = delta
  else:
    future = 0

  plt.title(title)
  for i, x in enumerate(plot_data):
    if i:
      plt.plot(future, plot_data[i], marker[i], markersize=10,
               label=labels[i])
    else:
      plt.plot(time_steps, plot_data[i].flatten(), marker[i], label=labels[i])
  plt.legend()
  plt.xlim([time_steps[0], (future+5)*2])
  plt.xlabel('Time-Step')
  return plt

show_plot([x_train_uni[0], y_train_uni[0]], 0, 'Sample Example')

рдЫрд╡рд┐

рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд╛рдзрд╛рди (рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛)

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

def baseline(history):
  return np.mean(history)

show_plot([x_train_uni[0], y_train_uni[0], baseline(x_train_uni[0])], 0,
           'Baseline Prediction Example')

рдЫрд╡рд┐

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдПрдХ рдЖрд╡рд░реНрддреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдФрд╕рдд" рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХ

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

рдЖрдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░tf.dataрдлреЗрд░рдмрджрд▓, рдмреИрдЪ, рдФрд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреИрд╢ред

рдЕрддрд┐рд░рд┐рдХреНрдд: рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ

рдкреГрд╖реНрда рдкрд░ рдлреЗрд░рдмрджрд▓, рдмреИрдЪ рдФрд░ рдХреИрд╢ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ :


BATCH_SIZE = 256
BUFFER_SIZE = 10000

train_univariate = tf.data.Dataset.from_tensor_slices((x_train_uni, y_train_uni))
train_univariate = train_univariate.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()

val_univariate = tf.data.Dataset.from_tensor_slices((x_val_uni, y_val_uni))
val_univariate = val_univariate.batch(BATCH_SIZE).repeat()

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╢реНрдп рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмреИрдЪ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдЫрд╡рд┐

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ LSTM рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред

simple_lstm_model = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(8, input_shape=x_train_uni.shape[-2:]),
    tf.keras.layers.Dense(1)
])

simple_lstm_model.compile(optimizer='adam', loss='mae')

рдореЙрдбрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

for x, y in val_univariate.take(1):
    print(simple_lstm_model.predict(x).shape)

(256, 1)

рдЬреЛрдбрд╝:

рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, RNS рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдореЗрдВ рдирд┐рдореНрди рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

[, , - ]
рдПрдХ рдЖрдпрд╛рдореА рдЗрдирдкреБрдЯ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрди рд░реВрдк рд╣реИрдВ:


print(x_train_uni.shape)
(299980, 20, 1)


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

EVALUATION_INTERVAL = 200
EPOCHS = 10

simple_lstm_model.fit(train_univariate, epochs=EPOCHS,
                      steps_per_epoch=EVALUATION_INTERVAL,
                      validation_data=val_univariate, validation_steps=50)

Train for 200 steps, validate for 50 steps
Epoch 1/10
200/200 [==============================] - 2s 11ms/step - loss: 0.4075 - val_loss: 0.1351
Epoch 2/10
200/200 [==============================] - 1s 4ms/step - loss: 0.1118 - val_loss: 0.0360
Epoch 3/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0490 - val_loss: 0.0289
Epoch 4/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0444 - val_loss: 0.0257
Epoch 5/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0299 - val_loss: 0.0235
Epoch 6/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0317 - val_loss: 0.0224
Epoch 7/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0287 - val_loss: 0.0206
Epoch 8/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0263 - val_loss: 0.0200
Epoch 9/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0254 - val_loss: 0.0182
Epoch 10/10
200/200 [==============================] - 1s 4ms/step - loss: 0.0228 - val_loss: 0.0174

рдПрдХ рд╕рд░рд▓ LSTM рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг LSTM рдореЙрдбрд▓

рдХреА рддреИрдпрд╛рд░реА рдкреВрд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрдИ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдХрд░реЗрдВрдЧреЗред

for x, y in val_univariate.take(3):
  plot = show_plot([x[0].numpy(), y[0].numpy(),
                    simple_lstm_model.predict(x)[0]], 0, 'Simple LSTM model')
  plot.show()

рдЫрд╡рд┐

рдпрд╣ рдмреЗрд╕ рд▓реЗрд╡рд▓ рд╕реЗ рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред

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

рднрд╛рдЧ 2: рдмрд╣реБрдЖрдпрд╛рдореА рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди


рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ 14 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореМрд╕рдо рд╕рдВрдмрдВрдзреА рд╕рдВрдХреЗрддрдХ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рддреАрди рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд╛рдпреБ рддрд╛рдкрдорд╛рди, рд╡рд╛рдпреБрдордВрдбрд▓реАрдп рджрдмрд╛рд╡ рдФрд░ рд╡рд╛рдпреБ рдШрдирддреНрд╡ред

рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдирд╛рдо рдХреЛ feature_considered рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред

features_considered = ['p (mbar)', 'T (degC)', 'rho (g/m**3)']

features = df[features_considered]
features.index = df['Date Time']
features.head()

рдЫрд╡рд┐

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рд╕рдВрдХреЗрддрдХ рд╕рдордп рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВред

features.plot(subplots=True)

рдЫрд╡рд┐

рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рдФрд╕рдд рдореВрд▓реНрдп рдФрд░ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред

dataset = features.values
data_mean = dataset[:TRAIN_SPLIT].mean(axis=0)
data_std = dataset[:TRAIN_SPLIT].std(axis=0)

dataset = (dataset-data_mean)/data_std

рдЬреЛрдбрд╝:

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


рдЫрд╡рд┐

рдмрд┐рдВрджреБ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА

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

def multivariate_data(dataset, target, start_index, end_index, history_size,
                      target_size, step, single_step=False):
  data = []
  labels = []

  start_index = start_index + history_size
  if end_index is None:
    end_index = len(dataset) - target_size

  for i in range(start_index, end_index):
    indices = range(i-history_size, i, step)
    data.append(dataset[indices])

    if single_step:
      labels.append(target[i+target_size])
    else:
      labels.append(target[i:i+target_size])

  return np.array(data), np.array(labels)

рдЗрд╕ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ, ANN рдкрд┐рдЫрд▓реЗ рдкрд╛рдБрдЪ (5) рджрд┐рдиреЛрдВ, рдпрд╛рдиреА 720 рдкреНрд░реЗрдХреНрд╖рдгреЛрдВ (6x2455) рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣рд░ рдШрдВрдЯреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 60 рдорд┐рдирдЯ рдХреЗ рднреАрддрд░, рддреЗрдЬ рдмрджрд▓рд╛рд╡ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдкрд╛рдВрдЪ рджрд┐рдиреЛрдВ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ 120 рдЕрд╡рд▓реЛрдХрди (720/6) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдореЙрдбрд▓ рдЬреЛ рд╕реНрдкреЙрдЯ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рднрд╡рд┐рд╖реНрдп рдореЗрдВ 12 рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж рддрд╛рдкрдорд╛рди рдХреЛ рдкрдврд╝рдирд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓рдХреНрд╖реНрдп рд╡реЗрдХреНрдЯрд░ 72 (12x6) рдЕрд╡рд▓реЛрдХрдиреЛрдВ рдХреЗ рдмрд╛рдж рддрд╛рдкрдорд╛рди рд╣реЛрдЧрд╛ ( рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреЗрдЦреЗрдВред - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред рдЕрдиреБрд╡рд╛рдж )ред

past_history = 720
future_target = 72
STEP = 6

x_train_single, y_train_single = multivariate_data(dataset, dataset[:, 1], 0,
                                                   TRAIN_SPLIT, past_history,
                                                   future_target, STEP,
                                                   single_step=True)
x_val_single, y_val_single = multivariate_data(dataset, dataset[:, 1],
                                               TRAIN_SPLIT, None, past_history,
                                               future_target, STEP,
                                               single_step=True)

рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

print ('Single window of past history : {}'.format(x_train_single[0].shape))

Single window of past history : (120, 3)

train_data_single = tf.data.Dataset.from_tensor_slices((x_train_single, y_train_single))
train_data_single = train_data_single.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()

val_data_single = tf.data.Dataset.from_tensor_slices((x_val_single, y_val_single))
val_data_single = val_data_single.batch(BATCH_SIZE).repeat()

single_step_model = tf.keras.models.Sequential()
single_step_model.add(tf.keras.layers.LSTM(32,
                                           input_shape=x_train_single.shape[-2:]))
single_step_model.add(tf.keras.layers.Dense(1))

single_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(), loss='mae')

рд╣рдо рдЕрдкрдиреЗ рдирдореВрдиреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣рд╛рдирд┐ рдШрдЯрддрд╛ рд╣реИред

for x, y in val_data_single.take(1):
  print(single_step_model.predict(x).shape)

(256, 1)

single_step_history = single_step_model.fit(train_data_single, epochs=EPOCHS,
                                            steps_per_epoch=EVALUATION_INTERVAL,
                                            validation_data=val_data_single,
                                            validation_steps=50)

Train for 200 steps, validate for 50 steps
Epoch 1/10
200/200 [==============================] - 4s 18ms/step - loss: 0.3090 - val_loss: 0.2646
Epoch 2/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2624 - val_loss: 0.2435
Epoch 3/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2616 - val_loss: 0.2472
Epoch 4/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2567 - val_loss: 0.2442
Epoch 5/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2263 - val_loss: 0.2346
Epoch 6/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2416 - val_loss: 0.2643
Epoch 7/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2411 - val_loss: 0.2577
Epoch 8/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2410 - val_loss: 0.2388
Epoch 9/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2447 - val_loss: 0.2485
Epoch 10/10
200/200 [==============================] - 2s 9ms/step - loss: 0.2388 - val_loss: 0.2422

def plot_train_history(history, title):
  loss = history.history['loss']
  val_loss = history.history['val_loss']

  epochs = range(len(loss))

  plt.figure()

  plt.plot(epochs, loss, 'b', label='Training loss')
  plt.plot(epochs, val_loss, 'r', label='Validation loss')
  plt.title(title)
  plt.legend()

  plt.show()

plot_train_history(single_step_history,
                   'Single Step Training and validation loss')

рдЫрд╡рд┐

рдЬреЛрдбрд╝:

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


рдЫрд╡рд┐

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ x_train_singleрд░реВрдк рд╣реИ (299280, 720, 3)ред
рдЬрдм STEP=6, рдкреНрд░рдкрддреНрд░ рдирд┐рдореНрди рд░реВрдк рд▓реЗрдЧрд╛: (299280, 120, 3)рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреНрд░реЗрдбрд┐рдЯ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдореИрдиреБрдЕрд▓ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдЬрдирд░реЗрдЯрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рд╣реИрдВред


рдПрдХ рдмрд┐рдВрджреБ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛

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

for x, y in val_data_single.take(3):
  plot = show_plot([x[0][:, 1].numpy(), y[0].numpy(),
                    single_step_model.predict(x)[0]], 12,
                   'Single Step Prediction')
  plot.show()

рдЫрд╡рд┐

рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди

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

рдорд╛рди рд▓реАрдЬрд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореЙрдбрд▓ рдкреНрд░рджрд░реНрд╢рди рдмрд┐рдВрджреБ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдореЙрдбрд▓ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░рд╛рд▓ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд┐рдЫрд▓реЗ рдкрд╛рдВрдЪ рджрд┐рдиреЛрдВ (720/6) рдХреЗ рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдорд╛рдк рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рдХреЛ рдЕрдЧрд▓реЗ 12 рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдЕрд╡рд▓реЛрдХрди рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЙрдбрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ 72 рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рдеред

future_target = 72
x_train_multi, y_train_multi = multivariate_data(dataset, dataset[:, 1], 0,
                                                 TRAIN_SPLIT, past_history,
                                                 future_target, STEP)
x_val_multi, y_val_multi = multivariate_data(dataset, dataset[:, 1],
                                             TRAIN_SPLIT, None, past_history,
                                             future_target, STEP)

рдЪрдпрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

print ('Single window of past history : {}'.format(x_train_multi[0].shape))
print ('\n Target temperature to predict : {}'.format(y_train_multi[0].shape))

Single window of past history : (120, 3)

Target temperature to predict : (72,)

train_data_multi = tf.data.Dataset.from_tensor_slices((x_train_multi, y_train_multi))
train_data_multi = train_data_multi.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()

val_data_multi = tf.data.Dataset.from_tensor_slices((x_val_multi, y_val_multi))
val_data_multi = val_data_multi.batch(BATCH_SIZE).repeat()

рдЬреЛрдбрд╝: "рдмрд┐рдВрджреБ рдореЙрдбрд▓" рд╕реЗ "рдЕрдВрддрд░рд╛рд▓ рдореЙрдбрд▓" рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рд╡реЗрдХреНрдЯрд░ рдХреЗ рдЧрдарди рдореЗрдВ рдЕрдВрддрд░ рдирд┐рдореНрди рдЖрдХреГрддрд┐ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЫрд╡рд┐

рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред

def multi_step_plot(history, true_future, prediction):
  plt.figure(figsize=(12, 6))
  num_in = create_time_steps(len(history))
  num_out = len(true_future)

  plt.plot(num_in, np.array(history[:, 1]), label='History')
  plt.plot(np.arange(num_out)/STEP, np.array(true_future), 'bo',
           label='True Future')
  if prediction.any():
    plt.plot(np.arange(num_out)/STEP, np.array(prediction), 'ro',
             label='Predicted Future')
  plt.legend(loc='upper left')
  plt.show()

рдЗрд╕ рдФрд░ рдмрд╛рдж рдХреЗ рдЪрд╛рд░реНрдЯ рдкрд░, рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рд╣реИрдВред

for x, y in train_data_multi.take(1):
  multi_step_plot(x[0], y[0], np.array([0]))

рдЫрд╡рд┐

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

multi_step_model = tf.keras.models.Sequential()
multi_step_model.add(tf.keras.layers.LSTM(32,
                                          return_sequences=True,
                                          input_shape=x_train_multi.shape[-2:]))
multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))
multi_step_model.add(tf.keras.layers.Dense(72))

multi_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(clipvalue=1.0), loss='mae')

рд╣рдо рдЕрдкрдиреЗ рдирдореВрдиреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣рд╛рдирд┐ рдШрдЯрддрд╛ рд╣реИред

for x, y in val_data_multi.take(1):
  print (multi_step_model.predict(x).shape)

(256, 72)

multi_step_history = multi_step_model.fit(train_data_multi, epochs=EPOCHS,
                                          steps_per_epoch=EVALUATION_INTERVAL,
                                          validation_data=val_data_multi,
                                          validation_steps=50)

Train for 200 steps, validate for 50 steps
Epoch 1/10
200/200 [==============================] - 21s 103ms/step - loss: 0.4952 - val_loss: 0.3008
Epoch 2/10
200/200 [==============================] - 18s 89ms/step - loss: 0.3474 - val_loss: 0.2898
Epoch 3/10
200/200 [==============================] - 18s 89ms/step - loss: 0.3325 - val_loss: 0.2541
Epoch 4/10
200/200 [==============================] - 18s 89ms/step - loss: 0.2425 - val_loss: 0.2066
Epoch 5/10
200/200 [==============================] - 18s 89ms/step - loss: 0.1963 - val_loss: 0.1995
Epoch 6/10
200/200 [==============================] - 18s 90ms/step - loss: 0.2056 - val_loss: 0.2119
Epoch 7/10
200/200 [==============================] - 18s 91ms/step - loss: 0.1978 - val_loss: 0.2079
Epoch 8/10
200/200 [==============================] - 18s 89ms/step - loss: 0.1957 - val_loss: 0.2033
Epoch 9/10
200/200 [==============================] - 18s 90ms/step - loss: 0.1977 - val_loss: 0.1860
Epoch 10/10
200/200 [==============================] - 18s 88ms/step - loss: 0.1904 - val_loss: 0.1863

plot_train_history(multi_step_history, 'Multi-Step Training and validation loss')

рдЫрд╡рд┐

рдПрдХ рдЕрдВрддрд░рд╛рд▓ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА

рдХрд░рддреЗ рд╣реБрдП, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рддрд╛рдкрдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдПрдирдПрди рдХреИрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред

for x, y in val_data_multi.take(3):
  multi_step_plot(x[0], y[0], multi_step_model.predict(x)[0])

рдЫрд╡рд┐

рдЕрдЧрд▓рд╛ рдХрджрдо


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

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

рдЖрдЧреЗ рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдкреБрд╕реНрддрдХ рдХреЗ рдЕрдзреНрдпрд╛рдп 15 рдХреЛ "рдПрдкреНрд▓рд╛рдЗрдб рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╡рд┐рде рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди, рдХреЗрд░рд╕, рдПрдВрдб рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ" ( рдСрд░реЗрд▓рд┐рди рдЧреЗрд░реЛрди , рджреНрд╡рд┐рддреАрдп рд╕рдВрд╕реНрдХрд░рдг) рдФрд░ рдкреБрд╕реНрддрдХ рдХреЗ рдЕрдзреНрдпрд╛рдп 6 рдХреЛ рдкрдврд╝реЗрдВред"рдкрд╛рдпрдерди рдореЗрдВ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ" (рдлреНрд░реЗрдВрдХреЛрдЗрд╕ рд╢реЛрд▓)ред

рдЕрдВрддрд┐рдо рд░реВрдк

рд╕реЗ рдШрд░ рдкрд░ рд░рд╣рддреЗ рд╣реБрдП, рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЫрдВрдЯреЗ рд╣реБрдП рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдореИрдиреБрдЕрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рджрдпрд╛ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 70x30 (рдкреНрд░рд╢рд┐рдХреНрд╖рдг / рдкрд░реАрдХреНрд╖рдг) рдХреЗ рдЕрдиреБрдкрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


dataset = features[300000:].values
TRAIN_SPLIT = 85000

All Articles