一、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))