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

yizhihongxing

下面是关于“神经网络理论基础及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自动化办公之Word文件内容的读取

    非常感谢您对 Python 自动化办公的关注!这里提供一份关于 Word 文件内容读取的 完整攻略,希望能对您有所帮助。 前置知识 在 Python 中读取 Word 文件,我们需要用到 python-docx 库进行处理。因此,您需要先安装该库(可以使用 pip 工具进行安装)。 !pip install python-docx 读取 Word 文件内容 …

    python 2023年6月2日
    00
  • Python时间获取及转换知识汇总

    Python时间获取及转换知识汇总 时间在Python中是一个很重要的概念,尤其在处理数据和文件时,时间的转换和计算都是必不可少的。本文将详细介绍Python中获取时间、时间格式化、时间转换等相关知识点,希望能够帮助读者快速掌握这些技能。 1. 时间获取 获取当前时间可以使用Python内置的datetime模块中的datetime类,代码如下: from …

    python 2023年6月2日
    00
  • 简单的命令查看安装的python版本号

    当我们安装Python后,我们需要查看其版本号,以便确保我们使用的是我们需要的版本。以下是查看安装的Python版本号的常用方法。 方法一:命令行查看 打开命令行界面,输入以下命令可以查看当前系统中安装的Python版本: python –version 执行完此命令后,输出信息会显示当前系统中安装的Python版本号,例如: Python 3.8.5 方…

    python 2023年6月3日
    00
  • Python爬取商家联系电话以及各种数据的方法

    在本攻略中,我们将介绍如何使用Python爬取商家联系电话以及各种数据。以下是一个完整攻略,包括两个示例。 步骤1:确定目标网站 首先,我们需要确定目标网站,以便爬取商家联系电话以及各种数据。我们可以使用Python的requests库来获取网页内容,使用BeautifulSoup库来解析HTML文档。 步骤2:分析网页结构 接下来,我们需要分析目标网站的网…

    python 2023年5月15日
    00
  • Python小白必备的8个最常用的内置函数(推荐)

    Python小白必备的8个最常用的内置函数(推荐) Python作为当前最为火热的编程语言之一,有着庞大且强大的函数库,其中内置函数就是最常用的一种。本文将介绍Python小白必须掌握的8个最常用的内置函数。 1. print() print() 是Python中最基本的输出函数,可以将任何类型的数据输出到控制台。 示例代码: print("Hel…

    python 2023年5月20日
    00
  • Python进行密码学反向密码教程

    Python进行密码学反向密码教程 本教程将介绍如何使用Python进行密码学反向密码。通过本教程,您将了解基本的密码学概念以及如何使用Python语言来编写程序来对密码进行反向分析。 什么是密码学反向密码? 密码学反向密码是一种通过猜测密码、穷举密码、绕过密码或者对密码进行加密解密操作来获取或者更改加密信息的技术。密码学反向密码是黑客攻击和网络安全测试中非…

    python 2023年6月5日
    00
  • python第三方库pygame的使用详解

    Python第三方库pygame的使用详解 什么是pygame pygame是一款Python第三方库,它是专为Python语言编写的多媒体库,用于开发2D游戏和多媒体应用程序,它提供了丰富的API,让开发者可以很轻松地创建各种复杂的游戏和多媒体应用。 安装pygame 在Windows系统下,可以使用以下命令安装pygame: pip install py…

    python 2023年5月13日
    00
  • python实现中文输出的两种方法

    这里就为你详细讲解一下Python实现中文输出的两种方法,包含两个示例。 方法一:使用unicode字符串 在Python 2中,可以使用unicode字符串来输出中文。 首先在文件开头添加 # coding=utf-8,表示该文件使用utf-8编码。 然后使用u前缀来标记一个字符串为unicode字符串,例如: # coding=utf-8 name = …

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