1

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

我有可变长度的输入来解决这个问题我想使用Zero-paddingmasking layer

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

image1:训练数据在我的 csv 上的样子

我只知道如何使用此命令用 0 填充 NaN 值x_train.fillna(0.0).values

像第一行:

[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})
          ...

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

4

2 回答 2

2

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

如果您只使用密集层,则不能跳过任何内容,因为您唯一的维度(除了批量维度)直接与权重数量成比例。

于 2019-03-22T13:23:56.267 回答
0

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

我们可以忽略给定特征的所有时间步长。在带有 LSTM 的 Keras中支持这一点,但不支持密集层(我们不能忽略 MLP 中的单个特征)

我们可以使用填充(零填充或指定要使用的值,例如 -1)并查看性能。

于 2019-03-24T15:58:04.280 回答