「机器学习」神经网络代码细节

神经网络的工作原理请见 上一篇博客​​​​​​​

一、实现神经网络

1. 代码实现

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential ([                               # 计算推理
    Dense (units=25, activation='sigmoid')
    Dense (units=15, activation='sigmoid')
    Dense (units=1, activation= 'sigmoid')])
​
from tensorflow.keras.losses import BinaryCrossentropy
model.compile(loss=BinaryCrossentropy())            # 使用特定的损失函数编译模型
model.fit(X, Y, epochs=100)                  # 训练模型,epochs表示梯度下降的训练次数

2. 训练细节

(1) 训练步骤

  1. 定义模型 (逻辑回归函数)

    给定输入 x 和参数 w 和 b,指定如何计算输出 : f_{w,b}(x) = ?

    model = Sequential([
      Dense(units=25, activation='sigmoid')
      Dense(units=15, activation='sigmoid')
      Dense(units=1, activation='sigmoid')
    ])
  2. 指定损失函数和成本函数
    model.compile(loss = BinaryCrossentropy())              # 分类问题

    model.compile(loss = MeanSquaredError())                # 回归问题
  3. 梯度下降法最小化 J(w)
    model.fit(X, y, epochs=100)

    fit() 使用反向传播计算偏导数值;x、y 为训练集

二、激活函数

1. 常见的激活函数

(1) sigmoid

(2) ReLU

(3) 线性激活函数

2. 选择激活函数

取决于具体的目标 y 值是什么

(1) 对于隐藏层

最常见的选择: ReLU 激活函数

  • 原因:
    • ReLU 计算速度更快

    • ReLU 只在负数部分平整,sigmoid 在正负两端都有平整的部分

      平整则坡度小,梯度下降的学习速度慢

(2) 对于输出层

  • 分类问题:

    sigmoid 激活函数

  • 回归问题:

    线性激活函数

  • y 值只能取非负数:

    ReLU 激活函数

(3) 代码实现

from tf.keras.layers import Dense
model = Sequential([
  Dense(units=25, activation='relu'),     #layerl
  Dense(units=15, activation='relu'),     #layer2
  Dense(units=1, activation='sigmoid')    #layer3   or 'linear' or 'relu'
])

3. 激活函数的重要性

线性函数的线性函数依然是线性函数,即使神经网络有多层,依然不会让神经网络学习更复杂的特征。

若隐藏层和输出层均采用线性激活函数,模型的输出完全等价于线性回归的输出。

若隐藏层采用线性激活函数,输出层采用 sigmoid 激活函数,模型的输出等价于逻辑回归的输出。

【注】因此,不要再神经网络的隐藏层使用线性回归模型。(建议使用 ReLU)

  1. 用机器学习的视角来理解的话,去除激活函数的神经网络就像是支持向量机一样,加上这个激活函数就像是加上了支持向量机的核函数,将其映射到了一个线性可分的空间。
  2. 我们的神经网络如果不包括激活函数的话,那么单纯是一个矩阵的连乘法,那么仅仅是线性变换,因此我们需要引入非线性的部分来使之可以拟合任意函数。
  3. 如果按照本课程的逻辑来讲,不包含激活函数的神经网络就是特征空间中的一个超平面,因此数据集必须线性可分,为了让数据集线性可分,我们使用激活函数这个非线性的函数对数据集进行映射。
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值