张量运算(Ragged tensor)

265 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

总结:此文为12月更文计划第三天第六篇。

张量运算

继续昨天晚上的张量运算,今天是第二篇。

张量字符串常量的学习:

对一个字符串张量转化为ASCII码进行学习:

t = tf.constant("cafe")
print(t)
print(tf.strings.length(t))
print('-'*50)
print(tf.strings.length(t, unit="UTF8_CHAR"))
print('-'*50)
print(tf.strings.unicode_decode(t, "UTF8"))

输出的结果如下:

image.png

自动求出数组中每一个字符的长度,如果不加unit="UTF8_CHAR",得到的是实际字节存储的长度

将字符串张量进行字节流与汉字之间的相互转化:

t = tf.constant(["cafe", "coffee", "咖啡"])
print(tf.strings.length(t, unit="UTF8_CHAR"))  
print('-'*50)
print(tf.strings.length(t, unit="BYTE"))  
print('-'*50)
r = tf.strings.unicode_decode(t, "UTF8")
print(r)

输出的结果如下:

image.png

Ragged tensor的学习

# ragged tensor ,每行的元素个数不相等,ndarray是不可以这样的
r = tf.ragged.constant([[11, 12], [21, 22, 23], [], [41]])

# index op
print(r)
print('-'*50)
print(r.shape)
print('-'*50)
print(r[1])  #取一行是Tensor
print('-'*50)
#取多行也是ragged tensor
print(r[1:3])
# print(r[:,1])#不能取列索引

输出的结果如下:

image.png

ragged tensor的算数运算,与np或者pd相似,维度相同可以进行计算,如果维度不同那就不可以进行计算。

# ops on ragged tensor
r2 = tf.ragged.constant([[51, 52],[], [], [71]])
print(tf.concat([r, r2], axis = 0))
print('-'*50)
print(tf.concat([r, r2], axis = 1))  #行数不相等,不可以拼

输出的结果如下:

image.png

按轴1进行合并时,行数要一致,行数相等,可以拼

r3 = tf.ragged.constant([[13, 14], [15], [41], [42, 43]])
print(tf.concat([r, r3], axis = 1))

输出的结果如下:

image.png