深入理解多层感知机(MLP):原理与代码解析

news/2024/10/20 6:34:17/

文章目录

  • 1. MLP的原理
    • 1.1 结构
    • 1.2 激活函数
    • 1.3 前向传播
    • 1.4 反向传播算法
  • 2.MLP分类任务应用
  • 3.参考文献:

多层感知机(MLP)是一种经典的神经网络模型,由多个神经元层组成。它的结构和功能使其成为深度学习中的重要组成部分。MLP在各种任务中表现出色,如图像分类、文本分类、预测和回归等。

1. MLP的原理

1.1 结构

MLP由输入层、隐藏层和输出层组成。输入层接收输入数据,隐藏层通过学习特征表示,输出层产生最终的预测结果。隐藏层和输出层的每个神经元都具有激活函数,用于引入非线性映射。
在这里插入图片描述

1.2 激活函数

常用的激活函数包括Sigmoid、ReLU、Tanh等。激活函数的作用是在神经网络中引入非线性性质,使其能够学习复杂的非线性关系。

1.3 前向传播

MLP的前向传播过程即从输入层到输出层的计算过程。它涉及到权重和偏置的计算、激活函数的应用等。通过一个简单的二分类任务为例来演示MLP的前向传播过程。

import numpy as npdef sigmoid(x):return 1 / (1 + np.exp(-x))# MLP的前向传播
def forward_propagation(inputs, weights, biases):hidden_layer = sigmoid(np.dot(inputs, weights[0]) + biases[0])output_layer = sigmoid(np.dot(hidden_layer, weights[1]) + biases[1])return output_layer# 输入数据
inputs = np.array([1, 2, 3])
# 权重和偏置
weights = [np.array([[0.2, 0.3, 0.4], [0.3, 0.4, 0.5]]), np.array([0.5, 0.6])]
biases = [np.array([0.1, 0.2]), np.array([0.3])]# 前向传播计算
output = forward_propagation(inputs, weights, biases)
print("预测结果:", output)

代码中,定义了一个forward_propagation函数,该函数接收输入数据、权重和偏置作为参数,并通过矩阵乘法和激活函数进行前向传播计算。最终输出的output_layer即为MLP的预测结果。

1.4 反向传播算法

反向传播算法是用于训练MLP模型的关键步骤。通过计算梯度来调整权重和偏置,以最小化预测结果与真实结果之间的误差。在本文中,将使用反向传播算法来训练MLP模型并进行分类任务。

2.MLP分类任务应用

使用Python和NumPy库来实现MLP模型,并使用一个简单的数据集进行训练和测试。

import numpy as np# MLP类
class MLP:def __init__(self, num_inputs, num_hidden, num_outputs):self.weights = [np.random.randn(num_inputs, num_hidden), np.random.randn(num_hidden, num_outputs)]self.biases = [np.zeros(num_hidden), np.zeros(num_outputs)]def forward_propagation(self, inputs):hidden_layer = sigmoid(np.dot(inputs, self.weights[0]) + self.biases[0])output_layer = sigmoid(np.dot(hidden_layer, self.weights[1]) + self.biases[1])return output_layerdef train(self, inputs, targets, num_epochs, learning_rate):for epoch in range(num_epochs):# 前向传播output = self.forward_propagation(inputs)# 反向传播error = targets - outputdelta = error * output * (1 - output)hidden_error = np.dot(delta, self.weights[1].T)hidden_delta = hidden_error * hidden_layer * (1 - hidden_layer)# 权重和偏置更新self.weights[1] += learning_rate * np.dot(hidden_layer.T, delta)self.biases[1] += learning_rate * np.sum(delta, axis=0)self.weights[0] += learning_rate * np.dot(inputs.T, hidden_delta)self.biases[0] += learning_rate * np.sum(hidden_delta, axis=0)def predict(self, inputs):output = self.forward_propagation(inputs)return output# Sigmoid激活函数
def sigmoid(x):return 1 / (1 + np.exp(-x))# 数据集
inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
targets = np.array([[0], [1], [1], [0]])# 创建MLP模型
mlp = MLP(num_inputs=2, num_hidden=4, num_outputs=1)# 训练模型
mlp.train(inputs, targets, num_epochs=10000, learning_rate=0.1)# 测试模型
test_inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
predictions = mlp.predict(test_inputs)
print("预测结果:", predictions)

首先定义一个MLP类,其中包含MLP模型的初始化、前向传播、训练和预测方法。我使用一个简单的逻辑门数据集进行训练和测试,其中inputs表示输入数据,targets表示对应的目标结果。通过调用train方法进行训练,并通过调用predict方法进行预测。

3.参考文献:

  1. Bishop, C. M. (1995). Neural Networks for Pattern Recognition. Oxford University Press.
  2. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.

http://www.ppmy.cn/news/381639.html

相关文章

Hadoop面试题十道

问题 1:Hadoop是什么? 答案:Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理。它基于Google的MapReduce和Google文件系统(GFS)的思想,旨在解决大数据量的处理和分析问题。…

2022年「博客之星」参赛博主:落寞的魚丶

诚信五星,五星必回⭐⭐⭐⭐⭐ (https://bbs.csdn.net/topics/611387242?spm1001.2014.3001.6377)诚信五星,五星必回⭐⭐⭐⭐⭐

微博开展营销

如何利用微博开展营销 一、微博主题定位明确做营销,当然是要尽量找到精准的用户,只有精准的用户群,才可以产生效益。那么首先就要分析市场,定位人群。好的定位,能够为微博营销铺好正确道路,方向永远要比方法…

念悠文化:微博运营怎么做?微博运营的几个方法

每个平台自然都有各自的特点,但是还是可以分为用户分析、内容分析、数据分析等,在我们做微博运营之前,需要了解运营思路是什么,弄明白之后就知道下面的每一步应该怎么做了,念悠文化小编总结了微博运营的几个方法&#…

我与博博

我与博博,就是博博与我,我们俩永不分离,他爱我比我爱她爱的更深 ,更专,更彻底,我爱她爱得海枯石烂,她爱我我真的不知道用什么词来形容,反正就是我离不开她,她离不开我&am…

如何运营企业微博

随着微博市场的火速发展越来越的企业开始关注 微博营销,一时间微博成为了新型的营销工具。微博自2009年5月上线后到现在已经有3年的时间了。但是却在互联网及营销领域带来了翻天覆地的变化。

微博营销

昨天京东和苏美两家电器打得不亦乐乎,结果是三方都受益,而更有意思的就是,京东坚决彻底地使用了微博营销策略。再加上一淘的煽风点火,这场大战必定会以三家网站的胜利而告终。 京东在营销方面早就开始注重微博营销了,…