谁提出的全连接神经网络
  ksyyEx5xKXha 2023年12月08日 17 0

全连接神经网络的提出与应用

简介

全连接神经网络(Fully Connected Neural Network),又称多层感知器(Multilayer Perceptron,MLP),是一种人工神经网络的基本结构。它由多个神经元按层组成,各层之间的神经元相互连接。全连接神经网络被广泛应用于机器学习和深度学习领域,具有强大的模式识别和分类能力。

历史

全连接神经网络最早由美国心理学家Frank Rosenblatt在20世纪50年代提出。Rosenblatt设计了一种被称为感知器(Perceptron)的神经网络结构,使用了全连接的方式连接输入层和输出层的神经元。感知器的提出标志着神经网络的初步发展。

结构与原理

全连接神经网络由多个层次组成,包括输入层、隐藏层和输出层。每个层次由多个神经元构成,相邻层次之间的神经元通过连接权重进行连接。

输入层

输入层是神经网络的输入接口,接受外部输入的数据。每个神经元代表一个特征或属性。

隐藏层

隐藏层是连接输入层和输出层的中间层。每个隐藏层神经元接收上一层的输出,并通过激活函数处理后传递给下一层。

输出层

输出层是神经网络的输出接口,输出最终的结果。每个输出神经元代表一个类别或值。

权重与偏置

每个连接都有一个权重,表示神经元之间的连接强度。权重的大小决定了信号在神经网络中传递的重要性。每个神经元还有一个偏置,用于调整神经元的激活阈值。

激活函数

激活函数将输入信号转换为输出信号。常见的激活函数有sigmoid、ReLU、tanh等。

代码示例

import numpy as np

class FullyConnectedNN:
    def __init__(self, input_size, hidden_size, output_size):
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.output_size = output_size
        
        self.W1 = np.random.randn(self.input_size, self.hidden_size)
        self.b1 = np.random.randn(self.hidden_size)
        self.W2 = np.random.randn(self.hidden_size, self.output_size)
        self.b2 = np.random.randn(self.output_size)
    
    def forward(self, X):
        self.z1 = np.dot(X, self.W1) + self.b1
        self.a1 = self.sigmoid(self.z1)
        self.z2 = np.dot(self.a1, self.W2) + self.b2
        self.a2 = self.sigmoid(self.z2)
        return self.a2
    
    def backward(self, X, y, learning_rate):
        m = X.shape[0]
        delta2 = self.a2 - y
        dW2 = np.dot(self.a1.T, delta2) / m
        db2 = np.sum(delta2, axis=0) / m
        delta1 = np.dot(delta2, self.W2.T) * self.sigmoid_derivative(self.a1)
        dW1 = np.dot(X.T, delta1) / m
        db1 = np.sum(delta1, axis=0) / m
        
        self.W1 -= learning_rate * dW1
        self.b1 -= learning_rate * db1
        self.W2 -= learning_rate * dW2
        self.b2 -= learning_rate * db2
    
    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))
    
    def sigmoid_derivative(self, x):
        return self.sigmoid(x) * (1 - self.sigmoid(x))

# 使用全连接神经网络进行分类任务的示例
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])

model = FullyConnectedNN(2, 5, 1)

for i in range(10000):
    output = model.forward(X)
    model.backward(X, y, learning_rate=0.1)

predictions = np.round(output)
print(predictions)
``
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
ksyyEx5xKXha