【问题标题】:Tensorflow reduce dimensions of rank 3 tensorTensorflow 减少 3 阶张量的维度
【发布时间】:2017-01-13 18:55:51
【问题描述】:

我正在尝试构建论文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。

【问题讨论】:

    标签: tensorflow dimensionality-reduction


    【解决方案1】:

    根据链接的论文(T. N. Sainath et al.:“Convolutional, Long Short-Term Memory, Fully Connected Deep Neural Networks”),

    [...] 降低维数是合适的,这样我们有来自线性层的 256 个输出。

    这意味着,无论输入大小是什么,即[?, N, M] 或任何其他维度(始终假设第一个维度是小批量中的样本数,用? 表示),输出将为@ 987654323@,通常是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:在论文中,降维层是线性层,即您不对输出应用非线性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2018-09-04
      • 2021-01-25
      • 2019-02-26
      相关资源
      最近更新 更多