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

机器学习新手遇Sequential层输入形状不兼容错误求助

问题原因与解决方法

错误根源

你设置的input_shape参数有误:

  • x_train.shape返回的是整个训练集的形状:(455, 30),其中455是训练样本总数,30是单个样本的特征数。
  • 但Keras中input_shape只需要定义单个样本的特征形状,模型会自动处理样本数量维度(用None表示可变数量)。你错误地把整个数据集的形状传给了input_shape,导致模型预期输入是(None, 455, 30),但实际训练时每个样本是(30,)的一维特征,两者不匹配就抛出了报错。

修正步骤

  1. 修正input_shape:改为(x_train.shape[1],),直接取单个样本的特征数(也就是30)。
  2. 清理冗余导入:你导入了Conv2D、MaxPooling2D等卷积层,但当前是用全连接网络做分类,这些层用不到,可以删除。
  3. 修正matplotlib导入:原代码import matplotlib as plt是错误的,应该是import matplotlib.pyplot as plt(如果后续要绘图的话)。

修正后的完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv(r'/Users/aishwaryaiyer/Desktop/cancer.csv')
print(df)

# 划分特征与标签
x = df.drop(columns=["diagnosis(1=m, 0=b)"])
y = df["diagnosis(1=m, 0=b)"]

# 划分训练集测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

# 构建模型
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Dropout

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, 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=10)

额外提示

  • 若模型效果不佳,可尝试将激活函数换成relu(全连接层常用,比sigmoid更容易训练),或添加Dropout层抑制过拟合。
  • 训练完成后,用model.evaluate(x_test, y_test)可评估模型在测试集上的表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:45:34