You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含不同形状输入特征的数据转换为TensorFlow Dataset?

字典列表转TensorFlow数据集及相关问题解答

一、直接用tf.data.Dataset.from_tensor_slices()转换字典列表

直接对字典列表使用from_tensor_slices()完全可行,TensorFlow会自动识别不同类型的数据(字符串、数值、数组),并保留原有的键值结构。示例代码如下:

import tensorflow as tf

data = [
    {
        'input1': 'Hello',
        'input2': -100,
        'input3': [1, 2, 3],
        'target': 1
    },
    {
        'input1': 'World',
        'input2': 200,
        'input3': [4, 5, 6],
        'target': 0
    }
]

# 直接转换为数据集,每个元素是包含所有字段的字典
dataset = tf.data.Dataset.from_tensor_slices(data)

# 拆分输入与标签,适配模型训练需求
def split_input_target(sample):
    inputs = {k: v for k, v in sample.items() if k != 'target'}
    target = sample['target']
    return inputs, target

dataset = dataset.map(split_input_target)

# 验证输出结构
for inputs, target in dataset.take(1):
    print("输入集合:", inputs)
    print("对应标签:", target)

转换后的数据集每个样本会返回输入字典(包含input1/input2/input3)和对应的target标签,刚好适配多输入模型的输入结构。

二、“原始数据→DataFrame→数据集+展平input3”方案的合理性

这种方法是合理的,但是否需要展平input3完全取决于你的模型设计:

  • 如果模型需要input3作为一维特征(比如输入到全连接层),展平是必要操作,且DataFrame能方便完成结构化数据的清洗、预处理(如编码、标准化);
  • 如果模型需要保留input3的序列结构(比如输入到LSTM/CNN层),展平会破坏数据原有逻辑,此时直接用tf.data.Dataset.from_tensor_slices()保留数组形式更合适。

另外,DataFrame转换的优势在于结构化数据处理便捷,但对于已经规整的字典列表,直接用tf.data方法能减少中间转换开销,效率更高。

三、TensorFlow多输入模型适配说明(官方文档内容翻译)

多输入与多输出模型

当模型需要接收多种类型输入(文本、数值、序列数据等)时,可借助Keras函数式API构建多输入模型,此时数据集输出结构需与模型输入层匹配:

  1. 数据集输出要求:每个样本需返回输入字典(键对应模型输入层名称,值对应输入数据),或输入元组(顺序与模型输入层顺序一致),搭配对应标签;
  2. 模型构建示例:
from tensorflow.keras import layers, Model

# 定义不同类型的输入层
input1 = layers.Input(shape=(), dtype=tf.string, name='input1')
input2 = layers.Input(shape=(), dtype=tf.float32, name='input2')
input3 = layers.Input(shape=(3,), dtype=tf.float32, name='input3')

# 处理文本输入
processed_input1 = layers.TextVectorization(max_tokens=1000)(input1)
processed_input1 = layers.Embedding(1000, 32)(processed_input1)
processed_input1 = layers.GlobalAveragePooling1D()(processed_input1)

# 拼接所有特征
concatenated = layers.concatenate([processed_input1, input2, input3])
output = layers.Dense(1, activation='sigmoid')(concatenated)

# 构建多输入模型
model = Model(inputs=[input1, input2, input3], outputs=output)
  1. 适配逻辑:只要数据集输出的输入结构(字典/元组)与模型输入层完全匹配,即可直接用于训练,无需额外调整。

内容的提问来源于stack exchange,提问作者the_last_droid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:48:24