神经网络基础-神经网络补充概念-12-向量化逻辑回归的梯度输出

代码实现

python 复制代码
import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

def compute_loss(X, y, theta):
    m = len(y)
    h = sigmoid(X.dot(theta))
    loss = (-1/m) * np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))
    return loss

def compute_gradient(X, y, theta):
    m = len(y)
    h = sigmoid(X.dot(theta))
    gradient = X.T.dot(h - y) / m
    return gradient

def batch_gradient_descent(X, y, theta, learning_rate, num_iterations):
    m = len(y)
    losses = []
    
    for _ in range(num_iterations):
        gradient = compute_gradient(X, y, theta)
        theta -= learning_rate * gradient
        
        loss = compute_loss(X, y, theta)
        losses.append(loss)
        
    return theta, losses

# 生成一些模拟数据
np.random.seed(42)
m = 100
n = 2
X = np.random.randn(m, n)
X = np.hstack((np.ones((m, 1)), X))
theta_true = np.array([1, 2, 3])
y = (X.dot(theta_true) + np.random.randn(m) * 0.2) > 0

# 初始化参数和超参数
theta = np.zeros(X.shape[1])
learning_rate = 0.01
num_iterations = 1000

# 执行批量梯度下降(向量化)
theta_optimized, losses = batch_gradient_descent(X, y, theta, learning_rate, num_iterations)

# 打印优化后的参数
print("优化后的参数:", theta_optimized)

# 绘制损失函数下降曲线
import matplotlib.pyplot as plt
plt.plot(losses)
plt.xlabel('迭代次数')
plt.ylabel('损失')
plt.title('损失函数下降曲线')
plt.show()

我们首先定义了 compute_gradient 函数,它计算梯度向量。然后,在 batch_gradient_descent 函数中使用向量化的梯度计算,从而避免了循环操作。

这种向量化的梯度计算方法可以有效地处理多个样本,从而提高代码的性能。

相关推荐
猿饵块8 分钟前
机器人--cfg参数
人工智能·机器人
查古穆15 分钟前
LLM的“小bug”:聊聊幻觉是什么,以及如何有效规避免
人工智能·bug
环黄金线HHJX.17 分钟前
【从0到1】
开发语言·人工智能·算法·交互
鬓戈22 分钟前
AI coding编程体验之二
人工智能
Westward-sun.32 分钟前
OpenCV图像拼接实战:从SIFT特征匹配到透视变换全景融合
人工智能·opencv·计算机视觉
沅_Yuan35 分钟前
基于不确定性量化的CNN-LSTM-Attention多输入单输出回归模型【MATLAB】
神经网络·matlab·回归·cnn·lstm·回归预测
hanweixiao35 分钟前
AI 应用评测平台
人工智能
郝学胜-神的一滴37 分钟前
自动微分实战:梯度下降的迭代实现与梯度清零核心解析
人工智能·pytorch·python·深度学习·算法·机器学习
HyperAI超神经38 分钟前
【TVM教程】理解 Relax 抽象层
人工智能·深度学习·学习·机器学习·gpu·tvm·vllm
白小筠39 分钟前
自然语言处理-文本预处理
人工智能·自然语言处理·easyui