一.引言

开发时同时用到了TF1与TF2,使用中发现 split 函数在V1和V2中有一些区别,记录一下。

二.TF1.x tf.string_split

1.使用

Input: 对字符串数组进行分割,默认分隔符为" ",skip_empty代表是否忽略空字符创

Output: 返回一个SparseTensor

def string_split(source, delimiter=" ", skip_empty=True):delimiter = ops.convert_to_tensor(delimiter, dtype=dtypes.string)source = ops.convert_to_tensor(source, dtype=dtypes.string)indices, values, shape = gen_string_ops.string_split(source, delimiter=delimiter, skip_empty=skip_empty)indices.set_shape([None, 2])values.set_shape([None])shape.set_shape([2])return sparse_tensor.SparseTensor(indices, values, shape)

2.示例

输入 source=[['hello world], ['a b c']] 是二维数组

输出 SparseTensor(indices = [0,0; 0,1;1,0;1,1;,1,2], values=['hello', 'world', 'a', 'b', 'c'], shape=[2,3])

关于SparseTensor相关知识可以参考: SparseTensor 与 Lookup

  For example:N = 2, source[0] is 'hello world' and source[1] is 'a b c', then the outputwill best.indices = [0, 0;0, 1;1, 0;1, 1;1, 2]st.shape = [2, 3]st.values = ['hello', 'world', 'a', 'b', 'c']

三.TF2.x tf.strings.split

1.使用

Input: 对字符串,字符串数组进行分割,增加了 maxsplit 参数

Output: 返回 RaggedTensor

def string_split_v2(input, sep=None, maxsplit=-1, name=None):with ops.name_scope(name, "StringSplit", [input]):input = ragged_tensor.convert_to_tensor_or_ragged_tensor(input, dtype=dtypes.string, name="input")if isinstance(input, ragged_tensor.RaggedTensor):return input.with_flat_values(string_split_v2(input.flat_values, sep, maxsplit))rank = input.shape.ndimsif rank == 0:return string_split_v2(array_ops.stack([input]), sep, maxsplit)[0]elif rank == 1 or rank is None:sparse_result = string_ops.string_split_v2(input, sep=sep, maxsplit=maxsplit)return ragged_tensor.RaggedTensor.from_value_rowids(values=sparse_result.values,value_rowids=sparse_result.indices[:, 0],nrows=sparse_result.dense_shape[0],validate=False)else:return string_split_v2(ragged_tensor.RaggedTensor.from_tensor(input), sep, maxsplit)

2.示例

A. 分割字符

输入  string = ["a b c"]

输出 常规 Tensor

tf.Tensor([b'a' b'b' b'c'], shape=(3,), dtype=string)

B. 分割字符数组

输入  text = ["123/bbbb/cba", "456/cccc/abc"]

返回 tf.RaggedTensor,shape 为(2, None),values 为常规 Tensor,可以视作Flatten

<tf.RaggedTensor [[b'123', b'bbbb', b'cba'], [b'456', b'cccc', b'abc']]>
shape=(2, None)
values=tf.Tensor([b'123' b'bbbb' b'cba' b'456' b'cccc' b'abc'], shape=(6,), dtype=string)

四.tf.string_split 与 tf.strings.split 异同

1.相同点

对字符进行分割

2.不同点

V1-tf.string_split V2-tf.strings.split
输入 字符串数组,单字符也需要[string] 字符串 or 字符串数组
返回类型 SparseTensor 稀疏张量 RaggedTensor 不规则张量
返回形状 按分割最长的字符补充                 只保留数组长度(len, None)

更多推荐算法相关深度学习:深度学习导读专栏

深度学习 - 22.TF TF1.x tf.string_split VS TF2.x tf.strings.split相关推荐

  1. 深度学习总结:tensorflow和pytorch关于RNN的对比,tf.nn.dynamic_rnn,nn.LSTM

    tensorflow和pytorch关于RNN的对比: tf.nn.dynamic_rnn很难理解,他的意思只是用数据走一遍你搭建的RNN网络. 可以明显看出pytorch封装更高,更容易理解,动态图 ...

  2. 新手入门深度学习 | 2-2:结构化数据建模流程示例

    文章目录 一.准备数据 二.定义模型 三.训练模型 四.评估模型 五.使用模型 六.保存模型 1. 保存整个模型 2. 保存模型权重

  3. Python 机器学习/深度学习/算法专栏 - 导读目录

    目录 一.简介 二.机器学习 三.深度学习 四.数据结构与算法 五.日常工具 一.简介 Python 机器学习.深度学习.算法主要是博主从研究生到工作期间接触的一些机器学习.深度学习以及一些算法的实现 ...

  4. 深度学习-循环神经网络(RNN)

    作者: 明天依旧可好 QQ交流群: 807041986 注:关于深度学习的相关问题,若本文未涉及可在下方留言告诉我,我会在文章中进行补充的. 原文链接:https://mtyjkh.blog.csdn ...

  5. 深度学习模型部署浅析

    关于模型部署可能有很多种概念或者解释. 根据看的一些文献和接触的一些开源工具,进行梳理. 模型部署说到底,就是通信传输,以及平台存储打通,以及任务的定时工作(定时工作可能偏向于调度了). 1. 模型部 ...

  6. 深度学习原理——41

    简单的理解就是,logits和probs的区别 logits就是没有经过softmax的输出: probs是logits经过softmax的输出. [1](10条消息) 深度学习中的 logits . ...

  7. 深度学习-20:神经科学、脑科学和稀疏特性

    深度学习-20:神经科学.脑科学和稀疏特性 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 第二次世界大战之后,美苏在全维度展开了霸权竞赛,人工智能研究伴随着计算机的发展也开始进入佳 ...

  8. 【深度学习】(4) 梯度下降、损失函数

    各位同学好,今天和大家介绍一下TensorFlow2.0中的梯度下降.激活函数及其梯度.损失函数及其梯度. (1) 梯度计算:GradientTape(),tape.watch(),tape.grad ...

  9. TF2.0深度学习实战(一):分类问题之手写数字识别

    前言: 本专栏将分享从零开始搭建神经网络的学习过程,力争打造最易上手的小白教程.在这过程中,我将使用谷歌TensorFlow2 框架逐一复现经典的卷积神经网络:LeNet-5.AlexNet.VGG系 ...

最新文章

  1. Hibernate二级缓存详解
  2. C语言项目--教师信息/学生成绩管理系统
  3. ubuntu系统安装和配置
  4. Codeforces 997D Cycles in Product (点分治、DP计数)
  5. 暑期训练日志----2018.8.17
  6. centeros7安装mysql
  7. 把这个写成一个类吧TREEVIEW
  8. Load Balance System
  9. 20155322 《Java程序设计》课堂实践项目 数据库-3-4
  10. Codeforces Round #295 (Div. 1) C. Pluses everywhere
  11. Java JDK 配置环境变量
  12. JAVA中字符串函数subString的用法小结
  13. Xamarin.Forms 解决ListView高度问题
  14. 萤石云视频PC客户端v2.6.14.0官方最新版
  15. CHD搭建的环境中,解决用户权限的问题
  16. 出现Avoid mutating a prop directly since the value will错误 已解决
  17. 大话云原生数据库中的存算分离
  18. python写文字冒险游戏手机版_用128行代码实现一个文字冒险游戏
  19. Oracle函数——比较函数
  20. HNUST 1231 趣味程序设计_猜牌术(-)

热门文章

  1. java实现全局键盘监听
  2. Asterisk中meetme会议功能报错
  3. win10出现一个mysql账户密码错误_Windows 10 访问网络共享 总是提示用户名或密码不正确的解决方法...
  4. 侧边栏php,侧边栏可伸缩效果
  5. 美股市场如何讲好一个故事?
  6. The user specified as a definer does not exist
  7. 12个球问题(不知轻重)
  8. charm-crypto安装(一)
  9. 【node进阶】深入浅出websocket即时通讯(一)
  10. 安装Apache详细步骤 (绿色版Apache的安装)自己安装过程中整理