VGG16迁移学习运行model.fit时出现NumPy数组转Tensor错误排查
错误原因与修复方案
你遇到的ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int)报错,核心原因是输入/标签的数据类型不符合Tensor要求,结合你给出的代码,具体问题和修复方法如下:
- 标签数据类型错误
你的Sex列是字符串类型(值为female/male),使用class_mode="raw"时生成器会直接返回原始值,字符串无法转换为Tensor,同时不同标签列的int/字符串混合类型也会触发类型不兼容报错。
修复代码:# 性别列数值编码 training_dataframe['Sex'] = training_dataframe['Sex'].map({'female': 0, 'male': 1}) validation_dataframe['Sex'] = validation_dataframe['Sex'].map({'female': 0, 'male': 1}) # 统一标签列为float32类型,适配Tensor输入要求 training_dataframe[['Sex', 'Weight']] = training_dataframe[['Sex', 'Weight']].astype('float32') validation_dataframe[['Sex', 'Weight']] = validation_dataframe[['Sex', 'Weight']].astype('float32') - 列名大小写不匹配
你的DataFrame中存储文件名的列名为大写的File,但flow_from_dataframe中x_col参数写为小写的file,会导致生成器读取不到有效文件路径,返回空值/对象类型值触发报错,修改对应参数即可:# 两个生成器的x_col都修改为大写的File train_generator=train_datagen.flow_from_dataframe( # 其余参数不变 x_col="File", # 其余参数不变 ) valid_generator=test_datagen.flow_from_dataframe( # 其余参数不变 x_col="File", # 其余参数不变 ) - 可选的模型适配优化
性别已经编码为0/1的单值标签,输出层无需设置2个节点,调整为1个节点即可避免后续维度不匹配问题:predict_sex = Dense(1, activation='sigmoid')(sex_model)
修复后重新运行训练代码即可解决报错。
内容的提问来源于stack exchange,提问作者Zuckerbrenner
相关产品推荐
相关产品推荐

