Тензорный поток, как использовать слой заполнения и маскировки в случае MLP? - PullRequest
1 голос
/ 20 марта 2019

Я хочу использовать MLP для решения проблемы регрессии.

У меня есть входы с переменной длиной, чтобы исправить это. Я хочу использовать Нулевое заполнение с маскирующим слоем .

Я читаю входные данные из файла csv , используя библиотеку pandas . Вот как выглядят мои данные.

image1: how train data look like  on my csv

Я знаю только, как заполнить значения NaN 0 с помощью этой команды 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})
          ...

Не знаю, как совместить заполнение нулями и маскирующий слой?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы не можете игнорировать отдельные функции в MLP. Математически речь идет о матричном умножении. Единственными измерениями, которые можно «игнорировать», являются измерения времени в повторяющихся слоях, поскольку количество весов не масштабируется с измерением времени, и поэтому один слой может иметь разные размеры в измерении времени.

Если вы используете только плотные слои, вы ничего не можете пропустить, потому что ваше единственное измерение (помимо измерений в партии) масштабируется напрямую с количеством весов.

0 голосов
/ 24 марта 2019

Спасибо @ dennis-ec, ваш ответ очень точный. Я хочу просто добавить это:

Мы можем игнорировать все временные шаги для данной функции. Это поддерживается в Keras с LSTM , , но не в плотных слоях (Мы не можем игнорировать отдельные функции в MLP)

нам может хватить заполнения (Zero padding или указать значение для использования, например -1) и посмотреть производительность.

...