複数のrnnセルを持つレイヤーを作成できますか?【紙についての質問】

Nov 20 2020

私は実装しようとしています https://dl.acm.org/doi/pdf/10.1145/3269206.3271794 。

構造:

それが言ったように:

特に、個々の反復エンコーダーから学習した埋め込みベクトルを新しい決定的な埋め込みベクトルに統合して、さまざまな⟨α、β⟩構成を持つさまざまな時系列パターンを共同で検討します。

私の理解では、複数の個別のrnnセルを使用して異なる時系列を処理し、すべての非表示状態を連結して、2Dconv抽出機能を使用できる3D入力を形成します。

しかし、同じレイヤーに複数のrnnセルを作成する方法があるとは思いませんでした。誤解していませんか?そうでない場合は、ガイドまたは例を教えてください。

回答

hH1sG0n3 Nov 20 2020 at 18:28

このモデルアーキテクチャに精通しているわけではありませんが、説明したとおりに機能するとは思いません。

簡単に説明すると、モデルの概要は次のようになります。

  1. データ入力: $X$ 複数の時系列
  2. RNN:各時系列に合格 $x$ リカレントニューラルネットワークを介して、その隠れた状態をつかみます
  3. 共同埋め込み:それぞれから隠された状態を連結します $x$ 埋め込みへのシリーズ $X$ チャネル
  4. Convnet

しかし、同じレイヤーに複数のrnnセルを作成する方法があるとは思いませんでした。誤解していませんか?そうでない場合は、ガイドまたは例を教えてください。

基本的に、任意のrnnには、タイムステップの数に等しいセルの数があります。例として、NLPでは、そのセルの数は文の単語の数に等しくなります。ここで、トレインセットの各文は同じ長さである必要があります。

このペーパーの概念をよりよく理解するために、シーケンスモデルに精通することをお勧めします。

Mithril Nov 25 2020 at 15:46

機能的なAPIを使用して問題を解決します。

構造はこれが好きです:


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