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

Keras构建乳腺癌诊断神经网络时model.fit()形状不匹配错误求助

解决Keras乳腺癌诊断模型的形状不匹配错误

核心问题分析

报错提示输入形状不匹配:模型期望输入形状为(None, 13)(None代表任意样本数,13是定义的特征数),但实际输入是(16, 30),说明训练数据维度和模型定义不匹配,同时代码中混入了无意义的PyTorch代码。

具体修复步骤

1. 删除冗余的PyTorch代码

你代码中的NeuralNetwork类、nn.Linear、F.relu等都是PyTorch语法,和当前使用的Keras完全无关,直接删除整段:

# 删掉以下所有代码
class NeuralNetwork(nn.Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        #Capa 1
        self.linear1 = nn.Linear(13, 16)
        #Capa 2
        self.linear2 = nn.Linear(16, 1)
        pass

    def forward(self, x):
        # Capa 1
        x = self.linear1(x)
        #Activem la primera capa
        x = F.relu(x)
        #Capa 2
        x = self.linear2(x)
        #Activem la segona capa
        x = F.softmax(x, dim=1)
        #pass
        return x

2. 修正模型定义的冗余参数

Keras Sequential模型会自动推断层间输入形状,第二个Dense层不需要指定input_shape=(16,),直接删除该参数:

# 修正后的模型定义
model = keras.Sequential()
model.add(layers.Dense(16, input_shape=(13,), activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))  # 移除多余的input_shape参数
model.summary()

3. 对齐数据与模型的特征维度

错误显示输入形状为(16,30),说明你的X_train维度是(样本数=16, 特征数=30),但模型定义的是13个特征,这里有两种修正方向:

  • 如果是特征数定义错误:经典威斯康星乳腺癌数据集的特征数是30,把模型的input_shape改成(30,):
    model.add(layers.Dense(16, input_shape=(30,), activation='relu'))
    
  • 如果是数据维度颠倒:检查数据形状后转置修正:
    # 先查看当前数据形状
    print(X_train.shape)
    # 如果输出是(30, 16),说明样本和特征维度颠倒,执行转置
    X_train = X_train.T
    X_test = X_test.T
    

4. 确认标签数据形状

确保y_train和y_test是形状为(N,)或(N,1)的一维数组,符合二分类任务的输入要求。

修正后的完整代码示例

import keras
from keras import layers
from keras.optimizers import Adam
from keras.losses import BinaryCrossentropy

# 模型定义(假设使用30个特征,根据实际数据调整)
model = keras.Sequential()
model.add(layers.Dense(16, input_shape=(30,), activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.summary()

loss_function = BinaryCrossentropy()
optim = keras.optimizers.Adam(learning_rate=5e-4)

model.compile(
    optimizer=optim, 
    loss=loss_function,
    metrics='accuracy'
)

# 训练模型(确保X_train形状为(N,30),y_train形状为(N,)或(N,1))
model.fit(
    x=X_train,
    y=y_train,
    batch_size=16,
    epochs=50,
    verbose="auto",
    validation_data=(X_test, y_test),
    shuffle=True,
)

内容的提问来源于stack exchange,提问作者Mireia Farreras Domingo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:23:26