У меня есть эта сверточная нейронная сеть в Керасе:
storefeaturesInfo = Input(shape=(21,), name='storefeatures')
storefeaturesInfo_x=Dense(64,activation='relu')(storefeaturesInfo)
next48additionalInfo=Input(shape=(None, 8), name='next48additionalInfo')
x_next48additionalInfo=GRU(32)(next48additionalInfo)
next48additionalInfo_x=Dense(64,activation='relu')(x_next48additionalInfo)
input1 = Input(shape=(None, 10), name='firstfewtimesteps')
x=Conv1D(24, 3, activation='relu', padding="causal")(input1)
x=BatchNormalization()(x)
x=Conv1D(32, 3, activation='relu', padding="causal")(x)
x=BatchNormalization()(x)
x=Conv1D(64, 3, activation='relu', padding="causal")(x)
x=BatchNormalization()(x)
x=Conv1D(128, 3, activation='relu', padding="causal")(x)
x=BatchNormalization()(x)
x=Conv1D(256, 3, activation='relu', padding="causal")(x)
x=BatchNormalization()(x)
x=Conv1D(512, 3, activation='relu', padding="causal")(x)
x=BatchNormalization()(x)
x=GlobalMaxPool1D()(x)
x=Dropout(0.25)(x)
x=Dense(512,activation='relu')(x)
x=Dense(256,activation='relu')(x)
x=Dense(128,activation='relu')(x)
x=Dense(64,activation='relu')(x)
x=Dropout(0.25)(x)
output_48=[]
finalInput = keras.layers.concatenate([x,storefeaturesInfo_x, next48additionalInfo_x])
for i in range(48):
target=Dense(1, activation="relu", name=str(i))(finalInput)
output_48.append(target)
model = Model([input1,storefeaturesInfo,next48additionalInfo], output_48)
model.compile(optimizer=adam,loss=mse,loss_weights=z)
Я пытаюсь спрогнозировать продажи, как в этой задаче (https://www.kaggle.com/c/rossmann-store-sales). Первый вход, storefeaturesInfo состоит из 21 значащего вектора дляв общей сложности 1100 магазинов в форме: (1100,21), второй уровень описывает дополнительную информацию для модели для дней, которые она пытается прогнозировать, например, открыт ли магазин или закрыт. Я объединяю все эти входные данные и складываю 48плотные слои, так как это количество прогнозов, которые мне нужны на будущее. Я использую 48 различных слоев, потому что я их взвешиваю по-разному.
Я тренирую модель, используя механизм скользящего окна, учитывая последние 12 недель прогнозирования данных дляследующие 48 дней. Я сдвигаю это окно для общей продолжительности 900 дней. Однако, модель очень плохо справляется с захватом любой информации, выполняя ее чуть лучше, чем прогнозирование исторического среднего. Кривые обучения выглядят так:
![Trained with different learning rates](https://i.stack.imgur.com/UvDiH.png)
Что этоКривые показывают ошибку валидации для вторых последних 48 точек, тогда цель состоит в том, чтобы спрогнозировать 48 после них и представить решение Kaggle.Я отправляю этот вопрос, чтобы иметь причину, почему это терпит неудачу.