Я пытаюсь предсказать цены акций, используя модель LSTM.Однако из-за зашумленных данных мне нужна нестандартная потеря с штрафной константой.Я не знаю, как получить данные с предыдущего временного шага, хотя (аргумент 'prev' в указанном коде)
Я делаю это с помощью условия: Нижняя константа if (true-prev) (pred-prev)> 0 иначе более высокая константа
def custom_loss(true,pred,prev):
beta=0.5
condition = (true-prev)(pred-prev)
if condition > 0:
return K.mean(beta*K.square(true-pred))
else:
return K.mean((2-beta)*K.square(true-pred))
#model
model = Sequential()
model.add(LSTM(units=50, return_sequences = True, input_shape=(features_set.shape[1], X.shape[1])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units = X.shape[1]))
opt = Adam(lr=0.01, beta_1=0.9, beta_2=0.999, decay=0.01)
model.compile(optimizer = opt, loss = custom_loss, metrics = ['accuracy'])
model.fit(features_set, labels, epochs = 100, batch_size = 32, verbose=1)
Как получить значение предыдущего временного шага, поскольку пользовательские потери зависят только от истинного и прогнозируемого значения?