神经网络基础-神经网络补充概念-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)
相关推荐
糖豆豆今天也要努力鸭几秒前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
脆皮泡泡2 分钟前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥5 分钟前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
码银12 分钟前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能
何大春16 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
uncle_ll24 分钟前
PyTorch图像预处理:计算均值和方差以实现标准化
图像处理·人工智能·pytorch·均值算法·标准化
宋1381027972024 分钟前
Manus Xsens Metagloves虚拟现实手套
人工智能·机器人·vr·动作捕捉
SEVEN-YEARS28 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
世优科技虚拟人32 分钟前
AI、VR与空间计算:教育和文旅领域的数字转型力量
人工智能·vr·空间计算
cloud studio AI应用38 分钟前
腾讯云 AI 代码助手:产品研发过程的思考和方法论
人工智能·云计算·腾讯云