Python 线性模型中不支持将字符串强制转换为浮点
在我的线性模型中,我一直遇到这样的错误: 不支持将字符串强制转换为浮点 具体而言,错误在这一行:Python 线性模型中不支持将字符串强制转换为浮点,python,tensorflow,model,linearmodels,Python,Tensorflow,Model,Linearmodels,在我的线性模型中,我一直遇到这样的错误: 不支持将字符串强制转换为浮点 具体而言,错误在这一行: results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1) 如果有帮助,下面是堆栈跟踪: File "tensorflowtest.py", line 164, in <module> m.fit(input_fn=lambda: input_fn(df_train), steps=int(100))
results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1)
如果有帮助,下面是堆栈跟踪:
File "tensorflowtest.py", line 164, in <module>
m.fit(input_fn=lambda: input_fn(df_train), steps=int(100))
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 475, in fit
max_steps=max_steps)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 333, in fit
max_steps=max_steps)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 662, in _train_model
train_op, loss_op = self._get_train_ops(features, targets)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 963, in _get_train_ops
_, loss, train_op = self._call_model_fn(features, targets, ModeKeys.TRAIN)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 944, in _call_model_fn
return self._model_fn(features, targets, mode=mode, params=self.params)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 220, in _linear_classifier_model_fn
loss = loss_fn(logits, targets)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 141, in _log_loss_with_two_classes
logits, math_ops.to_float(target))
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 661, in to_float
return cast(x, dtypes.float32, name=name)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 616, in cast
return gen_math_ops.cast(x, base_type, name=name)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py", line 419, in cast
result = _op_def_lib.apply_op("Cast", x=x, DstT=DstT, name=name)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op
op_def=op_def)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2380, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/home/computer/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1298, in __init__
self._traceback = _extract_stack()
UnimplementedError (see above for traceback): Cast string to float is not supported
[[Node: ToFloat = Cast[DstT=DT_FLOAT, SrcT=DT_STRING, _device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_1)]]
文件“tensorflowtest.py”,第164行,在
m、 配合(输入值=lambda:输入值=int(100))
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/linear.py”,第475行
最大步数=最大步数)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第333行
最大步数=最大步数)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第662行,列车模型
训练,损失=自我。获得训练(特征,目标)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第963行,在“获取培训”操作中
_,丢失,列车运行=自。\呼叫\型号\ fn(功能、目标、模式键.列车)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第944行,在调用模型fn中
返回self.\u model\u fn(特征、目标、模式=模式、参数=self.params)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/linear.py”,第220行,在线性分类器模型中
损失=损失\u fn(后勤、目标)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/contrib/learn/python/learn/estimators/linear.py”,第141行,包含两个类
逻辑、数学运算到浮动(目标))
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/ops/math_ops.py”,第661行,在to_float中
返回强制转换(x,dtypes.float32,name=name)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/ops/math_ops.py”,第616行,在cast中
返回gen_math_ops.cast(x,base_type,name=name)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/ops/gen_math_ops.py”,第419行,在cast中
结果=_op_def_lib.apply_op(“Cast”,x=x,DstT=DstT,name=name)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/framework/op_def_library.py”,第749行,在apply_op
op_def=op_def)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第2380行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/home/computer/.local/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第1298行,在__
self.\u traceback=\u extract\u stack()
UnimplementedError(回溯见上文):不支持将字符串强制转换为float
[[Node:ToFloat=Cast[DstT=DT_FLOAT,SrcT=DT_STRING,_device=“/job:localhost/replica:0/task:0/cpu:0”](重塑_1)]]
该模型是对和教程的改编。教程代码确实在运行,因此我的TensorFlow安装没有问题
输入CSV是许多二进制分类列形式的数据(yes
/no
)。最初,我将每列中的数据表示为0和1,但当我将其更改为y
s和n
s时,会得到相同的错误
如何修复此问题?您不能直接将字符串转换为数字,尤其是“y”、“n”转换为1.0/0.0
如果您有数字字符串(例如“0”),您可以尝试您的类可能是字符串形式,并且它们需要是数字的(1和0仅适用于本特定教程)我遇到了完全相同的问题,您需要确保输入模型的输入数据的格式正确。(不仅是特征,还有标签列) 我的问题是我没有跳过数据文件中的第一行,所以我尝试将标题转换为浮点格式
skiprows=1
读取csv时:
df_test = pd.read_csv(test_file, names=COLUMNS_TEST, skipinitialspace=True, skiprows=1, engine="python")
我建议您检查:
df_test.dtypes
你应该得到像这样的东西
Feature1 int64
Feature2 int64
Feature3 int64
Feature4 object
Feature5 object
Feature6 float64
dtype: object
如果您没有获得正确的数据类型,那么model.fit将失败通常,此错误是因为
m.evaluate
以某种方式为空
由于您是从csv文件加载数据的,所以很可能您的数据在数组中存储为字符串而不是浮点或int。我建议您手动检查以确保。问题在于,您可能已将该功能指示为真实类型,但在数据框中仍然是字符串,或者在tf.constant中设置时,您没有转换为正确的类型 确认列的类型。您可以只检查类型(df是您的数据帧): 您可以看到所有列和类型,其中一些类似:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 178932 entries, 0 to 178931
Data columns (total 64 columns):
d_prcp 178932 non-null float64
d_stn 178932 non-null int64
ws_lat 178932 non-null float64
ws_lon 178932 non-null float64
d_year 178932 non-null int64
d_temp 178932 non-null float64
...
我正在使用W10、Python3和Tensorflow 1.9 我的代码中的错误源在功能定义中。我有一个布尔特性,默认值为-1,如下所示:
tf.feature_column.categorical_column_with_vocabulary_list(
key='partial_funding_indicator', vocabulary_list=['True', 'False'],
dtype=tf.string, **default_value=-1**, num_oov_buckets=None)
当默认值
更改为0
时,问题没有出现:
tf.feature_column.categorical_column_with_vocabulary_list(
key='partial_funding_indicator', vocabulary_list=['True', 'False'],
dtype=tf.string, **default_value=0**, num_oov_buckets=None)
default_value
是要为词汇表外的要素值返回的整数ID值。例如,在值为['True','False']
的列表/文件中,要使默认值==True
,它将是默认值=0
;列表索引。在代码中的某个地方,您正在使用tf.cast()
将字符串转换为数字,但您不能这样做。替换为:
当我尝试在不同的数据集上复制这些步骤进行练习时,我遇到了同样的问题 修复起来很简单,只需使用以下代码将目标列的数据类型更改为int
df[“target\u column\u name”]=df[“target\u column\u name”].astype(str).astype(int)
此外,当目标列最初位于数据文件中时,您需要在开始时执行此操作。问题在于您要创建的文件上有一个标头
tf.feature_column.categorical_column_with_vocabulary_list(
key='partial_funding_indicator', vocabulary_list=['True', 'False'],
dtype=tf.string, **default_value=-1**, num_oov_buckets=None)
tf.feature_column.categorical_column_with_vocabulary_list(
key='partial_funding_indicator', vocabulary_list=['True', 'False'],
dtype=tf.string, **default_value=0**, num_oov_buckets=None)
tf.strings.to_number(x, out_type=tf.float32)
df_test.dtypes
,0
' or x = 1 , 1, 0,1
SELECT * FROM USERS WHERE(1 = 1, 1, 0 = 0,0),1