필자는 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]]]
원하는 값? 나는 훈련 데이터를 정규화하려고했지만 결과는 여전히 완전히 사용할 수 없다.
내가 여기서 잘못 했습니까?
또한 단 변량 데이터에 대한 자동 변압에 대한 LSTM 사용에 대한이 토론이 유용합니다. https://machinelearningmastery.com/suitability-long-short-term-memory-networks 시계열 예측은 - 내 질문에 완전히 대답했다고 말할 수는 없지만 LSTM이 때로는 시계열 예측에 대한 기대치에 미치지 못하는 것에 대한 통찰력을 제공합니다. – Phil
당신은 깊은 학습의 힘을 과대 평가하고 있습니다. 여러분은 단지 100을 곱한 값을 입력으로 받아서 10의 배수로 일반화 할 것을 기대합니다. 10은 특별한 숫자가 아니기 때문에이 전환 학습은 일반적으로 모든 숫자의 배수에 적용되어야합니다. 그러나 당신의 모델은 그것이해야 할 일이라는 것을 어떻게 알 수 있을까요? 귀하의 교육 자료는 어떠한 방식 으로든 그것을 알려줍니다. 작업은 현재 시간 단계에서 입력에 100을 단순히 추가하는 것일 수도 있습니다. 일반화 할 수 있으려면 일반화 사례가 포함 된 모델 교육 데이터를 제공해야합니다. –