Czy mogę utworzyć warstwę z wieloma komórkami rnn? [pytanie o artykuł]

Nov 20 2020

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

hH1sG0n3 Nov 20 2020 at 18:28

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

  1. wprowadzanie danych: $X$ wiele szeregów czasowych
  2. RNN: zalicz każdą serię czasową $x$ przez powtarzającą się sieć neuronową i przechwyć jej stan ukryty
  3. Wspólne osadzanie: łączenie ukrytych stanów z każdego $x$ serie do osadzania z $X$ kanały
  4. 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.

Mithril Nov 25 2020 at 15:46

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,
)