TensorFlow分类器训练报错TypeError: must be str, not int 求助
这种错误我之前帮不少开发者排查过,大概率是数据类型不匹配或者参数传递时误把整数当成字符串参数传入导致的,给你几个针对性的排查和解决方向:
检查标签数据的类型
TensorFlow的分类器(比如DNNClassifier)通常期望分类标签是字符串类型,如果你的数据集标签是整数(比如0/1、1-5这类),直接传入就会触发这个错误。你可以把整数标签转换成字符串类型:# 假设y_train是加载后的标签数组 import numpy as np y_train = y_train.astype(str)转换后可以打印前几个标签确认类型:
print(type(y_train[0]), y_train[:5])核对classifier.train的参数传递
仔细检查train方法的参数,尤其是那些需要字符串的参数,比如model_dir(模型保存路径)。如果不小心把整数传给了这个参数(比如写成model_dir=123而不是model_dir='./my_model'),就会报这个错。确保所有需要路径或字符串标识的参数都传入字符串值。排查数据加载环节的问题
从.mat文件加载数据时,用scipy.io.loadmat拿到的数组可能是整数类型,除了标签外,还要检查特征列的相关定义——如果你的特征名用了整数(比如直接用索引当特征名),而教程里用的是字符串特征名,也可能引发类型不兼容问题。建议给特征列定义明确的字符串名称,比如:feature_columns = [tf.feature_column.numeric_column(str(i)) for i in range(3000)]检查自定义input_fn的实现
如果是自己写的input_fn,确认返回的数据集里标签的类型是否正确。比如用tf.data.Dataset加载数据时,要确保标签被转换成字符串:def train_input_fn(): # 转换标签为字符串 dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train.astype(str))) dataset = dataset.shuffle(4500).batch(32).repeat() return dataset
如果还是没解决,建议把报错的完整堆栈信息贴出来,这样能更精准定位到是哪个变量或参数出了问题。
内容的提问来源于stack exchange,提问作者Hadeel

