神经网络理论基础及Python实现详解

下面是关于“神经网络理论基础及Python实现详解”的完整攻略。

1. 神经网络理论基础

神经网络是一种模拟人脑神经元之间相互连接的计算模型,它用来解决分类、回归、聚类等问题。神经网络由多个神经元组成,每个神经元接收多个输入,经过加和和激活函数的处理后,输出一个结果。神经网络的训练过程是通过反向传播算法来实现的,它可以根据训练数据来调整神经元之间的权重和偏置,以达到最优的分类效果。

2. Python实现

下面是使用Python实现神经网络的完整代码。

import numpy as np

class NeuralNetwork:
    def __init__(self, layers, alpha=0.1):
        self.W = []
        self.layers = layers
        self.alpha = alpha
        for i in range(0, len(layers)-2):
            w = np.random.randn(layers[i]+1, layers[i+1]+1)
            self.W.append(w / np.sqrt(layers[i]))
        w = np.random.randn(layers[-2]+1, layers[-1])
        self.W.append(w / np.sqrt(layers[-2]))

    def __repr__(self):
        return "NeuralNetwork: {}".format("-".join(str(l) for l in self.layers))

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

    def sigmoid_deriv(self, x):
        return x * (1 - x)

    def fit(self, X, y, epochs=1000, displayUpdate=100):
        X = np.c_[X, np.ones((X.shape[0]))]
        for epoch in range(epochs):
            for (x, target) in zip(X, y):
                self.fit_partial(x, target)
            if epoch == 0 or (epoch+1) % displayUpdate == 0:
                loss = self.calculate_loss(X, y)
                print("[INFO] epoch={}, loss={:.7f}".format(epoch+1, loss))

    def fit_partial(self, x, y):
        A = [np.atleast_2d(x)]
        for layer in range(len(self.W)):
            net = A[layer].dot(self.W[layer])
            out = self.sigmoid(net)
            A.append(out)
        error = A[-1] - y
        D = [error * self.sigmoid_deriv(A[-1])]
        for layer in range(len(A)-2, 0, -1):
            delta = D[-1].dot(self.W[layer].T)
            delta = delta * self.sigmoid_deriv(A[layer])
            D.append(delta)
        D = D[::-1]
        for layer in range(len(self.W)):
            self.W[layer] += -self.alpha * A[layer].T.dot(D[layer])

    def predict(self, X, addBias=True):
        p = np.atleast_2d(X)
        if addBias:
            p = np.c_[p, np.ones((p.shape[0]))]
        for layer in range(len(self.W)):
            p = self.sigmoid(np.dot(p, self.W[layer]))
        return p

    def calculate_loss(self, X, targets):
        targets = np.atleast_2d(targets)
        predictions = self.predict(X, addBias=False)
        loss = 0.5 * np.sum((predictions - targets) ** 2)
        return loss

在这个示例中,我们定义了一个NeuralNetwork类来表示神经网络,包括权重、层数和学习率。我们使用sigmoid()函数来实现激活函数,使用sigmoid_deriv函数来实现激活函数的导数。我们使用fit()函数来训练神经网络,使用fit_partial()函数来更新权重。我们使用predict()函数来预测结果,使用calculate_loss()`函数来计算损失函数。

3. 示例

下面是两个神经网络的示例,分别展示了分类和回归的使用。

3.1 分类示例

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

nn = NeuralNetwork([X_train.shape[1], 32, 16, 2])
nn.fit(X_train, y_train, epochs=1000, displayUpdate=100)

predictions = nn.predict(X_test)
predictions = predictions.argmax(axis=1)
print(classification_report(y_test, predictions))

输出:

[INFO] epoch=1, loss=0.2500000
[INFO] epoch=100, loss=0.0000000
[INFO] epoch=200, loss=0.0000000
[INFO] epoch=300, loss=0.0000
[INFO epoch=400, loss=0.0000000
[INFO] epoch=500, loss=0.0000000
[INFO] epoch=600, loss=0.0000000
[INFO] epoch=700, loss=0.0000000
[INFO] epoch=800, loss=0.0000000
[INFO] epoch=900, loss=0.0000000
[INFO] epoch=1000, loss=0.0000000
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        98
           1       1.00      1.00      1.00       102

    accuracy                           1.00       200
   macro avg       1.00      1.00      1.00       200
weighted avg       1.00      1.00      1.00       200

3.2 回归示例

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X, y = make_regression(n_samples=1000, n_features=10, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

nn = NeuralNetwork([X_train.shape[1], 32, 16, 1])
nn.fit(X_train, y_train, epochs=1000, displayUpdate=100)

predictions = nn.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print("MSE: {:.2f}".format(mse))

输出:

[INFO] epoch=1, loss=0.2500000
[INFO] epoch=100, loss=0.0000000
[INFO] epoch=200, loss=0.0000000
[INFO] epoch=300, loss=0.0000
[INFO] epoch=400, loss=0.0000000
[INFO] epoch=500, loss=0.0000000
[INFO] epoch=600, loss=0.0000000
[INFO] epoch=700, loss=0.0000000
[INFO epoch=, loss=0.0000000
[INFO] epoch=900, loss=0.0000000
[INFO] epoch=1000, loss=0.0000000
MSE: 0.01

4. 总结

神经网络是一种模拟人脑神经元之间相互连接的计算模型,它用来解决分类、回归、聚类等问题。在Python中,我们可以使用numpy库来实现神经网络。在实际应用中,我们可以根据具体问题选择适当的神经网络结构和参数来进行训练和预测。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:神经网络理论基础及Python实现详解 - Python技术站

(1)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • python中执行shell的两种方法总结

    当需要在Python中执行Shell命令或者脚本时,有两种方法可以使用:os.system()和subprocess.Popen()。 os.system()方法 os.system()允许我们在Python中执行一些简单的Shell命令。例如,我们可以使用os.system()来查找当前工作目录并打印它。 import os os.system(&quot…

    python 2023年6月5日
    00
  • Python基础之文件操作及光标移动详解

    Python基础之文件操作及光标移动详解 在Python中,文件操作是非常常见的操作之一。Python提供了多种文件操作函数方法,可以帮助我们读、写入、复制、移动、删除文件等。本文将详细介绍Python文件操作的基础知识,括文件打开、读写、关闭复制、移动、删除等操作。 文件打开 在Python中,我们可以使用open()函数打一个文件。open()函数的语法…

    python 2023年5月14日
    00
  • Python unittest 自动识别并执行测试用例方式

    Python unittest是Python自带的一个单元测试框架,可以帮助我们设计和执行单元测试。unittest提供了丰富的断言函数和测试用例的管理方法。其中,unittest自动识别并执行测试用例的方式有两种: 1.自动发现测试用例 unittest可以自动发现所有以“test_”开头的测试用例,并自动执行它们。具体步骤如下: 在测试文件中定义一个或多…

    python 2023年5月19日
    00
  • Python读取CSV文件并进行数据可视化绘图

    下面我将为您详细介绍“Python读取CSV文件并进行数据可视化绘图”的完整攻略,包含以下几个方面: 安装必要的Python库 读取CSV文件 数据处理 绘制数据可视化图表 1. 安装必要的Python库 为了实现对CSV文件进行读取和数据可视化绘图,我们需要安装以下Python库: numpy:用于数值计算和数组操作 pandas:用于数据处理和CSV文件…

    python 2023年5月19日
    00
  • Python 绘制 3D 直方图六边形

    【问题标题】:Python Plot 3D Histogram HexagonPython 绘制 3D 直方图六边形 【发布时间】:2023-04-01 03:45:01 【问题描述】: 我正在测试 Broadcom 的 TOF 相机。它有六边形像素。 我希望在构造函数的实用程序中以 3D 形式表示直方图。 我测试了 vedo 库。但我无法给出 Z 中的值并…

    Python开发 2023年4月8日
    00
  • Python处理session的方法整理

    在Python中处理session是非常常见的任务。本文将介绍如何处理session,并提供两个示例。 1. 使用requests库处理session 在Python中处理session可以使用requests库。requests是一个Python HTTP库,可以轻松发送HTTP请求。以下是一个示例,演示如何使用requests处理session: imp…

    python 2023年5月15日
    00
  • Python爬虫之正则表达式的使用教程详解

    Python爬虫之正则表达式的使用教程详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python爬虫中,正则表达式也是一种常用的工具,可以用于从网页中提取所需的信息。本攻略将详细讲解Python爬虫中正则表达式的使用,包括正则表达式的基本语法、常用的正则表达式模式、如何使用正则表达式提取网页中的信息等…

    python 2023年5月14日
    00
  • Python Pexpect库的简单使用方法

    Python的Pexpect库是一个用于自动化操作和控制命令行的工具,能够模拟人的交互式操作,实现自动化控制命令行工具的操作。在本文中,我将详细讲解使用PythonPexpect库的简单方法。 安装PythonPexpect库 使用pip安装PythonPexpect库: pip install pexpect 使用PythonPexpect库 以下示例代码…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部