>source

저는 현재 Tensorflow 라이브러리를 사용하는 기본 LSTM 기반 Autoencoder를 가지고 놀고 있습니다. 목표는 Autoencoder가 다변수 시계열을 재구성하는 것입니다. 데이터 파이프라인에서 모델 내부로 데이터의 기능별 정규화를 이동하는 데 관심이 있습니다.

현재 다음과 같은 방법으로 데이터를 정규화합니다.

normalizer= Normalization(axis=-1)
normalizer.adapt(data_train)
data_train= normalizer(data_train)
inputs= Input(shape=[None, n_inputs])
x= LSTM(4, return_sequences=True)(inputs)
x= LSTM(2, return_sequences=True)(x)
x= LSTM(2, return_sequences=True)(x)
x= LSTM(4, return_sequences=True)(x)
x= TimeDistributed((Dense(n_inputs)))(x)
model= Model(inputs, x)

의도한 대로 작동하면 상당한 손실(~1e-2)이 발생하지만 모델 외부에 있습니다. 에 따르면 선적 서류 비치("모델 이전 또는 모델 내부 데이터 사전 처리"에서) 다음 code는 모델 내부에서 실행된다는 점을 제외하고 위의 스니펫과 동일해야 합니다.

normalizer= Normalization(axis=-1)
normalizer.adapt(data_train)
inputs= Input(shape=[None, n_inputs])
x= normalizer(inputs)
x= LSTM(4, return_sequences=True)(x)
x= LSTM(2, return_sequences=True)(x)
x= LSTM(2, return_sequences=True)(x)
x= LSTM(4, return_sequences=True)(x)
x= TimeDistributed((Dense(n_inputs)))(x)
model= Model(inputs, x)

그러나 후자의 변형을 실행하면 천문학적 손실 값(~1e3)이 발생하고 테스트 결과도 나빠집니다. 따라서 내 질문은 : 내가 무엇을 잘못하고 있습니까? 내가 문서를 잘못 이해하고 있는 것은 아닐까?

어떤 조언도 대단히 감사합니다!

  • 답변 # 1

    노멀라이저가 모델 외부에서 사용될 때 입력(즉, 특징 행렬)에만 적용되는 한 두 가지 방법은 일관된 결과를 제공하는 것 같습니다.

    import numpy as np
    from tensorflow.keras import Input
    from tensorflow.keras.layers import Dense, LSTM, TimeDistributed
    from tensorflow.keras.models import Model
    from tensorflow.keras.layers.experimental.preprocessing import Normalization
    np.random.seed(42)
    # define the input parameters
    num_samples= 100
    time_steps= 10
    train_size= 0.8
    # generate the data
    X= np.random.normal(loc=10, scale=5, size=(num_samples, time_steps, 1))
    y= np.mean(X, axis=1) + np.random.normal(loc=0, scale=1, size=(num_samples, 1))
    # split the data
    X_train, X_test= X[:np.int(train_size * X.shape[0]), :], X[np.int(train_size * X.shape[0]):, :]
    y_train, y_test= y[:np.int(train_size * y.shape[0]), :], y[np.int(train_size * y.shape[0]):, :]
    # normalize the inputs inside the model
    normalizer= Normalization()
    normalizer.adapt(X_train)
    inputs= Input(shape=[None, 1])
    x= normalizer(inputs)
    x= LSTM(4, return_sequences=True)(x)
    x= LSTM(2, return_sequences=True)(x)
    x= LSTM(2, return_sequences=True)(x)
    x= LSTM(4, return_sequences=True)(x)
    x= TimeDistributed((Dense(1)))(x)
    model= Model(inputs, x)
    model.compile(loss='mae', optimizer='adam')
    model.fit(X_train, y_train, batch_size=32, epochs=10, verbose=0)
    print(model.evaluate(X_test, y_test))
    # 10.704551696777344
    # normalize the inputs outside the model
    normalizer= Normalization()
    normalizer.adapt(X_train)
    X_train_normalized= normalizer(X_train)
    X_test_normalized= normalizer(X_test)
    inputs= Input(shape=[None, 1])
    x= LSTM(4, return_sequences=True)(inputs)
    x= LSTM(2, return_sequences=True)(x)
    x= LSTM(2, return_sequences=True)(x)
    x= LSTM(4, return_sequences=True)(x)
    x= TimeDistributed((Dense(1)))(x)
    model= Model(inputs, x)
    model.compile(loss='mae', optimizer='adam')
    model.fit(X_train_normalized, y_train, batch_size=32, epochs=10, verbose=0)
    print(model.evaluate(X_test_normalized, y_test))
    # 10.748750686645508
    

  • 이전 서버는 파이썬 소켓 프로그래밍에서 한 클라이언트에서 클라이언트 목록으로 메시지를 보낼 수 없습니다
  • 다음 API가 상태 값을 반환하는지 확인하는 활동까지 Azure Data Factory를 만드는 방법은 무엇입니까?