对于LSTM,我使用tensorflow.keras.utils.timeseries_dataset_from_array()
创建时间序列。对于某些特性,我希望使用Keras预处理层进行one-hot编码。
下面的代码:
n_timesteps = 20
n_categorical_features = 1
from tensorflow.keras.layers import Input, IntegerLookup, CategoryEncoding
cat_inp = keras.layers.Input(shape=(n_timesteps, n_categorical_features), name = "categorical_input")
index = IntegerLookup()
index.adapt(X["br"])
encoder = CategoryEncoding(num_tokens=index.vocabulary_size(), output_mode = "one_hot")(cat_inp)
然而,最后一行给了我错误ValueError: Exception encountered when calling layer "category_encoding_22" (type CategoryEncoding). When output_mode is not
'int' , maximum supported output rank is 2. Received output_mode one_hot and input shape (None, 20, 1), which would result in output rank 3.
问题似乎是CategoryEncoding不支持输入Tensor的形状(None,n_timesteps,n_categorical_features)。
如何对timeseries_dataset_from_array()
产生的输入Tensor进行one-hot编码?
1条答案
按热度按时间rdlzhqv91#
请尝试使用TimeDistributed图层:
它会将CategoryEncoding应用到时间序列中的每个项目。请参阅https://keras.io/api/layers/recurrent_layers/time_distributed/了解更多信息。