开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
总结:此文为12月更文计划第三天第七篇。
张量运算-Ragged tensor
这篇文章继续上一篇的文章,进行 sparse tensor的学习
sparse tensor
对于sparse tensor的基础知识学习:
s = tf.SparseTensor(indices = [[0, 1], [1, 0], [2, 3],[3,2]], #位置
values = [1., 2., 3.,5], #值
dense_shape = [4, 4]) #维数
print(s)
print('-'*50)
tt=tf.sparse.to_dense(s)
print('-'*50)
tt
sparse tensor 可以往前面补零,sparse tensor从第一行依次往下填位置
#sparese tensor存储节省内存空间,磁盘空间
输出的结果如下:
对于sparse tensor的算数运算学习:
s2 = s * 2.0
print(s2)
print('-'*50)
#不支持加法
try:
s3 = s + 1
except TypeError as ex:
print(ex)
print('-'*50)
s4 = tf.constant([[10., 20.],
[30., 40.],
[50., 60.],
[70., 80.]])
# tf.sparse.to_dense(s)@s4
print(tf.sparse.sparse_dense_matmul(s, s4))
#稀疏Tensor和Tensor想乘
输出的结果如下:
#没有顺序的sparse tensor必须进行reorder以后才能to_dense
s5 = tf.SparseTensor(indices = [[0, 2], [2, 3], [0, 1]],
values = [1., 2., 3.],
dense_shape = [3, 4])
# print(tf.sparse.to_dense(s5)) #sparse无顺序时,不能转为tensor,会报错
print('-'*50)
print(s5)
print('-'*50)
s6 = tf.sparse.reorder(s5)
print(s6)
print('-'*50)
print(tf.sparse.to_dense(s6))
输出的结果如下:
Variables
v = tf.Variable([[1., 2., 3.], [4., 5.,6.]])
print(v)
print('-'*50)
print(type(v))
print('-'*50)
print(v.value())
print('-'*50)
print(v.numpy())
输出的结果如下:
修改变量时要用assign,改变tensor内某个值,空间没有发生变化,效率高
#assign就是赋值,变量就需要通过这个方式赋值,不能用等号
# assign value
print(id(v))
print('-'*50)
v.assign(2*v)
print(id(v))
print('-'*50)
print(v.numpy())
print('-'*50)
v[0, 1].assign(42) #取某个元素修改
print(v.numpy())
print('-'*50)
v[1].assign([7., 8., 9.]) #取某一行修改
print(v.numpy())
print(id(v))
输出的结果如下: