#待优化张量
#为了区分需要计算梯度信息的张量与不需要计算梯度信息的张量,tf.Variable #tf.Variable类型在普通的张量类型基础上添加name, trainable等属性
#来支持计算图的构建, #name用于计算图中的变量,trainable表征当前张量书否需要被优化
#trainable = False 来设置张量不需要优化
#通过普通张量创建Varible
import tensorflow as tf
a = tf.constant([-1, 0, 1, 2])
aa = tf.Variable(a)
aa.name, aa.trainable
('Variable:0', True)
#直接创建
import tensorflow as tf
a = tf.Variable([[1,2],[3,4]])
print(a)
print(a.trainable)
#待优化张量可视为普通张量的特殊类型,普通张量其实也可以通过
#GradientTape.watch()方法临时加入跟踪梯度信息的列表,从而支持自动求导功能
<tf.Variable 'Variable:0' shape=(2, 2) dtype=int32, numpy=
array([[1, 2],
[3, 4]])>
True
#从数组,列表对象创建张量
import tensorflow as tf
a = tf.convert_to_tensor([1,2.])
b = tf.zeros([2,2])
c = tf.ones([2,2])
print(a)
print(b)
print(c)
d = tf.zeros_like(b)
#创建相似的张量
e = tf.ones_like(c)
print(d)
print(e)
tf.Tensor([1. 2.], shape=(2,), dtype=float32)
tf.Tensor(
[[0. 0.]
[0. 0.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[1. 1.]
[1. 1.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[0. 0.]
[0. 0.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[1. 1.]
[1. 1.]], shape=(2, 2), dtype=float32)
#创建自定义数值张量
#通过tf.fill(shape, value) 可以创建全为自定义数值value的张量
import tensorflow as tf
b = tf.fill([],-1)
c = tf.fill([2],-1)
print(b)
print(c)
tf.Tensor(-1, shape=(), dtype=int32)
tf.Tensor([-1 -1], shape=(2,), dtype=int32)
#创建已知分布的张量
#在卷积神经网络中,卷积张量W初始化为正太分布有利于网络的训练
#在对抗生成网络中,隐藏变量z一般采样自均匀分布
#tf.random.normal(shape, mean = 0.0, stddev = 1.0)可以创建形状为shape,
#均值为mean,标准差为stddev的正太分布N(mean,stddev*stddev)
import tensorflow as tf
a = tf.random.normal([2,2])
b = tf.random.normal([2,2], mean = 1, stddev = 2)
print(a)
print(b)
tf.Tensor(
[[-0.8371254 0.66118824]
[-0.45992622 0.25380087]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[ 0.09488702 0.56210035]
[ 2.963553 -1.3841612 ]], shape=(2, 2), dtype=float32)
#tf.random.uniform(shape, minval = 0, maxval= None, dtype = tf.float32)
#可以创建采样自[minval,maxval]区间的均匀分布的张量
import tensorflow as tf
a = tf.random.uniform([2,2])
b = tf.random.uniform([2,2],maxval = 10)
c = tf.random.uniform([2,2],maxval = 10, dtype = tf.int32)
print(a)
print(b)
print(c)
tf.Tensor(
[[0.9433018 0.31601858]
[0.5897428 0.22913992]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[7.9288673 8.824562 ]
[4.123081 1.0100675]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[5 0]
[3 9]], shape=(2, 2), dtype=int32)
#创建序列
#在循环计算或者对张量进行索引时,经常需要创建一段连续的整型序列
#可以通过tf.range(start, limit, delta = 1)其中[start, limit),步长为delta的序列
import tensorflow as tf
a = tf.range(10, delta = 2)
print(a)
tf.Tensor([0 2 4 6 8], shape=(5,), dtype=int32)