*05 ***** 例子:前馈
我们继续用前面图中的网络,假设每个神经元的权重都是 ,截距项也相同 ,激活函数也都是S型函数。分别用,表示相应的神经元的输出。
当输入时,会得到什么结果?
这个神经网络对输入的输出是0.7216,很简单。
一个神经网络的层数以及每一层中的神经元数量都是任意的。基本逻辑都一样:输入在神经网络中向前传输,最终得到输出。接下来,我们会继续使用前面的这个网络。
***06 ***编码神经网络:前馈
接下来我们实现这个神经网络的前馈机制,还是这个图:
import numpy as np
# ... code from previous section here
classOurNeuralNetwork:
'''
A neural network with:
- 2 inputs
- a hidden layer with 2 neurons (h1, h2)
- an output layer with 1 neuron (o1)
Each neuron has the same weights and bias:
- w = [0, 1]
- b = 0
'''
def__init__(self):
weights = np.array([0, 1])
bias = 0
# 这里是来自前一节的神经元类
self.h1 = Neuron(weights, bias)
self.h2 = Neuron(weights, bias)
self.o1 = Neuron(weights, bias)
deffeedforward(self, x):
out_h1 = self.h1.feedforward(x)
out_h2 = self.h2.feedforward(x)
# o1的输入是h1和h2的输出
out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))
return out_o1
network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421
结果正确,看上去没问题。
***07 ***训练神经网络 第一部分
现在有这样的数据:
接下来我们用这个数据来训练神经网络的权重和截距项,从而可以根据身高体重预测性别:
我们用0和1分别表示男性(M)和女性(F),并对数值做了转化:
我这里是随意选取了135和66来标准化数据,通常会使用平均值。
***08 ***损失
在训练网络之前,我们需要量化当前的网络是『好』还是『坏』,从而可以寻找更好的网络。这就是定义损失的目的。
我们在这里用平均方差(MSE)损失: ,让我们仔细看看:
- 是样品数,这里等于4(Alice、Bob、Charlie和Diana)。
- 表示要预测的变量,这里是性别。
- 是变量的真实值(『正确答案』)。例如,Alice的就是1(男性)。
- 变量的预测值。这就是我们网络的输出。
被称为方差(squared error)。我们的损失函数就是所有方差的平均值。预测效果越好,损失就越少。
更好的预测 = 更少的损失!
训练网络 = 最小化它的损失。
*09 ***** 损失计算例子
假设我们的网络总是输出0,换言之就是认为所有人都是男性。损失如何?
***10 ***代码:MSE损失
下面是计算MSE损失的代码:
import numpy as np
defmse_loss(y_true, y_pred):
# y_true and y_pred are numpy arrays of the same length.
return ((y_true - y_pred) ** 2).mean()
y_true = np.array([1, 0, 0, 1])
y_pred = np.array([0, 0, 0, 0])
print(mse_loss(y_true, y_pred)) # 0.5
如果你不理解这段代码,可以看看NumPy的快速入门中关于数组的操作。
好的,继续。
-
神经网络
+关注
关注
42文章
4771浏览量
100739 -
神经元
+关注
关注
1文章
363浏览量
18450 -
python
+关注
关注
56文章
4795浏览量
84646
发布评论请先 登录
相关推荐
评论