首页 > 解决方案 > 如何将编码序列(可变长度)编码为 tf.from_generator 的输入?

问题描述

我正在尝试创建一个循环神经网络。输入是用户历史的序列,其中每个历史由一个序列(具有不同长度)的编码(每个具有形状(300))组成。这是代码:

df['encodings_correct'] = [encoding if correct else
                               np.zeros(shape=encode_model.vector_size, dtype=np.float)
                               for encoding, correct in list(zip(nlp_encodings, df['correct']))]

encoding_depth = encode_model.vector_size
# Step 4 - Convert to a sequence per user id and shift features 1 timestep
seq = df.groupby('user_id').apply(
        lambda r: (
            tf.convert_to_tensor(np.concatenate(np.expand_dims(r['encodings_correct'].values, axis=-1), axis=-1)),
        )
    )
nb_users = len(seq)

# Step 5 - Get Tensorflow Dataset
dataset = tf.data.Dataset.from_generator(
        generator=lambda: seq,
        output_signature=(
            tf.TensorSpec(shape=(None, encode_model.vector_size), dtype=tf.float32),
        )
    )

当我执行它时,tf.convert_to_tensor会引发错误:

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

我认为这与编码序列的可变长度有关,但我不明白如何解决它。

标签: pythontensorflowtensortensorflow-datasetstf.dataset

解决方案


推荐阅读