用 Python 从零开始创建神经网络(一):编码我们的第一个神经元

devtools/2024/11/13 16:11:06/

编码我们的第一个神经元

  • 引言
  • 1. A Single Neuron:
    • Example 1
    • Example 2
  • 2. A Layer of Neurons:
    • Example 1

引言

本教程专为那些对神经网络已有基础了解、但尚未动手实践过的读者而设计。尽管网上充斥着各种教程,但很多内容要么过于简略,要么直接进入高级主题,让初学者难以跟上。本指南将带领你从零开始,用 Python 构建一个简单的神经网络模型,逐步拆解每一步,帮助你真正理解神经网络的工作原理,为今后的深入学习打下坚实基础。

1. A Single Neuron:

最简单基础的单个神经元:

Example 1

python">inputs = [1, 2, 3]
weights = [0.2, 0.8, -0.5]
bias = 2
output = (inputs[0]*weights[0] + inputs[1]*weights[1] + inputs[2]*weights[2] + bias)
print("output:", output)
python">>>>
output: 2.3

在这里插入图片描述
代码的可视化:https://nnfs.io/bkr/

Example 2

python">inputs = [1.0, 2.0, 3.0, 2.5]
weights = [0.2, 0.8, -0.5, 1.0]
bias = 2.0
output = (inputs[0]*weights[0] +inputs[1]*weights[1] +inputs[2]*weights[2] +inputs[3]*weights[3] + bias)
print(output)
python">>>>
output: 2.3
output: 4.8

在这里插入图片描述
代码的可视化:https://nnfs.io/djp/

2. A Layer of Neurons:

一层神经元:


Example 1

假设我们有这样一个场景:一层有 3 个神经元,4 个输入。

python">inputs = [1, 2, 3, 2.5]weights1 = [0.2, 0.8, -0.5, 1]
weights2 = [0.5, -0.91, 0.26, -0.5]
weights3 = [-0.26, -0.27, 0.17, 0.87]bias1 = 2
bias2 = 3
bias3 = 0.5outputs = [# Neuron 1:inputs[0]*weights1[0] +inputs[1]*weights1[1] +inputs[2]*weights1[2] +inputs[3]*weights1[3] + bias1,# Neuron 2:inputs[0]*weights2[0] +inputs[1]*weights2[1] +inputs[2]*weights2[2] +inputs[3]*weights2[3] + bias2,# Neuron 3:inputs[0]*weights3[0] +inputs[1]*weights3[1] +inputs[2]*weights3[2] +inputs[3]*weights3[3] + bias3]print("outputs:", outputs)
python">>>>
outputs: [4.8, 1.21, 2.385]

在这里插入图片描述

代码的可视化:https://nnfs.io/mxo/

在这段代码中,我们有三组权重和三个偏差,它们定义了三个神经元。每个神经元都“连接”到相同的输入。不同之处在于每个神经元对输入应用的权重和偏差是分开的。这称为全连接神经网络——当前层的每个神经元都与前一层的每个神经元相连。这是一种非常常见的神经网络类型,但应该注意,并非一定要像这样完全连接。到目前为止,我们只展示了一个包含很少神经元的单层的代码。想象一下编码更多层和更多神经元,这将变得非常具有挑战性。相对于使用我们当前的方法,我们可以使用循环来扩展并动态处理输入和层的大小。我们已将分开的权重变量转换为一个权重列表,这样我们可以遍历它们,并且我们改变了代码使用循环而不是硬编码的操作。

python">inputs = [1, 2, 3, 2.5]
weights = [[0.2, 0.8, -0.5, 1],[0.5, -0.91, 0.26, -0.5],[-0.26, -0.27, 0.17, 0.87]]
biases = [2, 3, 0.5]# Output of current layer
layer_outputs = []
# For each neuron
for neuron_weights, neuron_bias in zip(weights, biases):# Zeroed output of given neuronneuron_output = 0# For each input and weight to the neuronfor n_input, weight in zip(inputs, neuron_weights):# Multiply this input by associated weight# and add to the neuron’s output variableneuron_output = neuron_output + n_input*weight# Add biasneuron_output = neuron_output + n_input*weight# Put neuron’s result to the layer’s output listlayer_outputs.append(neuron_output)print("layer_outputs:", layer_outputs)print(list(zip(weights, biases)))
print(list(zip(weights, biases))[0])
print(type(list(zip(weights, biases))[0]))
python">>>>
layer_outputs: [4.8, 1.21, 2.385][([0.2, 0.8, -0.5, 1], 2), ([0.5, -0.91, 0.26, -0.5], 3), ([-0.26, -0.27, 0.17, 0.87], 0.5)]
([0.2, 0.8, -0.5, 1], 2)
<class 'tuple'>

这做的和之前一样,只是以一种更动态和可扩展的方式。如果你在某个步骤感到困惑,可以打印print()出对象来看看它们是什么以及发生了什么。zip()函数让我们能够同时迭代多个可迭代对象(在这种情况下是列表)。再次说明,我们所做的就是,对每个神经元(上述代码中的外层循环,遍历神经元的权重和偏差),取每个输入值与该输入相关联的权重相乘(上述代码中的内层循环,遍历输入和权重),将所有这些相加,然后在最后加上一个偏差。最后,将神经元的输出发送到层的输出列表中。


http://www.ppmy.cn/devtools/133695.html

相关文章

SpringBoot开发——整合OAuth2 安全授权框架

文章目录 一、OAuth2 客户端配置二、OpenID Connect 支持三、自定义重定向 URI四、OAuth2 资源服务器配置五、OAuth2 授权服务器配置六、生产环境中的最佳实践总结在现代应用程序开发中, OAuth2 成为了一种主流的授权框架,广泛用于安全地访问用户数据和资源。 Spring Boot …

密码学知识点整理一:密码学概论

密码学是什么&#xff1f; 密码学是一门研究编制密码和破译密码的技术科学。 密码学&#xff0c;作为信息安全的核心技术之一&#xff0c;其重要性在于能够为信息传输提供安全保障&#xff0c;确保数据在存储或传输过程中的机密性、完整性与真实性不被破坏。从古至今&#x…

Sequelize+Sqlite3使用示例

以下是一个简单的示例&#xff0c;展示了如何在Node.js中使用Express框架、Sequelize ORM以及SQLite数据库来构建一个支持RESTful API的Web应用程序。 一&#xff0c;安装必要的npm包&#xff1a; npm install express sequelize sqlite3 body-parser 二&#xff0c;创建Jav…

设计定长的内存池

目录 定长内存池设计设计思路具体实现定长内存池初始化T*New()申请内存代码 void Delete(T* obj)回收内存代码 设计的总代码测试代码 Objectpool.h文件代码test.cpp文件代码拓展windows和Linux下如何直接向堆申请页为单位的大块内存&#xff1a; 感谢各位大佬对我的支持,如果我…

19. 异常处理

一、什么是异常 程序在运行过程之中&#xff0c;不可避免的出现一些错误&#xff0c;比如&#xff1a;使用了没有赋值的变量、使用了不存在的索引、除 0 等等。这些错误在程序中&#xff0c;我们称之为异常。程序运行过程中&#xff0c;一旦出现异常将会导致程序立即终止&#…

A027-基于Spring Boot的农事管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

第十五届蓝桥杯C/C++B组题解——数字接龙

题目描述 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上角 (0, 0) 处出发&#xff0c;目标是到达右下角 (N − 1, N …