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

简介

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

重要概念

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

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

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

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

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

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

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

代码实现

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丰。。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值