Czy mogę utworzyć warstwę z wieloma komórkami rnn? [pytanie o artykuł]
Próbuję wdrożyć https://dl.acm.org/doi/pdf/10.1145/3269206.3271794 .
Struktura:

Jak powiedział:
W szczególności integrujemy wektory osadzające wyuczone z każdego pojedynczego kodera rekurencyjnego w nowy rozstrzygający wektor osadzający, aby wspólnie uwzględnić różne wzorce szeregów czasowych z różnymi konfiguracjami ⟨α, β⟩
Dla mojego zrozumienia używa wielu pojedynczych komórek rnn do przetwarzania różnych serii czasu, a następnie łączy wszystkie ukryte stany razem, tworząc wejście 3D, które może wykorzystywać funkcje ekstrakcji 2d conv.
Ale nie widziałem sposobu na utworzenie wielu komórek rnn w tej samej warstwie, czy źle zrozumiałem? Jeśli nie, czy mógłbyś mi podać przewodnik lub przykład?
Odpowiedzi
Nie do końca zaznajomiony z architekturą tego modelu, ale nie sądzę, że działa tak, jak to opisałeś.
Na podstawie szybkiego przeglądu może być uproszczony przegląd modelu
- wprowadzanie danych: $X$ wiele szeregów czasowych
- RNN: zalicz każdą serię czasową $x$ przez powtarzającą się sieć neuronową i przechwyć jej stan ukryty
- Wspólne osadzanie: łączenie ukrytych stanów z każdego $x$ serie do osadzania z $X$ kanały
- Convnet
Ale nie widziałem sposobu na utworzenie wielu komórek rnn w tej samej warstwie, czy źle zrozumiałem? Jeśli nie, czy mógłbyś mi podać przewodnik lub przykład?
Zasadniczo każdy rnn będzie miał liczbę komórek równą liczbie kroków czasowych. Na przykład w NLP ta liczba komórek byłaby równa liczbie słów w zdaniu, gdzie każde zdanie w twoim składzie musi mieć taką samą długość.
Proponuję zapoznać się z modelami sekwencji, aby lepiej zrozumieć koncepcję tego artykułu.
Użyj funcational API, aby rozwiązać problem.
Struktura lubi to:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
data = pd.DataFrame(np.random.uniform(size=(1000,3)), columns=['Sales', 'SalesDiff7', 'SalesAggMean7'])
multi_inputs = []
multi_outputs = []
window_size = my_window.input_width
for i in range(data.shape[1]):
ti = keras.Input(shape=(window_size, 1), name=f't{i}')
tlstm = layers.LSTM(32)(ti)
multi_inputs.append(ti)
multi_outputs.append(tlstm)
r = tf.stack(multi_outputs, axis=-2)
.....
result = keras.layers.Dense(units=1)(fc)
model = Model(
inputs=multi_inputs,
outputs=result,
)