Kann ich eine Ebene mit mehreren RNN-Zellen erstellen? [Frage zu einem Papier]
Ich versuche zu implementieren https://dl.acm.org/doi/pdf/10.1145/3269206.3271794 .
Struktur:

Wie gesagt:
Insbesondere integrieren wir die Einbettungsvektoren, die von jedem einzelnen wiederkehrenden Codierer gelernt wurden, in einen neuen schlüssigen Einbettungsvektor, um gemeinsam verschiedene Zeitreihenmuster mit unterschiedlichen ⟨α-, β⟩-Konfigurationen zu berücksichtigen
Nach meinem Verständnis werden mehrere einzelne RNN-Zellen verwendet, um verschiedene Zeitreihen zu verarbeiten, und dann werden alle verborgenen Zustände zusammengeführt, um eine 3D-Eingabe zu bilden, die 2D-Conv-Extraktionsfunktionen verwenden kann.
Aber ich habe nicht gesehen, dass es eine Möglichkeit gibt, mehrere RNN-Zellen in derselben Ebene zu erstellen. Verstehe ich das falsch? Wenn nicht, können Sie mir bitte einen Leitfaden oder ein Beispiel geben?
Antworten
Ich bin mit dieser Modellarchitektur nicht genau vertraut, aber ich glaube nicht, dass sie so funktioniert, wie Sie sie beschrieben haben.
Nach einem kurzen Blick kann sich eine vereinfachte Übersicht über das Modell ergeben
- Dateneingabe: $X$ mehrere Zeitreihen
- RNN: Bestehen Sie jede Zeitreihe $x$ durch ein wiederkehrendes neuronales Netzwerk und greifen Sie seinen verborgenen Zustand
- Gemeinsame Einbettung: Konzentrieren Sie verborgene Zustände von jedem $x$ Serie in eine Einbettung mit $X$ Kanäle
- Convnet
Aber ich habe nicht gesehen, dass es eine Möglichkeit gibt, mehrere RNN-Zellen in derselben Ebene zu erstellen. Verstehe ich das falsch? Wenn nicht, können Sie mir bitte einen Leitfaden oder ein Beispiel geben?
Im Wesentlichen hat jedes rnn eine Anzahl von Zellen, die der Anzahl von Zeitschritten entspricht. In NLP entspricht diese Anzahl von Zellen beispielsweise der Anzahl von Wörtern in einem Satz, wobei jeder Satz in Ihrem Zugsatz dieselbe Länge haben muss.
Ich schlage vor, dass Sie sich mit Sequenzmodellen vertraut machen, um das Konzept dieses Dokuments besser zu verstehen.
Verwenden Sie funktionale API, um das Problem zu lösen.
Struktur gefällt das:
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,
)