如何绕过 Keras pad_sequences() 将浮点值四舍五入为零?

th4*_* gi 5 python numpy text-classification lstm keras

所以我有一个用 Keras 构建的文本分类模型。我一直在尝试填充不同长度的序列,但 Keras 函数pad_sequences()刚刚返回零。

我发现如果你有一个像下面这样的 numpy 数组,它工作得很好。但是一旦元素变成像第二个数组一样的浮点数或小数,它就会变成零。

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

输出:

[[ 1  2  0  0]
 [ 3  4  5  0]
 [ 4  0  0  0]
 [ 7  8  9 10]]
Run Code Online (Sandbox Code Playgroud)

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

输出:

[[ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0  0  0]]
Run Code Online (Sandbox Code Playgroud)

和这个:

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

输出:

[[ 0  0 99 99]
 [ 0  0  0 99]
 [ 0 99 99 99]
 [ 0  0  0  0]]
Run Code Online (Sandbox Code Playgroud)

所以我猜这个函数只是忽略浮点数/小数。有没有办法解决这个问题?

tod*_*day 8

这是由于pad_sequences函数中考虑的默认数据类型是int32. 因此,所有值都将转换为整数(在这种情况下变为零)。要解决此问题,请传递dtype='float32'参数:

pad_sequences(x, padding='post', value=99, dtype='float32')
Run Code Online (Sandbox Code Playgroud)