テンソルフローでLSTMセルベースのRNNを実装しようとしています。私は、フィーチャを構成する各行に一連の単語を持ち、ターゲットとなるlabels(1または0のいずれか)という名前の列を持っています。私はdynamic_RNN
の出力を解釈することに困難を抱えています。 dynamic_RNN
は出力と状態を返します。 私はデータを256のバッチに分割しました。 の各行を一様な長さ160にパッディング/スライスしました。次に、各ワードが100次元のベクトルになるように(グローブを使用して)埋め込みました。この後、私の各例は160×100の行列になり、RNN関数の各バッチはテンソルの形状 - (256,160,100)になります。今、LSTMセルのhidden_dimensionが300に設定されていると仮定すると、160×100の各例の隠れ状態ベクトルの予想される次元は1×300です。しかし、rnn_states.h
の形状をチェックすると、次のようになります -tensorflowのdynamic_rnnの出力を解釈するのが難しい
私は寸法が256×300であると予想していました。今後の進め方はわかりません。
私が使用した以下のコードとその形状を追加しています。私は2つのテンソル - train_context
とtrain_utterance
を持っています。私はそれぞれ128サンプルを選択し、後でそれらを埋め込み、連結して256の入力バッチを作成します。どこに間違っているか教えていただけますか?
train_context.get_shape()
# TensorShape([Dimension(128), Dimension(160)])
train_utterance.get_shape()
# TensorShape([Dimension(128), Dimension(160)])
context_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\
train_context, name="embed_context"), dtype = tf.float64)
utterance_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\
train_utterance, name="embed_utterance"), dtype = tf.float64)
context_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])
utterance_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])
inputs = tf.concat(0, [context_embedded, utterance_embedded])
inputs.get_shape()
# TensorShape([Dimension(256), Dimension(160), Dimension(100)])
cell = tf.nn.rnn_cell.LSTMCell(300, forget_bias=2.0, use_peepholes=True,\
state_is_tuple=True)
cell.state_size
# LSTMStateTuple(c=300, h=300)
rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float64,\
parallel_iterations=64, time_major=False)
rnn_states.h.get_shape()
# TensorShape([Dimension(None), Dimension(300)])
私は次元が、私はそれが事前に256×300のおかげであることを期待していたいずれのx 300ではない理由を理解することはできませんよ。