Wie einrichten LSTM-Netz Vorhersagen für multi-Sequenz?

Ich Lerne, wie man die RNN-LSTM-Netz für die Vorhersage. Ich habe ein dataset mit einer Eingabe-variable.

x  y
1  2.5
2  6
3  8.6
4  11.2
5  13.8
6  16.4
...

Durch den folgenden python-code, den ich erstellt habe das Fenster Daten, wie [x(t-2), x(t-1), x(t)] vorherzusagen [y(t)]:

df= pd.read_excel('dataset.xlsx')

# split a univariate dataset into train/test sets
def split_dataset(data):
    train, test = data[:-328], data[-328:-6]
    return train, test

train, test  = split_dataset(df.values)

# scale train and test data
def scale(train, test):
    # fit scaler
    scaler = MinMaxScaler(feature_range=(0,1))
    scaler = scaler.fit(train)
    # transform train
    #train = train.reshape(train.shape[0], train.shape[1])
    train_scaled = scaler.transform(train)
    # transform test
    #test = test.reshape(test.shape[0], test.shape[1])
    test_scaled = scaler.transform(test)
    return scaler, train_scaled, test_scaled

scaler, train_scaled, test_scaled = scale(train, test)

def to_supervised(train, n_input, n_out=7):
    # flatten data
    data = train
    X, y = list(), list()
    in_start = 0
    # step over the entire history one time step at a time
    for _ in range(len(data)):
        # define the end of the input sequence
        in_end = in_start + n_input
        out_end = in_end + n_out
        # ensure we have enough data for this instance
        if out_end <= len(data):
            x_input = data[in_start:in_end, 0]
            x_input = x_input.reshape((len(x_input), 1))
            X.append(x_input)
            y.append(data[in_end:out_end, 0])
        # move along one time step
        in_start += 1
    return np.array(X), np.array(y)
train_x, train_y = to_supervised(train_scaled, n_input = 3, n_out = 1)
test_x, test_y =  to_supervised(test_scaled, n_input = 3, n_out = 1)

verbose, epochs, batch_size = 0, 20, 16
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]


model = Sequential()
model.add(LSTM(200, return_sequences= False, input_shape = (train_x.shape[1],train_x.shape[2])))
model.add(Dense(1))
model.compile(loss = 'mse', optimizer = 'adam')
history = model.fit(train_x, train_y, epochs=epochs, verbose=verbose, validation_data = (test_x, test_y))

Jedoch, ich habe andere Fragen zu diesem Thema:

Q1: Was ist der Sinn der Einheiten in LSTM? [model.add(LSTM(Einheiten, ...))]

(Ich habe versucht, verschiedene Einheiten für das Modell, wäre es genauer, als Einheiten erhöht.)

Q2: Wie viele Schichten sollte ich einstellen?

Q3: Wie kann ich voraussagen, multi-Schritte ? e.g base auf (x(t),x(t-1)) zur Vorhersage von y(t), y(t+1) habe ich versucht, legen Sie die n_out = 2 in der to_supervised Funktion, aber wenn ich die selbe Technik angewendet, es gab den Fehler

train_x, train_y = to_supervised(train_scaled, n_input = 3, n_out = 2)
test_x, test_y =  to_supervised(test_scaled, n_input = 3, n_out = 2)

verbose, epochs, batch_size = 0, 20, 16
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]

model = Sequential()
model.add(LSTM(200, return_sequences= False, input_shape = (train_x.shape[1],train_x.shape[2])))
model.add(Dense(1))
model.compile(loss = 'mse', optimizer = 'adam')
history = model.fit(train_x, train_y, epochs=epochs, verbose=verbose, validation_data = (test_x, test_y))
ValueError: Error when checking target: expected dense_27 to have shape (1,) but got array with shape (2,)

Q3(cont): Was soll ich hinzufügen oder ändern in das Modell einstellen?

Q3(cont): Was ist der return_sequences ? Wann sollte ich den Wert True hat?

0
2019-09-19 07:59:14
Quelle
1 Antworten

Ich denke, Sie kann das tun. Ja, Sie können verschiedene Versionen von ADB, aber Sie müssen lokale Variablen von ANDROID_HOME (1 version).

+0
2019-09-19 10:23:56

Sehen Sie sich andere Fragen zu Tags an