0

필자는 cryptocurrency 가격 간의 상관 관계를 찾기 위해 기본 다층 LSTM 회귀 네트워크를 구현하려고 시도했습니다.Keras가 내 데이터를 일반화하지 않는 이유는 무엇입니까?

사용할 수없는 교육 결과가 나오면 일부 샌드 박스 코드로 놀아서 전체 데이터 세트에서 다시 시도하기 전에 아이디어를 얻었습니다.

문제은 내 데이터를 일반화하기 위해 Keras를 가져올 수 없습니다.

[[[ 0] 
    [100] 
    [200]] 

[[300] 
    [400] 
    [500]]] 

을와 y :

ts = 3 
in_dim = 1 

data = [i*100 for i in range(10)] 

# tried this, didn't accomplish anything 
# data = [(d - np.mean(data))/np.std(data) for d in data] 

x = data[:len(data) - 4] 
y = data[3:len(data) - 1] 

assert(len(x) == len(y)) 

x = [[_x] for _x in x] 
y = [[_y] for _y in y] 

x = [x[idx:idx + ts] for idx in range(0, len(x), ts)] 
y = [y[idx:idx + ts] for idx in range(0, len(y), ts)] 

x = np.asarray(x) 
y = np.asarray(y) 

X는 다음과 같습니다

[[[300] 
    [400] 
    [500]] 

[[600] 
    [700] 
    [800]]] 

와 나는 매우 유사한 데이터 세트를 사용하여 예측할 때 잘 작동하지만 때 일반화하지 않습니다 크기가 조정 된 값으로 비슷한 시퀀스를 시도합니다.

model = Sequential() 

model.add(BatchNormalization(
    axis = 1, 
    input_shape = (ts, in_dim))) 

model.add(LSTM(
    100, 
    input_shape = (ts, in_dim), 
    return_sequences = True)) 

model.add(TimeDistributed(Dense(in_dim))) 
model.add(Activation('linear')) 
model.compile(loss = 'mse', optimizer = 'rmsprop') 

model.fit(x, y, epochs = 2000, verbose = 0) 

p = np.asarray([[[10],[20],[30]]]) 
prediction = model.predict(p) 
print(prediction) 
,

인쇄

[[[ 165.78544617] 
    [ 209.34489441] 
    [ 216.02174377]]] 

내가 완전히 다른 스케일 된 값으로 순서대로 연결하면, 네트워크가 여전히 출력이 예측되도록 어떻게 이것을 포맷 할

[[[ 40.0000] 
    [ 50.0000] 
    [ 60.0000]]] 

원하는 값? 나는 훈련 데이터를 정규화하려고했지만 결과는 여전히 완전히 사용할 수 없다.

내가 여기서 잘못 했습니까?

+0

또한 단 변량 데이터에 대한 자동 변압에 대한 LSTM 사용에 대한이 토론이 유용합니다. https://machinelearningmastery.com/suitability-long-short-term-memory-networks 시계열 예측은 - 내 질문에 완전히 대답했다고 말할 수는 없지만 LSTM이 때로는 시계열 예측에 대한 기대치에 미치지 못하는 것에 대한 통찰력을 제공합니다. – Phil

+0

당신은 깊은 학습의 힘을 과대 평가하고 있습니다. 여러분은 단지 100을 곱한 값을 입력으로 받아서 10의 배수로 일반화 할 것을 기대합니다. 10은 특별한 숫자가 아니기 때문에이 전환 학습은 일반적으로 모든 숫자의 배수에 적용되어야합니다. 그러나 당신의 모델은 그것이해야 할 일이라는 것을 어떻게 알 수 있을까요? 귀하의 교육 자료는 어떠한 방식 으로든 그것을 알려줍니다. 작업은 현재 시간 단계에서 입력에 100을 단순히 추가하는 것일 수도 있습니다. 일반화 할 수 있으려면 일반화 사례가 포함 된 모델 교육 데이터를 제공해야합니다. –

답변

0

LSTM으로 보내기 전에 입력 데이터를 변환하는 방법은 sklearn.preprocessing.StandardScaler와 같은 것을 사용 하시겠습니까? 예측 후 scaler.inverse_transform (예측)을 호출 할 수 있습니다

관련 문제