【深度学习】最强算法之:深度神经网络(DNN)

1、引言

小屌丝:鱼哥,我遇到难题了
小鱼:然后呢
小屌丝:你帮我看看呗?
小鱼:怎么看?
小屌丝:… 用眼睛看。
小鱼:这… 那咱就看看
在这里插入图片描述

小屌丝:… 你这是看啥,没让你看视力表
小鱼:我得先看看视力表, 以便我好选择用什么工具帮你看这个难题
小屌丝:我… 你随意
小鱼:你可不能干了, 不然,待会泡完澡谁结账啊。
小屌丝: 我…你…
小鱼:好了,我知道什么难题了,这就开整。
小屌丝:牛啊,牛啊,牛
小鱼:大河弯弯向东流,还是这么牛。

2、深度神经网络

2.1 定义

  • 深度神经网络(DNN)是一种由多个神经元层组成的人工神经网络模型。
  • 与传统的浅层神经网络相比,DNN具有更多的隐藏层,从而能够处理更复杂和抽象的特征。
  • DNN通过学习输入数据的表示,逐层提取特征,最终实现对数据的分类、回归等任务。

2.2 原理

DNN的核心原理在于通过多层神经元进行特征学习和抽象表示。
- 在DNN中,每个神经元都接收前一层所有神经元的输出,根据权重和激活函数对输入进行计算,并将结果传递给下一层神经元。
- 通过堆叠多个这样的层,DNN能够逐步提取输入数据中的高层次特征,从而实现对复杂数据的高效学习和处理。

DNN的训练过程通常使用反向传播算法。

  • 在训练过程中,DNN根据输入数据和期望输出之间的误差来调整网络参数,以使误差最小化。
  • 通过不断地优化网络参数,DNN能够逐渐提高模型的性能和泛化能力。

2.3 实现方式

DNN的实现方式主要依赖于深度学习框架,如TensorFlow、PyTorch等。这些框架提供了丰富的神经网络层和操作,使得构建和训练DNN变得相对简单。

在实现DNN时,

  • 首先需要定义网络结构,包括输入层、隐藏层和输出层的神经元数量以及激活函数等。
  • 其次,使用框架提供的API构建网络模型,并初始化网络参数。
  • 然后,准备训练数据集,并将数据输入到网络中进行训练。

在训练过程中,通过反向传播算法更新网络参数,直至模型收敛。

2.4 算法公式

DNN的算法公式主要包括前向传播和反向传播两部分。

  • 前向传播公式
  • 反向传播公式

2.4.1 前向传播公式

前向传播公式

  • 输入层到隐藏层的传播 ( z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) ) (z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}) (z(l)=W(l)a(l1)+b(l))
  • 隐藏层到输出层的传播 ( a ( l ) = σ ( z ( l ) ) ) (a^{(l)} = \sigma(z^{(l)})) (a(l)=σ(z(l)))

其中, ( l ) (l) (l) 表示层数, ( W ( l ) ) (W^{(l)}) (W(l)) ( b ( l ) ) (b^{(l)}) (b(l)) 分别表示第 ( l ) (l) (l) 层的权重和偏置, ( σ ) (\sigma) (σ) 表示激活函数, ( a ( l − 1 ) ) (a^{(l-1)}) (a(l1)) 表示前一层的输出, ( z ( l ) ) (z^{(l)}) (z(l)) 表示当前层的线性输出, ( a ( l ) ) (a^{(l)}) (a(l)) 表示当前层的激活输出。

2.4.2 反向传播公式

反向传播公式

  • 计算误差项 ( δ ( l ) = ∂ J ∂ z ( l ) = ( ( W ( l + 1 ) ) T δ ( l + 1 ) ⊙ σ ′ ( z ( l ) ) ) (\delta^{(l)} = \frac{\partial J}{\partial z^{(l)}} = ((W^{(l+1)})^T \delta^{(l+1)} \odot \sigma'(z^{(l)})) (δ(l)=z(l)J=((W(l+1))Tδ(l+1)σ(z(l)))
  • 更新权重和偏置 ( W ( l ) = W ( l ) − α ∂ J ∂ W ( l ) ) , ( b ( l ) = b ( l ) − α ∂ J ∂ b ( l ) ) (W^{(l)} = W^{(l)} - \alpha \frac{\partial J}{\partial W^{(l)}}),(b^{(l)} = b^{(l)} - \alpha \frac{\partial J}{\partial b^{(l)}}) (W(l)=W(l)αW(l)J)(b(l)=b(l)αb(l)J)

其中, ( J ) (J) (J) 表示损失函数, ( α ) (\alpha) (α) 表示学习率, ( ⊙ ) (\odot) () 表示逐元素相乘。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-03-15
# @Author : Carl_DJ

'''
实现功能:
    Python和TensorFlow实现简单DNN示例

'''
import tensorflow as tf  
  
# 定义模型参数  
input_size = 784  # 输入层神经元数量  
hidden_size = 128  # 隐藏层神经元数量  
num_classes = 10  # 输出层神经元数量(分类任务中的类别数)  
  
# 构建模型  
model = tf.keras.Sequential([  
    tf.keras.layers.Flatten(input_shape=(input_size,)),  
    tf.keras.layers.Dense(hidden_size, activation='relu'),  
    tf.keras.layers.Dense(num_classes, activation='softmax')  
])  
  
# 编译模型  
model.compile(optimizer='adam',  
              loss='sparse_categorical_crossentropy',  
              metrics=['accuracy'])  
  
# 训练模型  
model.fit(x_train, y_train, epochs=10, batch_size=32)  
  
# 评估模型  
loss, accuracy = model.evaluate(x_test, y_test)  
print('Test loss:', loss)  
print('Test accuracy:', accuracy)


解析

  • 首先定义了模型参数,包括输入层、隐藏层和输出层的神经元数量。
  • 然后,使用tf.keras.Sequential构建了一个包含两个全连接层的DNN模型。
    • 第一个全连接层使用ReLU激活函数,
    • 第二个全连接层使用Softmax激活函数进行多分类
    • 模型使用Adam优化器和稀疏类别交叉熵损失函数进行编译
  • 最后,我们使用训练数据对模型进行训练,并在测试数据上评估模型的性能。

运行结果示例

Epoch 1/10  
375/375 [==============================] - 4s 11ms/step - loss: 0.4985 - accuracy: 0.8550  
Epoch 2/10  
375/375 [==============================] - 4s 11ms/step - loss: 0.2614 - accuracy: 0.9142  
...  
Epoch 10/10  
375/375 [==========================] - 4s 11ms/step - loss: 0.1340 - accuracy: 0.9620  
  
157/157 [==============================] - 1s 6ms/step - loss: 0.1215 - accuracy: 0.9645  
Test loss: 0.1214522695541382  
Test accuracy: 0.9645

在这里插入图片描述

3、总结

深度神经网络(DNN)作为深度学习领域的一种重要算法,通过多层神经元对输入数据进行逐层特征提取和抽象表示,具有强大的学习和泛化能力。

DNN在图像识别、语音识别、自然语言处理等领域取得了显著成果,并持续推动着人工智能技术的发展。

通过理解DNN的定义、原理、实现方式、算法公式以及代码示例,我们可以更好地掌握这一算法,并应用于实际问题的解决中。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习机器学习领域的知识。

  • 40
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
深度学习是一种机器学习的技术,它模仿人类大脑的工作方式,通过多层神经网络进行学习和训练,以便识别图像、语音、文本等各种类型的数据。而深度神经网络DNN)是实现深度学习的一种算法。 以下是一个简单的深度神经网络DNN算法的代码示例: ```python import numpy as np # 定义激活函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 初始化权重和偏置 input_size = 3 hidden_size = 4 output_size = 2 W1 = np.random.randn(input_size, hidden_size) b1 = np.random.randn(hidden_size) W2 = np.random.randn(hidden_size, output_size) b2 = np.random.randn(output_size) # 前向传播 def forward(X): h = np.dot(X, W1) + b1 h_activated = sigmoid(h) y = np.dot(h_activated, W2) + b2 return y # 损失函数 def loss(y_pred, y_true): return np.mean(np.square(y_pred - y_true)) # 反向传播 def backward(X, y_pred, y_true): grad_y_pred = 2 * (y_pred - y_true) / len(y_true) grad_W2 = np.dot(sigmoid(np.dot(X, W1) + b1).T, grad_y_pred) grad_b2 = np.sum(grad_y_pred, axis=0) grad_h = np.dot(grad_y_pred, W2.T) * sigmoid(np.dot(X, W1) + b1) * (1 - sigmoid(np.dot(X, W1) + b1)) grad_W1 = np.dot(X.T, grad_h) grad_b1 = np.sum(grad_h, axis=0) # 更新权重和偏置 learning_rate = 0.01 W2 -= learning_rate * grad_W2 b2 -= learning_rate * grad_b2 W1 -= learning_rate * grad_W1 b1 -= learning_rate * grad_b1 # 训练模型 X = np.array([[0, 1, 2], [2, 1, 0], [1, 2, 3], [3, 2, 1]]) y_true = np.array([[1, 0], [0, 1], [1, 0], [0, 1]]) for i in range(1000): y_pred = forward(X) l = loss(y_pred, y_true) backward(X, y_pred, y_true) print(f'Epoch {i+1}, Loss: {l}') ``` 以上代码是一个简单的DNN算法示例,首先定义了激活函数sigmoid,并初始化了权重和偏置。然后实现了前向传播和反向传播的过程,最后用梯度下降法更新权重和偏置进行模型训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl_奕然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值