神经网络基础-神经网络补充概念-25-深层神经网络

简介

深层神经网络(Deep Neural Network,DNN)是一种具有多个隐藏层的神经网络,它可以用来解决复杂的模式识别和特征学习任务。深层神经网络在近年来的机器学习和人工智能领域中取得了重大突破,如图像识别、自然语言处理、语音识别等。

重要概念

多隐藏层:

深层神经网络具有多个隐藏层,这些隐藏层可以用来提取不同层次的特征。每一层的神经元可以将前一层的输出作为输入,并对数据进行更高级的抽象和特征学习。

特征学习:

深层神经网络通过逐层的特征学习,可以自动地从原始数据中提取出更加抽象和有意义的特征。每一层的权重和偏差都在训练过程中进行调整,以便更好地捕捉数据中的模式和信息。

非线性激活函数:

深层神经网络使用非线性的激活函数(如ReLU、Sigmoid、Tanh等)来引入非线性变换,从而使网络能够处理更加复杂的关系和模式。

前向传播和反向传播:

深层神经网络的训练过程包括前向传播和反向传播。前向传播用于计算预测值,并计算损失函数,而反向传播用于计算梯度并更新权重和偏差,以减小损失函数。

优化算法:

训练深层神经网络通常使用各种优化算法,如梯度下降法、随机梯度下降法、Adam等。这些算法有助于寻找损失函数的最小值,并使网络的性能逐渐提升。

过拟合问题:

深层神经网络容易出现过拟合问题,特别是在数据量较少的情况下。为了避免过拟合,常常会采用正则化、Dropout等技术。

深度学习框架:

为了便于搭建和训练深层神经网络,许多深度学习框架(如TensorFlow、PyTorch、Keras等)被开发出来,提供了丰富的工具和接口来支持深度神经网络的构建和训练。

代码实现

python 复制代码
import numpy as np

# Sigmoid 激活函数及其导数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return x * (1 - x)

# 初始化参数
def initialize_parameters(layer_dims):
    parameters = {}
    L = len(layer_dims)  # 层数

    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l - 1]) * 0.01
        parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))

    return parameters

# 前向传播
def forward_propagation(X, parameters):
    caches = []
    A = X
    L = len(parameters) // 2  # 神经网络层数

    for l in range(1, L):
        Z = np.dot(parameters['W' + str(l)], A) + parameters['b' + str(l)]
        A = sigmoid(Z)
        caches.append((Z, A))

    Z = np.dot(parameters['W' + str(L)], A) + parameters['b' + str(L)]
    AL = sigmoid(Z)
    caches.append((Z, AL))

    return AL, caches

# 计算损失
def compute_loss(AL, Y):
    m = Y.shape[1]
    cost = -np.sum(Y * np.log(AL) + (1 - Y) * np.log(1 - AL)) / m
    return cost

# 反向传播
def backward_propagation(AL, Y, caches):
    grads = {}
    L = len(caches)
    m = AL.shape[1]
    Y = Y.reshape(AL.shape)

    dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))

    current_cache = caches[L - 1]
    dZL = dAL * sigmoid_derivative(current_cache[1])
    grads['dW' + str(L)] = np.dot(dZL, caches[L - 2][1].T) / m
    grads['db' + str(L)] = np.sum(dZL, axis=1, keepdims=True) / m

    for l in reversed(range(L - 1)):
        current_cache = caches[l]
        dZ = np.dot(parameters['W' + str(l + 2)].T, dZL) * sigmoid_derivative(current_cache[1])
        grads['dW' + str(l + 1)] = np.dot(dZ, caches[l][1].T) / m
        grads['db' + str(l + 1)] = np.sum(dZ, axis=1, keepdims=True) / m
        dZL = dZ

    return grads

# 更新参数
def update_parameters(parameters, grads, learning_rate):
    L = len(parameters) // 2

    for l in range(L):
        parameters['W' + str(l + 1)] -= learning_rate * grads['dW' + str(l + 1)]
        parameters['b' + str(l + 1)] -= learning_rate * grads['db' + str(l + 1)]

    return parameters

# 主函数
def deep_neural_network(X, Y, layer_dims, learning_rate, num_iterations):
    np.random.seed(42)
    parameters = initialize_parameters(layer_dims)

    for i in range(num_iterations):
        AL, caches = forward_propagation(X, parameters)
        cost = compute_loss(AL, Y)
        grads = backward_propagation(AL, Y, caches)
        parameters = update_parameters(parameters, grads, learning_rate)

        if i % 100 == 0:
            print(f'Iteration {i}, Cost: {cost:.4f}')

    return parameters

# 示例数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]).T
Y = np.array([[0, 1, 1, 0]]).T

# 定义网络结构和超参数
layer_dims = [2, 4, 4, 1]  # 输入层维度、隐藏层维度、输出层维度
learning_rate = 0.1
num_iterations = 10000

# 训练深层神经网络
parameters = deep_neural_network(X, Y, layer_dims, learning_rate, num_iterations)

# 预测
predictions, _ = forward_propagation(X, parameters)
print('Predictions:', predictions)
相关推荐
却道天凉_好个秋2 分钟前
计算机视觉(十二):人工智能、机器学习与深度学习
人工智能·深度学习·机器学习·计算机视觉
小关会打代码8 分钟前
自然语言处理之第一课语言转换方法
人工智能·自然语言处理
wenzhangli713 分钟前
OneCode 可视化揭秘系列(三):AI MCP驱动的智能工作流逻辑编排
人工智能
聚客AI30 分钟前
⭐精准率暴跌50%?RAG开发者必避的十大认知误区
人工智能·llm·agent
codeGoogle38 分钟前
大厂研发之谜:千亿投入砸出利润大缩水
前端·人工智能·后端
虚拟现实旅人40 分钟前
【机器学习】通过tensorflow搭建神经网络进行气温预测
神经网络·机器学习
豆浩宇1 小时前
Conda环境隔离和PyCharm配置,完美同时运行PaddlePaddle和PyTorch
人工智能·pytorch·算法·计算机视觉·pycharm·conda·paddlepaddle
京东云开发者1 小时前
DeepSeek冲击(含本地化部署实践)
人工智能
@国境以南,太阳以西1 小时前
基于Grad-CAM(Gradient-weighted Class Activation Mapping)的可解释性分析
人工智能·深度学习
AI人工智能+2 小时前
表格识别技术:通过计算机视觉和OCR,实现非结构化表格向结构化数据的转换,推动数字化转型。
人工智能·计算机视觉·ocr