如果使用MLP,Tensor-flow如何使用填充和遮罩层?

时间:2019-03-20 20:58:24

标签: pandas tensorflow masking zero-padding

我想使用MLP解决回归问题。

我有可变长度的输入来解决此问题,我想对遮罩层使用零填充

我使用 pandas 库读取了 csv 文件中的输入。这是我的数据。

 image1: how train data look like  on my csv

我只知道如何使用此命令x_train.fillna(0.0).values

用0填充NaN值。

就像第一行一样:

[4, 0, 0, 512, 1.0, 0.0, 1.0, 0.0, 128.0 , NaN]

填充后:

[4, 0, 0, 512, 1.0, 0.0, 1.0, 0.0, 128.0 , 0.0]

面具应该像这样:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 0]

但是我不知道如何添加遮罩层并将其填充到我的MLP中。

如果我有固定的输入长度。我的程序看起来像这样

...
n_input = 10 #number og inputs

train_X = pd.read_csv('x_train.csv')
train_Y = pd.read_csv('y_train.csv')


X = tf.placeholder("float", [None, n_input])
Y = tf.placeholder("float", [None, n_output])

...
y_pred = multilayer_perceptron(X)
...

with tf.Session() as sess:
    sess.run(init)

            _, c = sess.run([train, loss], feed_dict={X: train_X,
                                                      Y: train_Y})
          ...

我不知道如何在零填充和遮罩层之间结合?

2 个答案:

答案 0 :(得分:1)

您不能忽略MLP中的单个功能。数学上,我们谈论的是矩阵乘法。您唯一可以“忽略”的维度是循环图层中的时间维度,因为权重的数量不随时间维度而变化,因此单个图层在时间维度上可以采用不同的大小。

如果仅使用密集层,则无法跳过任何内容,因为唯一的尺寸(除批尺寸外)直接与重量数成比例。

答案 1 :(得分:0)

谢谢@ dennis-ec,您的回答非常准确。我只想添加:

我们可以忽略给定功能的所有时间步。具有LSTM的Keras 但不包括密集层(在我们无法忽略某个功能中MLP)

我们可以使用填充(零填充或指定要使用的值,例如-1)就足够了,并查看效果。