想象一下,存在一个具有以下维度(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中实现相同的操作?
答案 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]