我正在使用 tf.keras 在谷歌 colab 上使用 tensorflow v2。我正在尝试使用带有掩蔽的嵌入,然后是全局平均值。这是我的代码:
vocab_size = 1500
inputs = Input(shape=(None,), dtype=tf.int32, name='word_sequence')
x = Embedding(input_dim=vocab_size, output_dim=16, mask_zero=True)(inputs)
outputs = tf.keras.layers.GlobalAveragePooling1D()(x)
model = Model(inputs, outputs)
但我得到了这个错误:
TypeError:无法将类型对象转换为张量。内容:[-1,无,1]。考虑将元素转换为支持的类型。
如果我提供了序列 Input(shape=(10,), .....) 的显式长度,那么它似乎没有错误(尽管我没有用样本数据对其进行测试)。我想知道为什么你需要指定一个显式的序列长度,我认为这可以在运行时当层第一次遇到数据时懒惰地完成。
此外,以下作品(取自“masking and padding” tf教程):
inputs = tf.keras.Input(shape=(None,), dtype='int32')
x = layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)(inputs)
outputs = layers.LSTM(32)(x)
model = tf.keras.Model(inputs, outputs)
对于 LSTM,在模型的功能 api 构建过程中,它似乎对 None 的输入形状很满意。
有人可以解释一下 GlobalAveragePooling1D 有什么问题吗,或者这应该可以工作,但我做错了什么?
谢谢。