机器学习(三)——预备知识(学习率与激活函数)

预备知识

import tensorflow as tf
import numpy as np
# a = tf.constant([1,3,2,2,5])
# b = tf.constant([0,4,1,1,6])
# c = tf.where(tf.greater(a,b), a, b)#tf.where 若a > b则返回a, 否则返回b
# print("c:", c)

# rdm = np.random.RandomState(seed=1)#seed等于常数是使得每次产生的随机数相同
# a = rdm.rand()##不给参数,默认生成一个0到1之间的随机数
# b = rdm.rand(3,4)##生成一个二维的
# print(a)
# print(b)

# a = np.array([1,2,3])
# b = np.array([4,5,6])
# c = np.vstack((a,b))#纵向叠加
# d = np.hstack((a,b))#横向叠加
# print(c)
# print(d)

x,y = np.mgrid[1:3:1, 2:4:0.5]#1是起始, 到3不包含3,步长为1 后面的一样,返回一个二维的,列要保持一致
###.ravel()将其拉直为一维数组   c_将两个数组配成对输出
grid = np.c_[x.ravel(), y.ravel()]
print("x:", x)
print("y:", y)
print("grid:\n", grid)

学习率

###指数衰减学习率
#可以先用较大的学习率,快速得到较优解,然后逐步减小学习率,使模型在训练后期稳定
#指数衰减学习率 = 初始学习率 * 学习衰减率(当前轮数 / 多少轮衰减一次)
import tensorflow as tf
epoch = 20
lr_base = 0.2
lr_decay = 0.99
lr_step = 1
for epoch in range(epoch):
    lr = lr_base * lr_decay ** (epoch / lr_step)
    with tf.GradientTape() as tape:
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)
    w.assign_sub(lr * grads)
    print("After %s epoch, w is %f, loss is %f, lr is %f"%(epoch, w.numpy(), loss, lr))

激活函数

import tensorflow as tf
###sigmoid函数,能归一化数据
#特点 1.易造成梯度消失 2.输出非0均值收敛慢 3.幂运算复杂,训练时间长
tf.nn.sigmoid()

###tanh函数 特点1.输出是0均值 2.易造成梯度消失 3.幂运算复杂,训练时间长
tf.nn.tanh()

###relu函数 x < 0时输出0 x >= 0时 输出x
#优点 1.解决了梯度消失问题 2.只需要判断输入是否大于0, 计算速度快 3.收敛速度远大于sigmoid与tanh
#缺点 1.输出非0均值,收敛慢 2.Dead ReIU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新
tf.nn.relu

###leaky_relu,relu的升级版,但在实际操作中不一定比relu好

你可能感兴趣的:(机器学习,机器学习,tensorflow,python)