tensorflow 2.1 常用函数及示例详解(二)

一、where函数

where(x,y,z)
where语句可以用于判定x的真假,若为真返回a,若为假返回b
若x为一个张量,将返回多个元素的张量,如:

 代码:

a = tf.constant([1, 2, 3, 1, 1])
b = tf.constant([0, 1, 3, 4, 5])
c = tf.where(tf.greater(a, b), a, b)  # 若a>b,返回a对应位置的元素,否则返回b对应位置的元素
print("c:", c)

结果: 

 

二、 RandonState函数

RandonState函数可以返回0-1之间的随机数,并可以指定维度和种子seed,如:

 代码:

rdm = np.random.RandomState(seed=1)
a = rdm.rand()
b = rdm.rand(2, 3)
print("a:", a)
print("b:", b)

结果:

三、vstack函数

vstack函数可以将多个数组叠加,形成多维数组

代码:

# vstack函数可以将多个数组叠加,形成多维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.vstack((a, b))
print("c:\n", c)

结果:

 

四、mgrid()函数、raval函数、c_函数

# mgrid()函数的参数可以是任意多个由(起始点:终止点:间隔)组成的数列,并返回等差数列
# 但是返回多个数列的维度相同,维度为= 第一个参数数列元素个数*第二个参数数列元素个数*第三个参数数列元素个数.....
# 如以下例子中,返回的两个矩阵的维度为2*4
# 执行后会生成等间隔数值点,x的一行的数字是相同的,y的一列的数字是相同的
# raval将x, y拉直,并合并配对为二维张量,生成二维坐标点
# c_函数将元素对应组合输出

代码:

# mgrid()函数的参数可以是任意多个由(起始点:终止点:间隔)组成的数列,并返回等差数列
# 但是返回多个数列的维度相同,维度为 : 第一个参数数列元素个数*第二个参数数列元素个数*第三个参数数列元素个数.....
# 如以下例子中,返回的两个矩阵的维度为2*4
# 生成等间隔数值点,x的行是相同的,y的列是相同的
x, y = np.mgrid[1:3:1, 2:4:0.5]
# raval将x, y拉直,并合并配对为二维张量,生成二维坐标点
# c_函数将元素对应组合输出
grid = np.c_[x.ravel(), y.ravel()]
print("x:\n", x)
print("y:\n", y)
print("x.ravel():\n", x.ravel())
print("y.ravel():\n", y.ravel())
print('grid:\n', grid)

结果: 

附:

# 由于迭代到后期寻找最优值的参数变化范围应该较小,如果学习率是静态的话会造成颠簸问题
# 故采用指数下降的学习率比较合适
w = tf.Variable(tf.constant(5, dtype=tf.float32))
epoch = 40
LR_BASE = 0.2  # 最初学习率
LR_DECAY = 0.99  # 学习率衰减率
LR_STEP = 1  # 喂入多少轮BATCH_SIZE后,更新一次学习率
for epoch in range(epoch):  # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环100次迭代。
    lr = LR_BASE * LR_DECAY ** (epoch / LR_STEP)
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导
    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f,lr is %f" % (epoch, w.numpy(), loss, lr))

猜你喜欢

转载自blog.csdn.net/qq_46006468/article/details/119652747
2.1