Может ли нейронная сеть предсказать временную серию на основе других временных рядов? - PullRequest
0 голосов
/ 26 октября 2019

Я хочу предсказать временной ряд X1 из n точек на основе двух разных временных рядов X2 и X3, также из n точек каждый. Эти временные ряды взаимодействуют, поэтому я надеялся использовать те же методы, что и при объединении изображений для получения другого изображения.

До сих пор я успешно реализовал авто-кодер для обучения и возврата всех временных рядов (X1, X2, X3). Когда я попытался настроить нейронную сеть для использования X2 и X3 только для прогнозирования X1 (из 3000 единиц), модель не компилируется, и я получаю сообщение об ошибке:

Error when checking target: expected sequential_9 to have 2 dimensions, but got array with shape (61, 3000, 1, 1)

В разных комбинациях он ломаетсяна flatten_x или dense_x. Это работает, если мой вывод имеет только одну единицу, а не 3000.

Сеть, которую я пробовал, имела бы следующие слои:

Layer (type)                 Output Shape              Param #   
=================================================================
input_8 (InputLayer)         (None, 3000, 2, 1)        0         
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 3000, 2, 32)       96        
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 1500, 2, 32)       0         
_________________________________________________________________
flatten_7 (Flatten)          (None, 96000)             0         
_________________________________________________________________
dense_6 (Dense)              (None, 3000, 1, 32)                

Вот код, которыйЯ использую для создания сети:

network = Sequential((
    Conv2D(filters=32, kernel_size=(1,2), activation='relu', input_shape=(x, y, inChannel)),
    MaxPooling2D(pool_size = (2, 1)),
    Flatten(),
    Dense(3000, activation='relu'),
))
network.compile(loss='mean_squared_error', optimizer = RMSprop())

Вход имеет форму (61, 3000, 2, 1).

Должен ли я где-то указать ожидаемые входы / выходыа я этим не занимаюсь? Сделать некоторые преобразования данных на пути? Может быть, использовать другую архитектуру?

Спасибо за все предложения!

1 Ответ

0 голосов
/ 26 октября 2019

Сеть, которую вы закодировали, не имеет той архитектуры, которую вы намеревались

Если вы распечатаете

network.summary()

, вы получите

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_6 (Conv2D)            (None, 3000, 1, 32)       96        
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 1500, 1, 32)       0         
_________________________________________________________________
flatten_6 (Flatten)          (None, 48000)             0         
_________________________________________________________________
dense_6 (Dense)              (None, 3000)              144003000 
=================================================================
Total params: 144,003,096
Trainable params: 144,003,096
Non-trainable params: 0

Итак, вам нужно изменить архитектуру, чтобы получить желаемую форму вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...