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

训练Keras二分类模型时遇binary_crossentropy/Cast类型转换错误求助

Keras二分类模型训练报错:字符串转浮点型失败

错误原因

你的代码存在核心问题:已经用LabelEncoder将标签编码为整数型的Y,但划分训练测试集时,传入的仍是原始字符串类型的标签y。

看关键代码片段:

# 编码得到整数标签Y(0和1)
Y = labelencoder.fit_transform(y) 

# 划分数据集时却用了原始y(值为'B'/'M'的字符串数组)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

binary_crossentropy损失函数要求标签为数值类型,而y_train和y_test还是字符串数组,自然触发"不支持将字符串转换为浮点型"的错误。

解决方案

将划分数据集的代码中的y替换为编码后的Y,确保训练和验证用的标签都是整数类型:

# 修正:使用编码后的Y划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25, random_state=42)

验证步骤

修改后可先检查标签的类型和取值,确认问题已解决:

print("训练标签类型:", type(y_train))
print("训练标签唯一值:", np.unique(y_train))

正常输出应为整数类型,且唯一值为[0 1]。

完整修正后的关键代码段

# Encoding categorical data from (B and M) to integers (0 and 1)
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
Y = labelencoder.fit_transform(y) # B=0 , M=1
print('Labels after encoder \n', np.unique(Y))

# ... 其他预处理代码 ...

# 修正:使用编码后的Y划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25, random_state=42)
print('Shape of training data is: ', X_train.shape)
print('Shape of testing data is: ', X_test.shape)

# ... 模型定义与编译 ...

# 训练模型
history = model.fit(X_train, y_train, verbose=1, epochs=100, batch_size=64, validation_data=(X_test, y_test))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:24:27