我正在尝试为RNN单元创建输入
x
batch_size x time_step x n_classes
h
batch_size x hidden_state_size
醇>
现在的问题是,我不确定如何使用tf.get_variable(...)
创建h
,使其形状为? x hidden_state_size
,其中?
是当前批量大小。
x
我没有这个问题,因为我可以这样定义x
:
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))
因此,batch_size
会自tf.reshape
所以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()
会提供所需的(?, n_features * embed_size)
,其偶然性等于我的hidden_state_size
。此解决方法的问题在于,仅当hidden_state_size
等于n_features * embed_size
时才有效,但并非总是如此。
有没有办法让我可以定义隐藏的张量h
,使其形状为(?, hidden_state_size)
而不会出现错误:
ValueError:必须完全定义新变量(pred / h)的形状, 但相反是(?,300)
答案 0 :(得分:0)
h = tf.zeros(shape = (tf.shape(x)[0], n_features * embed_size))