如何在TF 2.0中将稀疏张量传递给密集层?

时间:2019-12-11 02:36:07

标签: python tensorflow keras tensorflow2.0 valueerror

我正在使用TF 2.0。

工作方式:

from tensorflow.keras import layers

inputs = layers.Input(shape=(256,), sparse=False, name='name_sparse')
x = layers.Dense(32, name="my_layer")(inputs)
print(x)

输出:Tensor("my_layer/Identity:0", shape=(None, 32), dtype=float32)

不工作:

如果在上述代码中将稀疏更改为True,输出将更改为:

ValueError: The last dimension of the inputs to Dense should be defined. Found None.

如何在TF2.0中将稀疏张量传递给Dense层。在TF1.14中效果很好。

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为当输入张量稀疏时,该张量的形状为(None,None)而不是(256,)

inputs = layers.Input(shape=(256,), sparse=True, name='name_sparse')
print(inputs.shape) 
# output: (?, ?)

这似乎也是一个开放的issue
一种解决方案是编写自定义层子类化Layer类(请参阅this)。

作为解决方法(在tf-gpu 2.0.0上测试),在输入层中添加批处理大小可以正常工作:

from tensorflow.keras import layers
inputs = layers.Input(shape=(256,), sparse=True, name='name_sparse', batch_size=32)
print(inputs.shape) # (32, 256)
x = layers.Dense(32, name="my_layer")(inputs)
print(x) # Tensor("my_layer_10/BiasAdd:0", shape=(32, 32), dtype=float32)