[Deep Learning]——3层神经网络实现、输出层设计

符号解释

 一、前向传播

前向传播:从输入层到输出层,用于求得初始状态下,实际输出和期望输出之间的总误差Δ

import torch
import numpy as np
from matplotlib import pyplot as plt

#sigmoid函数实现
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

#恒等函数
def identity_function(x):
    return x

#进行权重和偏置的初始化
def init_network():
    #使用字典存储网络初始化数据
    network = {}
    #第一层
    network['W1'] = np.array([0.1, 0.3, 0.5], [0.2, 0.4, 0.6])
    network['b1'] = np.array([0.1, 0.2, 0.3])
    #第二层
    network['W2'] = np.array([0.1, 0.4], [0.2, 0.5], [0.3, 0.6])
    network['b2'] = np.array([0.1, 0.2])
    #第三层
    network['W3'] = np.array([0.1, 0.3], [0.2, 0.4])
    network['b3'] = np.array([0.1, 0.2])
    return network

#前向传播
#将输入信号转换为输出信号的处理过程进行封装
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    #网络计算
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = identity_function(a3)
    
    return y

def net_compute():
    network = init_network()
    x = np.array([1.0, 0.5])
    y = forward(network, x)
    print(y)
    

if __name__ == '__main__':
    net_compute()

 二、输出层的设计

神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数

  • 机器学习的问题大致分为 分类问题 和 回归问题
  • 分类问题是数据属于哪一个类别的问题
  • 回归问题是根据某个输入预测一个(连续的)数值的问题 

1、恒等函数

恒等函数会将输入按照原样输出,对于输入信息,不加任何改动地直接输出。因此,在输出层使用恒等函数的时候,输入信号会原封不动地被输出。

2、softmax函数 

函数实现

import torch
import numpy as np
from matplotlib import pyplot as plt

#softmax基础实现
#会出现 溢出问题
def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

#解决溢出问题
def softmax_plus(a):
    C = np.max(a)
    exp_a = np.exp(a - C) #解决溢出问题
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

if __name__ == '__main__':
    #输入大的数字会出现溢出
    print(softmax(np.array([1010, 1000, 990])))
    #解决了溢出问题
    print(softmax_plus(np.array([1010, 1000, 990])))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Star星屹程序设计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值