目录

string 的定义

string 类型常用的函数

tf.as_string()

tf.substr()

tf.string_to_number()

tf.string_split()

tf.string_join()

tf.reduce_join()

总结


Tesorflow 版本:1.7.0,1.14.0


string 的定义

Tensorflow 中string 类型的定义与其他数值类型的定义一样,需要使用多种函数定义。主要包括以下几个函数和占位符的方式;

tf_str=tf.convert_to_tensor("Hello Tensorflow")
tf_str=tf.constant('Hello Tensorflow',dtype=tf.string)
tf_str=tf.Variable("Hello Tensorflow",shape=[2,2],dtype=tf.string)

string 类型常用的函数

了解一种类型,其常用的函数操作是必须要了解的,下面将介绍几种常用的函数。

tf.as_string()

从函数名字就可以看出这个函数的功能是将其他类型的Tensor转换成string类型。这个函数的形参有很多,但是大都带有默认值。使用方法为:

tf.as_string(input)

其中input要求为int32等数值类型以及bool类型的Tensor。当然,与许多其他函数一样,当输入为非Tensor的普通类型时,会自动转为Tensor再进行类型转换。

tf_num=tf.constant(123,dtype=tf.int32)
as_str=tf.as_string(tf_num)            #将数值类型Tensor转为字符串Tensoras_str=tf.as_string(123)               #将普通数值转为字符串Tensor

tf.substr()

首先要说,与Python跟C++不同,Tensorflow对于单独的字符串不支持下标索引。

sub_str=_str[0:5]   #Python 支持,C++、TF不支持
sub_str=_str[5]     # C++、Python 支持, TF不支持

想要获取字符串的子串只能通过函数tf.substr()进行,函数名和形参列表如下;

def substr(input, pos, len, name=None)   #函数名和形参sub_str=tf.substr(tf_str,3,2)            #函数使用

主要的参数有输入字符串,子串起始位置pos和长度len。在1.7.0等早期的版本中,要求pos必须为小于input长度的正整数,这点与C++字符串类型的成员函数substr()保持一致,毕竟Tensorflow的底层主要由C++实现。但是在1.14.0等后续的版本中对该参数进行了修改,pos可以使负数,此时与Python中的用法一样,为从后至前排序。

tf.string_to_number()

在Tensorflow中,数值类型和bool类型的Tensor之间类型转换使用tf.cast()函数,但是该函数不支持字符串类型。字符串转数值必须通过tf.string_to_number()函数,该函数与tf.as_string()功能相反,但是并不支持bool类型,默认的转换类型为tf.float32。

def string_to_number(string_tensor, out_type=_dtypes.float32, name=None)    #函数名和形参tf_num=tf.string_to_number(tf_str,out_type=tf.int32)                        #函数使用

tf.string_split()

tf.string_split()函数的功能是分离字符串。他要求输入为一维的字符串,并根据delimiter来分离字符串,当不提供delimiter时,按照空格的位置来分割字符串。函数的返回一个稀疏Tensor,包含indeces和values两个属性,values记录分割得到的子串的值,indeces对应地指出子串在input中的位置。

def string_split(input, delimiter, skip_empty=True, name=None)    #函数命和参数tf_str=tf.constant(['abcdabcda bc', "abda c"],dtype=tf.string)
split_d=tf.string_split(tf_str,'d')    #根据‘d’的位置分割字符串
split_d_values=split_d.values          #['abc' 'abc' 'a bc' 'ab' 'a c']split_=tf.string_split(tf_str)         #根据空格分割字符串
split_values=split_.values             #['abcdabcda' 'bc' 'abda' 'c']
split_indices=split_.indices           #[[0 0][0 1][1 0][1 1]]

tf.string_join()

刚刚介绍了字符串分离,对应的就有字符串连接,tf.string_join()函数的功能是连接多个字符串,函数参数中的separator表示用什么字符将合并的字符串隔开。当然,Tensorflow支持字符串直接相加。

def string_join(inputs, separator="", name=None):           #函数名和参数tf_str5=tf.constant('Hello Tensorflow:',shape=[2,2],dtype=tf.string)
tf_str6=tf.constant('Hello world',shape=[2,2],dtype=tf.string)
join=tf.string_join([tf_str5,tf_str6],separator=" ")   #join=[['Hello Tensorflow: Hello world' 'Hello Tensorflow: Hello world']
#      ['Hello Tensorflow: Hello world' 'Hello Tensorflow: Hello world']]add_=tf_str5+tf_str6#add_=[['Hello Tensorflow:Hello world' 'Hello Tensorflow:Hello world']
#      ['Hello Tensorflow:Hello world' 'Hello Tensorflow:Hello world']]

tf.reduce_join()

从函数名可以看出这个函数的的功能与reduce_mean()、reduce_max()等类似,是将函数在给定的维度上拼接起来。用法业与这些函数相似。

def reduce_join(inputs, reduction_indices, keep_dims=False, separator="", name=None)  #函数名与参数tf_str=tf.constant([['a' ,'b'],['c' ,'d']],dtype=tf.string)
reduce_join_0=tf.reduce_join(tf_str,axis=0)      #reduce_join_0=['ac' 'bd']
reduce_join_1=tf.reduce_join(tf_str,axis=1)      #reduce_join_1=['ab' 'cd']
reduce_join_=tf.reduce_join(tf_str)              #reduce_join_='abcd'

总结

从tf.string的一些常用的函数可以看出,Tensorflow的作者团队其实也是很矛盾的,这导致TF似乎想要追求python那样的方便,又想尽量靠近C++以求高效,最终都不太理想。目前TF在学术研究者中的使用率是要明显低于PyTorch的,也许Tensorflow 2.0的发布会给Tensorflow涨一波粉,作为一名TF坑中人,希望他越来越好吧!

已完。。。。

【Tensorflow】TF中的字符串tf.string相关推荐

  1. tf第四讲:tf中的循环tf.while_loop,条件tf.cond,比较、数学运算、类型转换

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  2. Java中string字符串的值_Java中的字符串(String)

    一.基本概念: 字符串是一系列字符串的序列.在Java语言中字符串是用一对对双引号"",括起来的字符系列.例如"Hello","你好".从数 ...

  3. string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?

    通过可见字符建模 把JavaScript中的string当作字符序列来看待是最直观的,虽然这样并不准确. 以下代码示例中的字符串由5个字母和一个感叹号组成: const message = 'Hell ...

  4. 【转】C++中的字符串(String)和数值转换

    『写在前边』 因为写PAT总是遇到字符串(主要是String)和数值之间的转化,所以整理一下以便好复习. 『String类型的字符串』 这里数值和字符串相互转换的例子,使用的是stringstream ...

  5. 在C++中对字符串std::string使用switch/case语句

    如果你使用C语音的string,也就是char *,是可以放在switch/case语句中的. 在C++中是不能对字符串string使用switch/case语句的,这里的string指的是std:: ...

  6. java中的string类型_Java中的字符串类型(String)

    String 字符串是一个引用数据类型,字符串都是对象. String特性:1.在程序中出现的字符串字面量(常量),在程序中运行时会以对象的形式保存在JVM内存的字符串池中,并且所有的这些字符串字面量 ...

  7. C++中switch字符串Cstring/string map中查找

    1.建立map BOOL CPhoneBackupDetect::SetDevicesMap(map<string,int> &mapDevice) {mapDevice.inse ...

  8. 【python】tensorflow框架中的tf.gather_nd()函数对应的 pytorch框架的gather_nd()函数

    tf.gather_nd 函数对应的pytorch函数 1. 简单介绍 2. 步入正题 2.1 tensorflow tf.gather_nd() 2.2 pytorch框架手动实现gather_nd ...

  9. tensorflow命令行参数:tf.app.flags.DEFINE_string、tf.app.flags.DEFINE_integer、tf.app.flags.DEFINE_boolean

    tf 中定义了 tf.app.flags.FLAGS ,用于接受从终端传入的命令行参数,相当于对Python中的命令行参数模块optpars(参考: python中处理命令行参数的模块optpars ...

最新文章

  1. 从电影死亡笔记看商业智能在治安领域的应用
  2. wider face data 在 faster rcnn 上的实践记录(caffe)
  3. ndows live id怎么登陆,手机如何注册和使用Windows Live ID帐号
  4. 前端学习(593):使用devtools作为代码编辑器
  5. 计算机系统基础 计算机系统的基本组成与基本功能
  6. 通过纯css实现图片居中的多种实现方式
  7. mysql降低高水位_[数据库]数据高水位分析
  8. 虚拟机连不上网 Xshell连不上虚拟机
  9. java反射 获取方法_java反射——获取类的方法信息
  10. 牛奶盒喷码字符识别(基于opencv)————(三)字符的识别
  11. 中颐软启动器说明书_中颐软启动器维修
  12. QQ坦白说查看好友方法攻略
  13. 超简单的晃咖、小咖秀视频去水印下载方法
  14. 在淘宝做前端的这三年 — 第二年
  15. 通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它
  16. php smarty 模版引擎,php模板引擎Smarty入门 - 小俊学习网
  17. Z 字形变换(Python)
  18. 【python操作word和pdf】
  19. Vue3组件化开发(二)
  20. 【每日英文】2021.8.17

热门文章

  1. Android中文API(122) —— AudioRecord
  2. 转载自《读者》--您也吻我一下好吗
  3. Java中的JDBC教程
  4. 基于CentOS 7 安装Percona XtraDB Cluster(PXC) 5.7
  5. C#/.Net开发入门篇(1)——开发工具安装
  6. docker 完成 redis集群搭建
  7. “mysql数据库表锁死,既打不开,也关不上”的解决方案
  8. 常用算法以及加密工具
  9. 从安装到部署的Cordova iOS应用开发说明
  10. cms核心功能_如何根据这些重要功能选择合适的CMS