2017-05-19 9 views
0

実行時に決定されとる変数を作成その形状は唯一私が持っているRNNセルへの入力を作成しようとしています

  1. 入力テンソル寸法batch_size x time_step x n_classes
  2. 初期隠された状態テンソルhx寸法batch_size x hidden_state_size

の問題は、今、私はそれがの形状を有するようhを作成するためにtf.get_variable(...)を使用する方法がわからないだということです?は現在のバッチサイズです。

私はそうのようなxを定義することができていますように私はxでこの問題を持っていない:だからbatch_sizeが自動的にtf.reshape

から推測される

x = tf.nn.embedding_lookup(self.pretrained_embeddings, self.input_placeholder) 
x = tf.reshape(x, (-1, self.max_length, Config.n_features * Config.embed_size)) 

のでx.get_shape()は私に(?, max_length, n_features * embed_size)

を与えるだろう

hを作成する唯一の回避策は、次のとおりです。

# x_ is of shape (max_length, batch_size, n_features * embed_size) 
x_ = tf.unstack(x, axis = 1) 

# h is of shape (batch_size, n_features) 
h = tf.get_variable("h", tf.shape(x_[0]), initializer = 
tf.constant_initializer(0.0)) 
はその後 h.get_shape()は偶然私の hidden_state_sizeに等しい希望 (?, n_features * embed_size)与えるだろう。この回避策の問題は、 hidden_state_sizen_features * embed_sizeに等しい場合にのみ有効であり、常にそうであるとは限りません。

ValueError: Shape of a new variable (pred/h) must be fully defined, but instead was (?, 300)

答えて

0

愚かな私に、私はちょうど行っている可能性が何かのように:

は、それがエラーなし (?, hidden_state_size)の形状を持つことができるように、私は隠されたテンソル hを定義することができるような方法はあります

h = tf.zeros(shape = (tf.shape(x)[0], n_features * embed_size))

関連する問題