【问题标题】:How to split strings in Tensors inside Tensorflow Datasets如何在 Tensorflow 数据集中拆分张量中的字符串
【发布时间】:2020-11-01 00:29:45
【问题描述】:

我有一个 tf Dataset 对象定义如下:

train_dataset = tf.data.Dataset.from_tensor_slices((english_train, german_train))

print(train_dataset.element_spec)

Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))

构造中使用的“english”和“german”对象是字符串数组(shape=(16000,) type=string) 和整数数组数组(shape=(16000, 14) type=int ),分别。

我想在英语对象中拆分这些字符串(例如“我在英语中”-> [“I”,“am”,“in”,“english”])。这必须在我构建数据集之后完成。

我用map的方法试了一下:

string_splitter = lambda english, german : tf.strings.split(english, sep=' ')

train_dataset.map(string_splitter)

print(train_dataset.element_spec)

Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))

应用此操作后,我检查数据集以查看是否一切正常:

list(train_dataset.as_numpy_iterator())[0:3]

Output:
[(b"that's ludicrous .",
  array([   1,   11,    6, 5097,    3,    2,    0,    0,    0,    0,    0,
            0,    0,    0], dtype=int32)),
 (b'is anybody home ?',
  array([  1,   6, 366,  20,  75,   7,   2,   0,   0,   0,   0,   0,   0,
           0], dtype=int32)),
 (b"get tom's advice .",
  array([   1,  320,   52,  186,    5, 1058,    3,    2,    0,    0,    0,
            0,    0,    0], dtype=int32))]

正如我们所见,字符串没有按照我的预期进行拆分。 我能做什么?

PS:字符串的长度可变。

【问题讨论】:

    标签: python string tensorflow split tensor


    【解决方案1】:

    似乎我的错误是我假设 map 方法是就地的,但显然我必须分配它(例如train_dataset = train_dataset.map(string_splitter))。

    如果我错了,请纠正我。

    另外,我必须修复拆分器功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      相关资源
      最近更新 更多