我想用MLP来解决回归问题。
我有可变长度的输入来解决这个问题我想使用带有遮罩层的零填充。
我使用pandas库读取csv文件的输入。这是我的数据的样子。
我只知道如何使用此命令x_train.fillna(0.0).values
将NaN值填充为0
像第一行一样:
[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})
...
我不知道如何在零填充和掩蔽层之间进行组合?
您不能忽略MLP中的单个功能。在数学上我们讨论的是矩阵乘法。您可以“忽略”的唯一维度是周期性图层中的时间维度,因为权重数量不随时间维度缩放,因此单个图层在时间维度中可以采用不同的大小。
如果您只使用Dense图层,则不能跳过任何内容,因为您的唯一尺寸(除了批量尺寸)直接与权重数量成比例。
谢谢@dennis-ec你的回答非常准确。我想加上这个:
我们可以忽略给定特征的所有时间步骤。这在Keras中支持LSTM,但不支持密集层(我们不能忽略MLP中的单个特征)
我们可以满足于填充(零填充或指定要使用的值,例如-1)并查看性能。