Как обойти Keras pad_sequence (), округляя значения с плавающей точкой до нуля? - PullRequest
0 голосов
/ 04 января 2019

Итак, у меня есть модель классификации текста, созданная с помощью Keras.Я пытался дополнить свои последовательности различной длины, но функция Keras pad_sequences() только что вернула нули.

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

x = [[1, 2], [3,4,5], [4], [7,8,9,10]]
print pad_sequences(x, padding='post')

выводит:

[[ 1  2  0  0]
 [ 3  4  5  0]
 [ 4  0  0  0]
 [ 7  8  9 10]]

Но

x = [[.1, .2], [.3,.4,.5], [.4], [.7,.8,.9,.010]]
print pad_sequences(x, padding='post')

выводит:

[[ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0  0  0]]

И это:

x = [[.1, .2], [.3,.4,.5], [.4], [.7,.8,.9,.010]]
print pad_sequences(x, padding='post', value=99)

выводит:

[[ 0  0 99 99]
 [ 0  0  0 99]
 [ 0 99 99 99]
 [ 0  0  0  0]]

Так что я думаю, что эта функция просто игнорирует числа с плавающей запятой / десятичные дроби.Есть ли способ, которым я могу обойти это?

1 Ответ

0 голосов
/ 04 января 2019

Это вызвано тем, что тип данных по умолчанию, рассматриваемый в функции pad_sequences, равен int32.Поэтому все значения будут приведены к целому числу (и в этом случае станут равными нулю).Чтобы решить эту проблему, передайте dtype='float32' аргумент:

pad_sequences(x, padding='post', value=99, dtype='float32')
...