TensorFlow2.x——sparse_tensor & tf.variable介绍

sparse_tensor & tf.variable介绍

1.sparse_tensor介绍

稀疏矩阵参数介绍:
indices: 一个二维的有数据值的位置.
values:每个位置对应的值.
dense_shape: 矩阵的shape.

示例:

引用必要的函数库

import tensorflow as tf 
import numpy as  np
#sparse tensor 
s = tf.SparseTensor(indices = [[0, 1], [1, 0], [2, 3]],
                    values = [1., 2., 3.],
                    dense_shape = [3,4])
print(a)
print(tf.sparse.to_dense(s)) #转换为正常的tensor显示

结果:

SparseTensor(indices=tf.Tensor(
[[0 1]
[1 0]
[2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
tf.Tensor(
[[0. 1. 0. 0.]
[2. 0. 0. 0.]
[0. 0. 0. 3.]], shape=(3, 4), dtype=float32)

#operations on sparse_tensor

s2 = s * 2.0 
print(s2)

try :
    s3 = s + 1
except TypeError as ex:
    print(ex)

#矩阵相乘
s4 = tf.constant([[10., 20.],
                  [30., 40.],
                  [50., 60.],
                  [70., 80.]])
print(tf.sparse.sparse_dense_matmul(s, s4))

结果:

SparseTensor(indices=tf.Tensor(
[[0 1]
[1 0]
[2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([2. 4. 6.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
unsupported operand type(s) for +: ‘SparseTensor’ and ‘int’
tf.Tensor(
[[ 30. 40.]
[ 20. 40.]
[210. 240.]], shape=(3, 2), dtype=float32)

indices在同一行之间需要排好顺序,否则会在转化to_tensor时出错,可以通过tf.sparse.reorder重排序

s5 = tf.SparseTensor(indices = [[0,2], [0,1], [2, 3]], #未排好序,因为[0, 1], [0, 2]
                     values = [1., 2., 3.],
                     dense_shape =  [3, 4])
print(s5)
s6 = tf.sparse.reorder(s5)
print(tf.sparse.to_dense(s6))

结果:

SparseTensor(indices=tf.Tensor(
[[0 2]
[0 1]
[2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
tf.Tensor(
[[0. 2. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 3.]], shape=(3, 4), dtype=float32)

2.Variables 介绍

代码示例:

#Variables 
v = tf.Variable([[1., 2., 3.], [4., 5., 6.]])
print(v) #返回一个对象
print(v.value()) #返回一个具体的tensor
print(v.numpy())  #返回一个具体的值

结果:

<tf.Variable ‘Variable:0’ shape=(2, 3) dtype=float32, numpy=
array([[1., 2., 3.],
[4., 5., 6.]], dtype=float32)>
tf.Tensor(
[[1. 2. 3.]
[4. 5. 6.]], shape=(2, 3), dtype=float32)
[[1. 2. 3.]
[4. 5. 6.]]

#变量和常量的操作基本相同,但变量可以重新被赋值
# 变量的重新赋值只能使用assign函数,不能使用 = 赋值

#assign value 
v.assign(2*v) #将矩阵v每个值都乘以2
print(v.numpy())
v[0, 1].assign(23) #将矩阵v的第一行第二列替换成23
print(v.numpy())
v[1].assign([1., 2., 3.]) #将矩阵v的第二行替换成(1., 2., 3.)
print(v.numpy())

[[ 2. 4. 6.]
[ 8. 10. 12.]]
[[ 2. 23. 6.]
[ 8. 10. 12.]]
[[ 2. 23. 6.]
[ 1. 2. 3.]]

#如果使用“=”号赋值则会抛出异常

try:
    v[1] = [1., 2., 3.]
except TypeError as ex:
    print(ex)

结果:

‘ResourceVariable’ object does not support item assignment

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值