# 【Python 初学者】从零开始构建自己的神经网络

*

## ; 什么是神经网络？

• 输入层x
• 任意数量的 隐藏层
• 一个 输出层，ŷ
• 每层W 和 b之间的一组 权重偏差
• 每个隐藏层的激活函数选择 σ。在本教程中，我们将使用 Sigmoid 激活函数。

class NeuralNetwork:
def __init__(self, x, y):
self.input      = x
self.weights1   = np.random.rand(self.input.shape[1],4)
self.weights2   = np.random.rand(4,1)
self.y          = y
self.output     = np.zeros(y.shape)

## 训练神经网络

• 计算预测输出ŷ，称为前馈
• 更新权重和偏差，称为反向传播

## ; 前向传播

class NeuralNetwork:
def __init__(self, x, y):
self.input      = x
self.weights1   = np.random.rand(self.input.shape[1],4)
self.weights2   = np.random.rand(4,1)
self.y          = y
self.output     = np.zeros(self.y.shape)
# 前向反馈
def feedforward(self):
self.layer1 = sigmoid(np.dot(self.input, self.weights1))
self.output = sigmoid(np.dot(self.layer1, self.weights2))

## ; 反向传播

class NeuralNetwork:
def __init__(self, x, y):
self.input      = x
self.weights1   = np.random.rand(self.input.shape[1],4)
self.weights2   = np.random.rand(4,1)
self.y          = y
self.output     = np.zeros(self.y.shape)

def feedforward(self):
self.layer1 = sigmoid(np.dot(self.input, self.weights1))
self.output = sigmoid(np.dot(self.layer1, self.weights2))

def backprop(self):
# application of the chain rule to find derivative of the loss function with respect to weights2 and weights1
d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))
d_weights1 = np.dot(self.input.T,  (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))

# 用损失函数的导数（斜率）更新权重
self.weights1 += d_weights1
self.weights2 += d_weights2

## 完整应用

coding=gbk
"""

@时间  : 2022/11/23 15:36
"""
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
return 1.0 / (1 + np.exp(-x))

#
def sigmoid_derivative(x):
return x * (1.0 - x)

def compute_loss(y_hat, y):
return ((y_hat - y)**2).sum()

class NeuralNetwork:
def __init__(self, x, y):
self.input = x
# 它为每个输入创建 4 个介于 0 和 1 之间的随机数
self.weights1 = np.random.rand(self.input.shape[1], 4)
self.weights2 = np.random.rand(4, 1)
self.y = y
self.output = np.zeros(self.y.shape)

def feedforward(self):
self.layer1 = sigmoid(np.dot(self.input, self.weights1))
self.output = sigmoid(np.dot(self.layer1, self.weights2))

def backprop(self):
# application of the chain rule to find derivative of the loss function with respect to weights2 and weights1
d_weights2 = np.dot(self.layer1.T, (2 * (self.y - self.output) * sigmoid_derivative(self.output)))
d_weights1 = np.dot(self.input.T, (np.dot(2 * (self.y - self.output) * sigmoid_derivative(self.output),
self.weights2.T) * sigmoid_derivative(self.layer1)))

# update the weights with the derivative (slope) of the loss function
self.weights1 += d_weights1
self.weights2 += d_weights2

if __name__ == "__main__":
X = np.array([[0, 0, 1],
[0, 1, 1],
[1, 0, 1],
[1, 1, 1]])
y = np.array([[0], [1], [1], [0]])
nn = NeuralNetwork(X, y)

loss_values = [] # 记录loss列表
for i in range(1500):
nn.feedforward()
nn.backprop()
loss = compute_loss(nn.output, y) # 计算loss
loss_values.append(loss)

print(nn.output) # 输出
print(f" final loss : {loss}") # 最终loss
plt.plot(loss_values) # 可视化loss变化
plt.show()

## 提问

• 除了 Sigmoid 函数，我们还可以使用什么激活函数？
• 如何训练神经网络时使用学习率？
• 如何使用卷积进行图像分类任务？

## 结束语

Original: https://blog.csdn.net/weixin_46211269/article/details/128000545
Author: 川川菜鸟
Title: 【Python 初学者】从零开始构建自己的神经网络

(0)

### 大家都在看

Python 2023年8月14日
0122
• #### 工业软件技术的总结和开发方向

以前总结了一回工业应用的技术栈方向，生成了一个技术导图已经做了罗列规划，内容也基本上包含了普通应用所需要的大部分方面，当然可能对于个人的技术见识来说会有遗漏空缺，这个还需要到具体项…

Python 2023年6月3日
0142
• #### 两个库搞定python中引用javascript代码块/文件

在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件，比如：爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。 【阅读全文】 在py…

Python 2023年11月2日
0113
• #### matplotlib 设置手动设置图例的位置大小

如果你的英语好，可以看官网，官网写的很详细 matplotlib.legend — Matplotlib 3.6.2 documentation 图例背景\位置\大小 plt.le…

Python 2023年9月3日
0134
• #### 【设计模式】我终于读懂了外观模式。。。

今天是正月初二，在这里给大家拜年啦！祝愿大家： 兔年大吉大利，兔年顺顺利利，兔年快快乐乐，兔气十足十足，兔年富富满堂，兔年财源广进，兔年步步高升，兔年梦想成真！ 文章目录 * &#…

Python 2023年11月5日
099
• #### Python学生管理系统【原码+实现过程】

在面向对象编程思想完成学员管理系统的开发 学生的信息要实现永久化保存 系统要有如下功能： 添加学生信息 修改学生信息 查询学生信息 显示所有学生信息 退出系统并保存学生信息 我们需…

Python 2023年8月2日
0120
• #### Python的一些函数用法

画盒图 box_1, box_2, box_3= Z_Acol[“Y”], Z_Bcol[“Y”], Z_Ccol[“Y…

Python 2023年8月28日
0135
• #### Python开发一个滑雪小游戏

大家好，我是黑哥喜欢欺负超人的那个黑哥擅长领域：Python开发一个小游戏今日重点：一步步分析and越过亚马逊的反爬虫机制 不一会，游戏写好了效果是这样的 ; 一、如何搭建开发环境…

Python 2023年9月23日
083
• #### 【pyhton解决数学问题】2用python解方程

目录 1Sympy的基本概念 1符号计算 2计算机代数系统 3实际解方程 1把未知数设为符号 2用solve（）解方程 1解一元一次方程 2解二元一次方程组 3解决一元二次方程 总…

Python 2023年8月2日
0137
• #### python数据分析三剑客之numpy

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

Python 2023年8月30日
0117
• #### scrapy 框架body/formdata的使用

一、前言 你是否又遇到scrapy框架中FormRequests的参数选择？ formdata还是 body? 遇到下面这样的网页，你该如何选择参数导入呢？ 注意对比红色框框内的区…

Python 2023年10月3日
0101
• #### gateway中的限流与熔断

目录 1. 限流的使用场景 2. gateway限流实现 2.1 前提： 2.2 导入依赖包 2.3 在项目配置文件中配置redis 2.4 开发限流需要的Bean 2.5 为服务…

Python 2023年10月24日
0120
• #### Python | Pandas数据清洗与画图

准备数据 2016年北京PM2.5数据集数据源说明：美国驻华使馆的空气质量检测数据 数据清洗 1. 导入包 import numpy as np import matplotlib…

Python 2023年8月7日
0119
• #### python学习：各种推导式玩法-推导式套路

除了最简单的列表推导式和生成器表达式，其实还有字典推导式、集合推导式等等。 下面是一个以列表推导式为例的推导式详细格式，同样适用于其他推导式。 variable = [out_ex…

Python 2023年6月9日
0118