如何在Tensorflow中对三维特征向量应用线性变换?

时间:2018-02-09 10:59:58

标签: python tensorflow

想象一下,存在一个具有以下维度(32, 20, 3)的张量,其中 batch_size = 32, num_steps = 20且要素 = 3 。这些功能取自具有以下格式的.csv文件:

feat1, feat2, feat3
200, 100, 0
5.5, 200, 0.5
23.2, 1, 9.3

每一行都转换为三维矢量(numpy数组):[200, 100, 0][5.5, 200, 0.5][23.2, 1, 9.3]

我们希望在递归神经网络中使用这些特征,但是直接将它们输入到不知道的情况下,我们首先要对这些特征向量进行处理,方法是对每个内部的3维向量进行线性变换批量样本并将输入张量重新整形为(32, 20, 100)

这可以在Torch中轻松完成,例如通过:nn.MapTable():add(nn.Linear(3, 100))应用于大小为20 x 32 x 3的输入批量张量(num_steps和batch_size在Torch中切换)。我们将它分成20个数组,每个32x3大小

  1 : DoubleTensor - size: 32x3
  2 : DoubleTensor - size: 32x3
  3 : DoubleTensor - size: 32x3
  ...

并使用nn.Linear(3, 100)将其转换为32x100向量。然后我们将它们打包回20 x 32 x 100张量。我们如何在Tensorflow中实现相同的操作?

1 个答案:

答案 0 :(得分:2)

可以重塑为[batchsize * num_steps,features]使用带有100个输出的Tensorflow线性图层,然后重新整形回来会有效吗?

reshaped_tensor = tf.reshape(your_input, [batchsize*num_steps, features])
linear_out = tf.layers.dense(inputs=reshaped_tensor, units=100)
reshaped_back = tf.reshape(linear_out, [batchsize, num_steps, features]