Stack Overflow标签预测深度学习模型报错ValueError: invalid literal for int() with base 10: 'php'求助
问题根因
你报错的核心原因是tf.one_hot()要求输入的是整数类型的标签索引,而你直接传入了字符串形式的标签(比如'php'、'c'这些),无法直接转成整数做独热编码。另外你的代码还有一个参数使用错误也会导致后续报错。
完整修复步骤
- 第一步:先把字符串标签映射为整数索引
你需要先给所有唯一标签分配对应的数字ID,代码示例:
import pandas as pd import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 生成标签到整数的映射字典 tag2id = {tag: idx for idx, tag in enumerate(data.tag_name.unique())} # 将字符串标签转换为整数索引 y_labels = np.array([tag2id[tag] for tag in data.tag_name])
- 第二步:修正独热编码和fit的参数
你原来的validation_data=0.3是错误的,切分验证集比例要用validation_split参数,独热编码直接传入整数标签即可,不需要额外reshape:
model = Sequential() model.add(Dense(16,activation='relu',input_shape = (384,))) #隐藏层 model.add(Dense(len(tag2id),activation='sigmoid')) #输出层 model.compile(optimizer='SGD',loss='binary_crossentropy',metrics=['accuracy']) # 这里直接传转换好的整数标签做one_hot,用validation_split切30%验证集 model.fit( np.array(list_embedding), tf.one_hot(y_labels, depth=len(tag2id)), validation_split=0.3, epochs=20 )
可选优化点
如果你的每个帖子只对应一个标签,属于单标签分类场景,可以把输出层激活函数换成softmax,损失函数换成categorical_crossentropy,训练收敛速度会更快。
内容的提问来源于stack exchange,提问作者user15565396
相关产品推荐
相关产品推荐

