Tensorflow减少等级3张量的维度

时间:2017-01-13 18:55:51

标签: tensorflow dimensionality-reduction

我正在尝试构建一篇在论文here

中研究过的CLDNN

在卷积层之后,这些特征通过一个暗淡减少层。在要素离开转换图层时,尺寸为[?, N, M]。 N表示窗口的数量,我认为网络需要缩小尺寸M,因此暗淡红色图层后的要素尺寸为[?,N,Q],其中Q < M

我有两个问题。

  1. 如何在TensorFlow中执行此操作?我尝试使用重量

    W = tf.Variable( tf.truncated_normal([M,Q],stddev=0.1) )
    

    我认为tf.matmul(x,W)的乘法会产生[?, N, Q],但[?, N, M][M, Q]不是乘法的有效维度。我想保持N不变并减少M.的维度。

  2. 我应该对tf.matmul(x,W)的结果应用什么样的非线性?我正在考虑使用ReLU,但我甚至无法完成#1。

1 个答案:

答案 0 :(得分:2)

根据链接的论文(T. N. Sainath 等人:“卷积,长期短期记忆,完全连接的深度神经网络”),

  

[...]降低维度,使得我们从线性层获得256个输出是合适的。

这意味着,无论输入大小是什么,即[?, N, M]或任何其他维度(总是假设第一个维度是小批量中的样本数量,由?表示),输出将为[?, Q],通常为Q=256

由于我们通过将输入与权重矩阵相乘来进行降维,因此不会保留任何空间信息。这意味着,每个输入是矩阵还是向量都无关紧要,因此我们可以将输入重新整形为线性层x,使其具有维[?, N*M]。然后,我们可以创建一个简单的矩阵乘法tf.matmul(x, W),其中W是一个维度为[N*M, Q].的矩阵

W = tf.Variable(tf.truncated_normal([N*M, Q], stddev=0.1))
x_vec = tf.reshape(x, shape=(-1, N*M))
y = tf.matmul(x_vec, W)

最后,关于问题2:在论文中,降维层是线性层,即您不对输出应用非线性。