数据分析-深度学习 Tensorflow Day2

# 全0向量矩阵
tf.zeros([2,2,2]), tf.zeros_like(a)
# 全1向量矩阵
tf.ones([2,2,2]), tf.ones_like(a)
# 全50向量矩阵
tf.fill([3,4],50)

为了区分需要计算梯度信息的张量和不需要计算梯度信息的张量。tensorflow中增加了一种专门的数据类型来支持梯度信息的记录:tf.Variable()。

那么为什么要区分需要计算梯度信息的张量和不需要计算梯度信息的张量呢?由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,对于不需要优化的张量,如神经网络的输入X不需要通过tf.Variable封装;相反,需要计算梯度并优化的张量,如神经网络层的W和b,需要通过tf.Variable封装以便TensorFlow跟踪相关梯度信息。

tf.Variable()类型在普通张量类型的基础上添加了name、trainable等属性来支持计算图的构建。

name:用来命名计算图中的变量,这套命名体系是tensorflow内部维护的,一般不需要用户关注

trainable:表征当前张量是否需要被优化。创建Variable对象时默认启用优化标志,也可以设置trainable=False来设置张量不需要优化

tf.Variable()函数可以将普通张量转换为待优化的张量:

a=tf.constant([1,-5,0,5,9])aa=tf.Variable(a)aa.name,aa.trainable

输出为:

('Variable:0',True)

也可以直接创建Variale()张量

a=tf.Variable([[1,2],[3,4]])a

输出为:

<tf.Variable'Variable:0'shape=(2,2)dtype=int32,numpy=array([[1,2],[3,4]])>

待优化张量是普通张量的特殊类型,普通张量其实也可以通过GradientTape.watch()方法临时加入跟踪梯度信息的列表,从而支持自动求导功能。

参数张量

# 切片
x = tf.random.normal([2,3,3,2])
x[0]
x[0,:,:,1].shape
x
# 改变维度
x=tf.range(12)
x=tf.reshape(x,[3,4])
x
# 交换维度
x = tf.random.normal([2,32,32,3])
tf.transpose(x,perm=[0,3,1,2])
# 广播机制
x = tf.random.normal([2,4])
w = tf.random.normal([4,3])
b = tf.random.normal([3])
y = x@w+b
print("x:" ,x)
print("w:" ,w)
print("b:" ,b)
print("y:" ,y)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值