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

使用多输入tf.data.Dataset训练Keras模型报错求助

解决多输入Keras模型使用tf.data.Dataset训练的报错问题

错误根源

你当前的a_train_ds和b_train_ds都是包含(输入数据, 标签)的Dataset,但Keras多输入模型需要的输入结构是**(输入1数据, 输入2数据)**与标签配对的格式,直接传入两个独立的Dataset列表会导致数据适配器无法识别输入格式。另外代码里的中文引号(‘’)也会引发语法错误,需要替换为英文引号('')。

修正步骤

  1. 调整Dataset结构
    先分别创建仅包含输入数据的Dataset,再将两个输入Dataset合并,并与标签配对,形成((输入a, 输入b), 标签)的结构:

    # 仅创建输入数据的Dataset,不包含标签
    a_train_ds = tf.data.Dataset.from_tensor_slices(x_train)
    b_train_ds = tf.data.Dataset.from_tensor_slices(x_train)
    # 合并两个输入Dataset,并与标签配对
    train_ds = tf.data.Dataset.zip((a_train_ds, b_train_ds)).map(lambda a, b: ((a, b), y_train))
    # 验证集同理
    a_valid_ds = tf.data.Dataset.from_tensor_slices(x_valid)
    b_valid_ds = tf.data.Dataset.from_tensor_slices(x_valid)
    valid_ds = tf.data.Dataset.zip((a_valid_ds, b_valid_ds)).map(lambda a, b: ((a, b), y_valid))
    

    若x_train是numpy数组,也可以直接一步创建:

    train_ds = tf.data.Dataset.from_tensor_slices(((x_train, x_train), y_train))
    valid_ds = tf.data.Dataset.from_tensor_slices(((x_valid, x_valid), y_valid))
    
  2. 修正代码中的中文引号
    将所有中文单引号‘’替换为英文单引号'',比如name=‘a_input’改为name='a_input',loss=‘mse’改为loss='mse'等。

  3. 修改model.fit调用
    直接传入合并后的Dataset,不需要列表形式:

    model.fit(train_ds, validation_data=valid_ds, epochs=1)
    

完整修正后的代码

import tensorflow as tf
from tensorflow import keras
import numpy as np

# 示例测试数据(替换为你的真实数据)
x_train = np.random.rand(100, 4, 4)
y_train = np.random.rand(100, 2)
x_valid = np.random.rand(20, 4, 4)
y_valid = np.random.rand(20, 2)

# 创建正确结构的Dataset
train_ds = tf.data.Dataset.from_tensor_slices(((x_train, x_train), y_train))
valid_ds = tf.data.Dataset.from_tensor_slices(((x_valid, x_valid), y_valid))

# 构建模型(修正引号)
a_input = keras.layers.Input(shape=(4,4), name='a_input')
x = keras.layers.Flatten()(a_input)
x = keras.layers.Dense(5)(x)

b_input = keras.layers.Input(shape=(4,4), name='b_input')
y = keras.layers.Flatten()(b_input)
y = keras.layers.Dense(5)(y)

z = keras.layers.concatenate([x,y])
z = keras.layers.Dense(2)(z)

model = keras.models.Model(inputs=[a_input, b_input], outputs=z)

model.compile(loss='mse', optimizer='adam', metrics=['mae'])
model.fit(train_ds, validation_data=valid_ds, epochs=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:34:59