【问题标题】:Convert python sequence with multiple datatypes to tensor将具有多种数据类型的python序列转换为张量
【发布时间】:2018-09-24 06:40:55
【问题描述】:

我正在使用 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.

【问题讨论】:

    标签: python-3.x tensorflow types tuples


    【解决方案1】:

    您希望每个特征(列)都有一个张量。只有当它是一个多维特征(如图像、视频、字符串列表、向量)时,张量才会有更多维度,即使那样它们都将具有相同的数据类型。

    tf.data.Dataset.from_tensor_slices() 将接受您的输入作为列表字典(key 是功能的名称,value 是该功能中的值的列表)或列表的列表。我不记得它是否会吃 Pandas 数据帧,但如果不是,您可以轻松地将其转换为字典 df.to_dict()

    但是,您不能输入None 值。在转换为张量之前,您必须为那些找到一些值。对此的经典方法是中值、零值、最常见的值、字符串或类别的“缺失”/“未知”值,或插补。

    【讨论】:

      【解决方案2】:

      在 tensorflow 中,张量不能有多个数据类型。

      引用documentation

      tf.Tensor 不可能有一种以上的数据类型。但是,可以将任意数据结构序列化为字符串并将其存储在 tf.Tensors 中。

      因此,一种解决方法可能是创建一个数据类型为 tf.String 的张量,并在发生时将该字段转换为所需的数据类型

      【讨论】:

      • 我明白了,谢谢。我将所有字符串转换为整数表示,然后将所有整数转换为浮点数,我能够成功地将数据转换为张量。
      猜你喜欢
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2021-12-27
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多