我正在尝试构建一篇在论文here
中研究过的CLDNN在卷积层之后,这些特征通过一个暗淡减少层。在要素离开转换图层时,尺寸为[?, N, M]
。 N表示窗口的数量,我认为网络需要缩小尺寸M,因此暗淡红色图层后的要素尺寸为[?,N,Q]
,其中Q < M
。
我有两个问题。
如何在TensorFlow中执行此操作?我尝试使用重量
W = tf.Variable( tf.truncated_normal([M,Q],stddev=0.1) )
我认为tf.matmul(x,W)
的乘法会产生[?, N, Q]
,但[?, N, M]
和[M, Q]
不是乘法的有效维度。我想保持N不变并减少M.的维度。
我应该对tf.matmul(x,W)
的结果应用什么样的非线性?我正在考虑使用ReLU,但我甚至无法完成#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:在论文中,降维层是线性层,即您不对输出应用非线性。