神经网络复杂度、激活函数、损失函数

1.神经网络复杂度

神经网络的复杂度基本都是用NN层数和NN参数的个数表示

空间复杂度:

  • 层数=隐藏层的层数+1个输出层,下图为2层的NN

    

  •  总参数 = 总w + 总b

     上图第一层:3x4+4个参数(三个输入,4个神经元,4个偏置b)   

     上图第二层:4x2+2

     所以总参数是:3x4+4+4x2+2=26

时间复杂度:

     乘加运算次数

左图:3x4+4x2=20

2.参数迭代更新

 学习率小了训练很慢,学习率大了会跳过最优解。因此可以选取指数衰减学习率

指数衰减学习率:

可以先用较大的学习率,快速得到较优解,然后逐步减小学习率,使得模型在训练后期稳定。

指数衰减学习率 = 初始学习率 * 学习率衰减率(当前轮数  / 多少轮衰减一次)

 3.激活函数

3.1Sigmioid函数

3.2Tanh函数

 3.3relu函数

 3.4总结

对于初学者建议:

  • 首选relu激活函数
  • 学习率设置较小值
  • 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布
  • 初始参数中心化,即让随机生成的参数满足以0为均值,根号(2 / 当前层输入特征个数)为标准差的正态分布

 4.损失函数

损失函数是指预测值(y)与已知答案(y_)的差距

 5.案例

预测酸奶日销量y,x1、x2是影响日销量的因素。

建模前,应预先采集的数据有:每日x1、x2和销量y_(即已知答案,最佳情况:产量=销量)

拟造数据集X,Y_:y_ = x1+x2.噪声:-0.05~+0.05

import tensorflow as tf
import numpy as np

SEED = 23455

rdm = np.random.RandomState(seed=SEED)  # 生成[0,1)之间的随机数
x = rdm.rand(32, 2)
# print(x)
y_ = [[x1 + x2 + (rdm.rand() / 10 - 0.05)] for (x1, x2) in x]  # y再加上一个生成的噪声[0,1)/10 = [0, 0.1)
x = tf.cast(x, dtype=tf.float32)

w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))

epoch = 1500
lr = 0.002

for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y = tf.matmul(x, w1)
        loss_mse = tf.reduce_mean(tf.square(y_ - y))

    grads = tape.gradient(loss_mse, w1)
    w1.assign_sub(lr * grads)

    if epoch % 50 == 0:
        print("After %d training steps, w1 is " %(epoch))
        print(w1.numpy(), "\n")

print("Final w1 is:", w1.numpy())

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI炮灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值