从零开始实现神经网络(一)_NN神经网络

本文介绍了神经网络的基本组成部分,包括神经元的工作原理、权重和偏置的作用,以及激活函数如Sigmoid的应用。通过前馈过程和反向传播算法,展示了如何训练神经网络以最小化损失,如使用均方误差(MSE)作为目标。
该文章已生成可运行项目,

参考文章:神经网络介绍

一、神经元

        这一神经网络的基本单元,神经元接受输入,对它们进行一些数学运算,并产生一个输出。

这里有三步。

        首先,将每个输入(X1)乘以一个权重

        x_1 * w_1

        x_2 * w_2

        接下来,将所有加权输入与偏置相加:

        ( x_1 * w _1 ) + ( x_2 * w_2 ) + b

        最后,总和通过激活函数传递:

        y = f(w_1*x_1 + w_2 * x_2 + b)

激活函数

激活函数用于将无界输入转换为具有良好、可预测形式的输出。

常用的激活函数sigmoid

你可以把它想象成,压缩零到负无穷的数字到[-1,0],压缩0到正无穷的数字到[0,1]

举个例子:

        这里写成向量形式,假设权重W = {w1,w2} = {0,1},输入X = {x1,x2} = {2,3},偏置b为1。

        那么有一下计算:

        (X\cdot W ) + b = ( x_1 * w _1 ) + ( x_2 * w_2 ) + b

                                = 0 * 2 +1*3 +4

                                =7

        y = f(w_1*x_1 + w_2 * x_2 + b) = f(7) = 0.9999

下面来实现下代码:

import numpy as np

def sigmoid(x):
  # Our activation function: f(x) = 1 / (1 + e^(-x))
  return 1 / (1 + np.exp(-x))

class Neuron:
  def __init__(self, weights, bias):
    self.weights = weights
    self.bias = bias

  def feedforward(self, inputs):
    # Weight inputs, add bias, then use the activation function
    total = np.dot(self.weights, inputs) + self.bias
    return sigmoid(total)

weights = np.array([0, 1]) # w1 = 0, w2 = 1
bias = 4                   # b = 4
n = Neuron(weights, bias)

x = np.array([2, 3])       # x1 = 2, x2 = 3
print(n.feedforward(x))    # 0.9990889488055994

二. 将神经元组合成神经网络

        神经网络只不过是一堆连接在一起的神经元。下面是一个简单的神经网络的样子:

该网络有 2 个输入(x1和x2),一个带有 2 个神经元的隐藏层 (ℎ1​和ℎ2​),以及具有 1 个神经元 (o1​).请注意,输入o1​是来自ℎ1​和h2​- 这就是使它成为一个网络的原因。

隐藏层是输入(第一层)和输出(最后一层)之间的任何。可以有多个隐藏层!

示例:前馈

让我们使用上图的网络,并假设所有神经元具有相同的权重w=[0,1],相同的偏差b=0,以及相同的 S 形激活函数。让h1​,h2​,o1​表示它们所代表的神经元的输出

如果我们传入输入会发生什么x=[2,3]?

用于输入的神经网络的输出x=[2,3]是0.7216很简单,对吧?

神经网络可以有任意数量的,这些层中可以有任意数量的神经元。基本思想保持不变:通过网络中的神经元向前馈送输入,以在最后获得输出。为简单起见,在本文的其余部分,我们将继续使用上图的网络。

神经网络的代码实现:

import numpy as np

# ... code from previous section here

class OurNeuralNetwork:
  '''
  A neural network with:
    - 2 in
本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ourkix

如果文章有所帮助可以请我喝咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值