我正在使用TensorFlow r1.7和python3.6.5。我也是TensorFlow的新手,所以如果可能的话,我想要易于阅读的解释。
我正在尝试使用此函数tf.data.Dataset.from_tensor_slices()
将输入数据转换为张量数据集。我将具有混合数据类型的元组传递给此函数。但是,在运行我的代码时,我收到此错误:ValueError: Can't convert Python sequence with mixed types to Tensor
。
我想知道为什么我收到此错误,以及如何将数据转换为张量数据集,即使是混合数据类型。
这是我元组中前5个条目的打印输出。
(13501, 2, None, 51, '2232', 'S35', '734.72', 'CLA', '240', 1035, 2060, 1252, 1182, 10, '967.28', '338.50', None, 14, 102, 3830)
(15124, 2, None, 57, '2641', 'S35', '234.80', 'DDA', '240', 743, 1597, 4706, 156, 0, None, None, None, 3, 27, 981)
(40035, 2, None, None, '21', 'K00', '60.06', 'CHK', '520', 76, 1863, 12, None, 1, '85.06', '25.00', None, 1, 5, 245)
(42331, 3, None, 62, '121', 'S50', '1859.01', 'ACT', '420', 952, 1583, 410, 255, 0, None, None, None, 6, 117, 1795)
(201721, 3, None, 42, '2472', 'S35', '1413.84', 'CLA', '350', 868, 1746, 963, 264, 0, None, None, None, 18, 65, 4510)
正如您所看到的,我在输入数据中混合了整数,浮点数和字符串。
以下是错误的追溯:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/miikey101/Documents/Khalen_Case_Loader/tensorflow/k_means/k_means.py", line 10, in prepare_dataset
dataset = tf.data.Dataset.from_tensor_slices(dm_data)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 222, in from_tensor_slices
return TensorSliceDataset(tensors)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 1017, in __init__
for i, t in enumerate(nest.flatten(tensors))
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 1017, in <listcomp>
for i, t in enumerate(nest.flatten(tensors))
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 950, in convert_to_tensor
as_ref=False)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1040, in internal_convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 235, in _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 185, in constant
t = convert_to_eager_tensor(value, ctx, dtype)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 131, in convert_to_eager_tensor
return ops.EagerTensor(value, context=handle, device=device, dtype=dtype)
ValueError: Can't convert Python sequence with mixed types to Tensor.
答案 0 :(得分:3)
在张量流中,您不能使用具有多种数据类型的张量。
不可能有一个具有多种数据类型的tf.Tensor。但是,可以将任意数据结构序列化为字符串,并将它们存储在tf.Tensors中。
因此,解决方法可能是创建数据类型为tf.String
的张量,并在发生时将字段转换为所需的数据类型
答案 1 :(得分:1)
您需要每个特征(列)的张量。只有当它是一个多维特征(如图像、视频、字符串列表、向量)时,张量中才会有更多维度,即便如此,它们也会具有相同的数据类型。
tf.data.Dataset.from_tensor_slices()
将接受您的输入作为列表字典(键是特征的名称,值是该特征中的值的列表),或作为列表的列表。我不记得它是否吃了 Pandas 数据帧,但如果不是,您可以轻松地将其转换为字典 df.to_dict()
。
但是,您不能输入 None
值。在转换为张量之前,您必须为这些找到一些值。经典方法是中值、零值、最常见值、字符串或类别的“缺失”/“未知”值或插补。