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

TensorFlow模型predict报错:Cast string to float is not supported求助

问题描述

基于TensorFlow构建二分类模型,训练过程无报错,但调用model.predict(test_dataset)时,始终抛出**"Cast string to float is not supported"**错误。测试数据含365个特征,用Pandas查看均为float64类型,预期每条数据输出0-1之间的单值,不清楚字符串来源,请求排查错误原因。

用户提供代码

import tensorflow as tf
import numpy as np
import pandas as pd
import functools
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.losses import binary_crossentropy


def process_continuous_data(mean, data):
  # Center the data
  data = tf.cast(data, tf.float32) * 1/(2*mean)
  return tf.reshape(data, [-1, 1])



# Load training data
path = 'train_data.csv'
data_train_tf=pd.read_csv(path)
col=["Index","WeightKg","Age","Speed","V1_LF","V1_RF","V1_LH","V1_RH","STD_V1_LF","STD_V1_RF","STD_V1_LH","STD_V1_RH","V2_LF","V2_RF","V2_LH","V2_RH","STD_V2_LF","STD_V2_RF","STD_V2_LH","STD_V2_RH","V3_LF","V3_RF","V3_LH","V3_RH","STD_V3_LF","STD_V3_RF","STD_V3_LH","STD_V3_RH","V4_LF","V4_RF","V4_LH","V4_RH","STD_V4_LF","STD_V4_RF","STD_V4_LH","STD_V4_RH","V5_LF","V5_RF","V5_LH","V5_RH","STD_V5_LF","STD_V5_RF","STD_V5_LH","STD_V5_RH","V6_LF","V6_RF","V6_LH","V6Z_RH","STD_V6_LF","STD_V6_RF","STD_V6_LH","STD_V6_RH","V7_LF","V7_RF","V7_LH","V7_RH","STD_V7_LF","STD_V7_RF","STD_V7_LH","STD_V7_RH","V8_LF","V8_RF","V8_LH","V8_RH","STD_V8_LF","STD_V8_RF","STD_V8_LH","STD_V8_RH","V9_LF","V9_RF","V9_LH","V9_RH","STD_V9_LF","STD_V9_RF","STD_V9_LH","STD_V9_RH","V10_LF","V10_RF","V10_LH","V10_RH","STD_V10_LF","STD_V10_RF","STD_V10_LH","STD_V10_RH","V11_LF","V11_RF","V11_LH","V11_RH","STD_V11_LF","STD_V11_RF","STD_V11_LH","STD_V11_RH","V12_LF","V12_RF","V12_LH","V12_RH","STD_V12_LF","STD_V12_RF","STD_V12_LH","STD_V12_RH","V13_LF","V13_RF","V13_LH","V13_RH","STD_V13_LF","STD_V13_RF","STD_V13_LH","STD_V13_RH","Mean_V14_LF","Mean_V14_RF","Mean_V14_LH","Mean_V14_RH","STD_V14_LF","STD_V14_RF","STD_V14_LH","STD_V14_RH","V15_LF","V15_RF","V15_LH","V15_RH","STD_V15_LF","STD_V15_RF","STD_V15_LH","STD_V15_RH","V16_LF","V16_RF","V16_LH","V16_RH","V17_LF","V17_RF","V17_LH","V17_RH","V18_LF","V18_RF","V18_LH","V18_RH","V19_LF","V19_RF","V19_LH","V19_RH","V20_LF","V20_RF","V20_LH","V20_RH","V21_LF","V21_RF","V21_LH","V21_RH","V22_LF","V22_RF","V22_LH","V22_RH","V23_LF","V23_RF","V23_LH","V23_RH","V24_LF","V24_RF","V24_LH","V24_RH","V25_LF","V25_RF","V25_LH","V25_RH","V26_LF","V26_RF","V26_LH","V26_RH","V27_LF","V27_RF","V27_LH","V27_RH","V28_LF","V28_RF","V28_LH","V28_RH","V29_LF","V29_RF","V29_LH","V29_RH","V30_LF","V30_RF","V30_LH","V30_RH","Speed_trot","V1_LF_trot","V1_RF_trot","V1_LH_trot","V1_RH_trot","STD_V1_LF_trot","STD_V1_RF_trot","STD_V1_LH_trot","STD_V1_RH_trot","V2_LF_trot","V2_RF_trot","V2_LH_trot","V2_RH_trot","STD_V2_LF_trot","STD_V2_RF_trot","STD_V2_LH_trot","STD_V2_RH_trot","V3_LF_trot","V3_RF_trot","V3_LH_trot","V3_RH_trot","STD_V3_LF_trot","STD_V3_RF_trot","STD_V3_LH_trot","STD_V3_RH_trot","V4_LF_trot","V4_RF_trot","V4_LH_trot","V4_RH_trot","STD_V4_LF_trot","STD_V4_RF_trot","STD_V4_LH_trot","STD_V4_RH_trot","V5_LF_trot","V5_RF_trot","V5_LH_trot","V5_RH_trot","STD_V5_LF_trot","STD_V5_RF_trot","STD_V5_LH_trot","STD_V5_RH_trot","V6_LF_trot","V6_RF_trot","V6_LH_trot","V6Z_RH_trot","STD_V6_LF_trot","STD_V6_RF_trot","STD_V6_LH_trot","STD_V6_RH_trot","V7_LF_trot","V7_RF_trot","V7_LH_trot","V7_RH_trot","STD_V7_LF_trot","STD_V7_RF_trot","STD_V7_LH_trot","STD_V7_RH_trot","V8_LF_trot","V8_RF_trot","V8_LH_trot","V8_RH_trot","STD_V8_LF_trot","STD_V8_RF_trot","STD_V8_LH_trot","STD_V8_RH_trot","V9_LF_trot","V9_RF_trot","V9_LH_trot","V9_RH_trot","STD_V9_LF_trot","STD_V9_RF_trot","STD_V9_LH_trot","STD_V9_RH_trot","V10_LF_trot","V10_RF_trot","V10_LH_trot","V10_RH_trot","STD_V10_LF_trot","STD_V10_RF_trot","STD_V10_LH_trot","STD_V10_RH_trot","V11_LF_trot","V11_RF_trot","V11_LH_trot","V11_RH_trot","STD_V11_LF_trot","STD_V11_RF_trot","STD_V11_LH_trot","STD_V11_RH_trot","V12_LF_trot","V12_RF_trot","V12_LH_trot","V12_RH_trot","STD_V12_LF_trot","STD_V12_RF_trot","STD_V12_LH_trot","STD_V12_RH_trot","V13_LF_trot","V13_RF_trot","V13_LH_trot","V13_RH_trot","STD_V13_LF_trot","STD_V13_RF_trot","STD_V13_LH_trot","STD_V13_RH_trot","Mean_V14_LF_trot","Mean_V14_RF_trot","Mean_V14_LH_trot","Mean_V14_RH_trot","STD_V14_LF_trot","STD_V14_RF_trot","STD_V14_LH_trot","STD_V14_RH_trot","V15_LF_trot","V15_RF_trot","V15_LH_trot","V15_RH_trot","STD_V15_LF_trot","STD_V15_RF_trot","STD_V15_LH_trot","STD_V15_RH_trot","V16_LF_trot","V16_RF_trot","V16_LH_trot","V16_RH_trot","V17_LF_trot","V17_RF_trot","V17_LH_trot","V17_RH_trot","V18_LF_trot","V18_RF_trot","V18_LH_trot","V18_RH_trot","V19_LF_trot","V19_RF_trot","V19_LH_trot","V19_RH_trot","V20_LF_trot","V20_RF_trot","V20_LH_trot","V20_RH_trot","V21_LF_trot","V21_RF_trot","V21_LH_trot","V21_RH_trot","V22_LF_trot","V22_RF_trot","V22_LH_trot","V22_RH_trot","V23_LF_trot","V23_RF_trot","V23_LH_trot","V23_RH_trot","V24_LF_trot","V24_RF_trot","V24_LH_trot","V24_RH_trot","V25_LF_trot","V25_RF_trot","V25_LH_trot","V25_RH_trot","V26_LF_trot","V26_RF_trot","V26_LH_trot","V26_RH_trot","V27_LF_trot","V27_RF_trot","V27_LH_trot","V27_RH_trot","V28_LF_trot","V28_RF_trot","V28_LH_trot","V28_RH_trot","V29_LF_trot","V29_RF_trot","V29_LH_trot","V29_RH_trot","V30_LF_trot","V30_RF_trot","V30_LH_trot","V30_RH_trot","Group0-NormalControl1Affected"]
feature_names = col[:-1]
label_name = col[-1]

dataset = tf.data.experimental.make_csv_dataset("train_data.csv", batch_size=32 ,column_names=col,label_name=label_name)
test_dataset = tf.data.experimental.make_csv_dataset("test_data_s.csv", batch_size=32 ,column_names=feature_names)


desc = pd.read_csv('train_data.csv')[feature_names].describe()
MEAN = np.array(desc.T['mean'])
numerical_columns = []

for feature_id in range(len(feature_names)):
    num_col = tf.feature_column.numeric_column(feature_names[feature_id], normalizer_fn=functools.partial(process_continuous_data, MEAN[feature_id]))
    numerical_columns.append(num_col)

# create a feature layer that will transform the input data
numeric_layer = tf.keras.layers.DenseFeatures(numerical_columns)

# Create model
model=Sequential()
model.add(numeric_layer)
model.add(Dense(20,  activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss=binary_crossentropy, optimizer='adam', metrics=['accuracy'])
model.fit(dataset, epochs=10, steps_per_epoch=100)


# # Predict
predictions = model.predict(test_dataset)
print(predictions)

# #save predict result
np.savetxt('result.csv', predictions, delimiter = ',')

测试数据样例

Index   WeightKg    Age
143      38.3      1.56
154      23.9      2.24
30       25.1      4.01
111      38.8      5.49
183      36.5      3.21
错误原因分析
  • 测试数据加载参数缺失:使用tf.data.experimental.make_csv_dataset加载测试数据时,未设置header=False。如果测试CSV没有表头行,TensorFlow会默认将第一行数据解析为列名(字符串类型),后续行数据会被当作与列名对应的特征值,导致特征数据类型混乱,在模型前向传播时触发字符串转浮点的错误。
  • 特征数量不匹配:用户提供的测试数据样例仅包含3个特征,但模型训练时使用了365个特征,特征数量不一致会导致数据解析异常,进一步引发类型转换问题。
修复方案
  1. 修正测试数据集加载代码
    添加header=False参数,确保TensorFlow正确解析测试数据:

    test_dataset = tf.data.experimental.make_csv_dataset(
        "test_data_s.csv", 
        batch_size=32, 
        column_names=feature_names,
        header=False
    )
    

    如果测试数据本身带有表头,则无需添加该参数,但需确保表头名称与feature_names完全一致。

  2. 确保测试数据特征完整
    检查测试数据文件,保证包含与训练数据完全一致的365个特征列,列顺序也需和feature_names列表匹配。

  3. 验证数据加载正确性
    可以添加以下代码查看测试数据集的特征类型,确认无字符串类型:

    for batch in test_dataset.take(1):
        print("特征类型:", {k: v.dtype for k, v in batch.items()})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:35:23