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

Python Keras搭建模型拟合数据集报错问题咨询

问题描述

在将数据集拟合到构建的神经网络模型过程中遇到报错,无法理解报错含义,也不知道对应修复方法。

相关代码

import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import Dense


dataset = pd.read_csv('Churn_Modelling.csv')
dataset

数据集预览

Jupyter中数据集描述

X=dataset.iloc[:,3:13].values
Y=dataset.iloc[:,13].values

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
lableencoder_X_2 = LabelEncoder()
X[:, 2] = lableencoder_X_2.fit_transform(X[:, 2])

ct = ColumnTransformer([('ohe', OneHotEncoder(), [1])], remainder='passthrough')
X = np.array(ct.fit_transform(X), dtype = str)
X = X[:, 1:]

classifier.add(Dense(units = 6,kernel_initializer = 'uniform',activation ='relu',input_dim = 11))

classifier.add(Dense(units = 6,kernel_initializer = 'uniform',activation ='relu'))

classifier.add(Dense(units= 1, kernel_initializer = 'uniform',activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crssentropy', metrics = ['accuracy'])

# 拟合数据集到模型
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

报错信息

报错截图

报错原因与修复方案

代码中存在5处直接触发报错或导致模型无法正常训练的问题,对应修复方式如下:

  • 未初始化序贯模型:代码未实例化Sequential类就直接调用classifier.add()添加网络层,会触发变量未定义报错。需要在添加网络层前先执行classifier = Sequential()完成模型初始化。
  • 特征类型错误:独热编码后执行X = np.array(ct.fit_transform(X), dtype = str)强制将所有特征转为字符串格式,神经网络无法接收字符串类型的张量参与运算,需要删除dtype = str参数,保留默认数值类型即可。
  • 损失函数拼写错误:编译模型时传入的损失值binary_crssentropy存在拼写错误,Keras无法识别该损失函数,正确的二分类交叉熵损失名称为binary_crossentropy。
  • 缺少数据集拆分步骤:代码直接调用classifier.fit(X_train, y_train),但从未定义X_train、y_train变量,需要先通过train_test_split将处理好的特征和标签拆分为训练集、测试集。
  • 未做特征标准化:代码导入了StandardScaler但未使用,神经网络对特征尺度敏感,未缩放的特征会导致模型收敛慢、精度差,需要在数据集拆分后对特征做标准化处理。

修正后可运行完整代码

import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense

# 读取数据集
dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:,3:13].values
Y = dataset.iloc[:,13].values

# 分类字段编码
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

ct = ColumnTransformer([('ohe', OneHotEncoder(), [1])], remainder='passthrough')
X = np.array(ct.fit_transform(X))
X = X[:, 1:] # 去除独热编码产生的冗余哑变量

# 拆分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

# 特征标准化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# 初始化并构建神经网络
classifier = Sequential()
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation='relu', input_dim = 11))
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation='relu'))
classifier.add(Dense(units= 1, kernel_initializer = 'uniform', activation='sigmoid'))

# 编译模型
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

# 训练模型
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:36:37