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

TensorFlow Sequential层输入形状不兼容错误求助

肺癌分类模型输入形状不兼容问题排查

问题代码

import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split

dataset = pd.read_csv('/content/survey lung cancer.csv')
x = dataset.drop(columns=["LUNG_CANCER"])
y = dataset["LUNG_CANCER"]
y= y.replace("YES", 1)
y= y.replace("NO", 0)
x= x.replace("M", 1)
x= x.replace("F", 0)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Dense(256, input_shape=x_train.shape, activation='sigmoid'))
model.add(tf.keras.layers.Dense(256, activation='sigmoid'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train, epochs=1000)

报错信息

Epoch 1/1000
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-a5e6a9bff808> in <cell line: 1>()
----> 1 model.fit(x_train, y_train, epochs=1000)

1 frames
/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py in tf__train_function(iterator)
     13                 try:
     14                     do_return = True
---> 15                     retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
     16                 except:
     17                     do_return = False

ValueError: in user code:

    File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1401, in train_function  *
        return step_function(self, iterator)
    File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1384, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1373, in run_step  **
        outputs = model.train_step(data)
    File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1150, in train_step
        y_pred = self(x, training=True)
    File "/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler
        raise e.with_traceback(filtered_tb) from None
    File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/input_spec.py", line 298, in assert_input_compatibility
        raise ValueError(

    ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 247, 15), found shape=(None, 15)

问题原因

错误核心是输入形状不匹配:Keras的input_shape参数仅需指定单样本的特征维度,不需要包含样本数量。你用x_train.shape得到的是(247,15)(247为训练样本数,15为特征数),这会让模型错误地期望输入为三维张量(None,247,15),但实际训练时传入的是二维张量(None,15)(None代表批次维度),最终导致形状不兼容。

修复方案

将第一层的input_shape修改为单样本的特征维度,两种写法任选其一:

  1. 用x_train.shape[1:]直接提取除样本数外的维度
  2. 直接写(x_train.shape[1],)明确指定特征数量

修改后的代码如下:

import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split

dataset = pd.read_csv('/content/survey lung cancer.csv')
x = dataset.drop(columns=["LUNG_CANCER"])
y = dataset["LUNG_CANCER"]
y= y.replace("YES", 1)
y= y.replace("NO", 0)
x= x.replace("M", 1)
x= x.replace("F", 0)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
model = tf.keras.models.Sequential()

# 两种写法二选一即可
model.add(tf.keras.layers.Dense(256, input_shape=x_train.shape[1:], activation='sigmoid'))
# 或者 model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))

model.add(tf.keras.layers.Dense(256, activation='sigmoid'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train, epochs=1000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:03:17