当前位置: 首页 > news >正文

表白网站制作生成器/广告公司

表白网站制作生成器,广告公司,大名网站建设,中山币做网站公司梯度下降算法(Gradient Descent)是机器学习和深度学习中最常用的优化算法之一。无论是在训练神经网络、线性回归模型,还是其他类型的机器学习模型时,梯度下降都是不可或缺的一部分。它的核心目标是最小化一个损失函数(…

梯度下降算法(Gradient Descent)是机器学习和深度学习中最常用的优化算法之一。无论是在训练神经网络、线性回归模型,还是其他类型的机器学习模型时,梯度下降都是不可或缺的一部分。它的核心目标是最小化一个损失函数(Loss Function),从而得到最优的模型参数。

本篇博客将详细介绍梯度下降算法的原理、实现、各种变种以及在实际应用中的注意事项。文章不仅涵盖理论知识,还提供了丰富的Python代码示例,帮助你全面理解梯度下降的内部机制。

1. 梯度下降算法简介

梯度下降算法是一个用于优化的算法,它通过迭代的方式来最小化一个损失函数。在机器学习中,模型的学习过程就是在训练数据上找到一组最佳的参数,这组参数能够使得预测的结果和真实标签之间的误差最小化。梯度下降就是通过反复调整模型参数(例如权重和偏置),沿着损失函数的梯度方向前进,从而找到最优解。

1.1 为什么是“梯度”下降?
“梯度”指的是一个多维函数在某一点的变化率,即函数的导数。在梯度下降算法中,梯度表示损失函数相对于模型参数的变化情况。梯度是一个向量,它指向函数上升最快的方向。为了最小化损失函数,我们要沿着梯度的反方向进行更新。

1.2 梯度下降的核心目标
梯度下降的目标是通过一系列的步骤,找到损失函数的局部最小值或全局最小值,这样我们的模型就能够在训练数据上做出最准确的预测。

2. 梯度下降算法的工作原理

2.1 梯度和导数
梯度下降算法的原理建立在微积分的基础上。对于一个有多个自变量的函数,梯度是该函数在某一点上所有自变量的偏导数的集合。梯度下降的目的是通过计算这些偏导数来更新模型的参数。

3. 梯度下降的类型

梯度下降算法根据每次更新所使用的数据量不同,主要有三种类型:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)和小批量梯度下降(Mini-Batch Gradient Descent)。

3.1 批量梯度下降(Batch Gradient Descent)
在批量梯度下降中,每次迭代都使用整个训练数据集来计算梯度并更新参数。这种方法的优点是计算稳定,但计算量大,特别是当数据集非常庞大时,计算时间和内存开销都非常高。

代码示例:批量梯度下降

import numpy as np# 生成训练数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([5, 7, 9, 11])# 初始化参数
theta = np.zeros(X.shape[1])# 学习率
alpha = 0.01# 批量梯度下降
def batch_gradient_descent(X, y, theta, alpha, iterations):m = len(y)for _ in range(iterations):predictions = X.dot(theta)error = predictions - ygradient = X.T.dot(error) / mtheta -= alpha * gradientreturn theta# 训练模型
theta_optimal = batch_gradient_descent(X, y, theta, alpha, 1000)
print("Optimal Parameters:", theta_optimal)

3.2 随机梯度下降(Stochastic Gradient Descent)
在随机梯度下降中,每次更新仅使用一个训练样本来计算梯度并更新参数。这使得每次更新的计算量非常小,但由于每次迭代的更新方向有较大的波动,SGD收敛速度相对较慢,并且可能会在局部最小值附近震荡。

代码示例:随机梯度下降

def stochastic_gradient_descent(X, y, theta, alpha, iterations):m = len(y)for _ in range(iterations):for i in range(m):xi = X[i:i+1]  # 取一个样本yi = y[i:i+1]prediction = xi.dot(theta)error = prediction - yigradient = xi.T.dot(error)theta -= alpha * gradientreturn theta# 训练模型
theta_optimal_sgd = stochastic_gradient_descent(X, y, theta, alpha, 1000)
print("Optimal Parameters (SGD):", theta_optimal_sgd)

3.3 小批量梯度下降(Mini-Batch Gradient Descent)

小批量梯度下降(Mini-Batch Gradient Descent)是一种常用的优化算法,在深度学习和机器学习中广泛应用。它结合了批量梯度下降(Batch Gradient Descent)和随机梯度下降(Stochastic Gradient Descent,SGD)的优点。具体来说,它通过以下方式对这两种方法进行了改进:

1. 小批量(Mini-Batch)
批量梯度下降使用整个训练集来计算梯度并更新参数,这样做虽然计算准确,但当数据集较大时,计算量非常庞大,且内存消耗大。
随机梯度下降每次从训练集中随机选择一个样本来计算梯度并更新参数,这使得更新速度更快,但由于每次只使用一个样本,梯度估计有较大波动,导致优化过程不稳定。
小批量梯度下降则将训练集划分为多个较小的批次,每个批次包含若干个样本(比如32个、64个等),每次使用一个批次来计算梯度并更新参数。通过这种方式,既能享受批量梯度下降较为稳定的更新效果,又能加速计算,减轻内存负担。
2. 优点
小批量梯度下降相对于批量梯度下降和随机梯度下降有多个优点:

**计算效率高:**每次只使用部分数据进行计算,减少了计算量和内存使用,同时还能够利用现代硬件(如GPU)并行计算的优势。

**更平衡的收敛速度:**由于每个小批量包含多个样本,计算出的梯度相较于随机梯度下降的波动更小,因此优化过程更加稳定且收敛速度比随机梯度下降更快。

**避免局部极小值:**由于每次更新参数时只使用一个小批量,梯度的方向会有所波动,这有助于模型跳出一些局部最优解,避免陷入不好的局部极小值。

**更好的泛化能力:**在训练过程中,较小的批量带来的噪声能够使模型避免过度拟合,增强了模型的泛化能力。

3. 超参数选择
在小批量梯度下降中,批次大小(mini-batch size)是一个重要的超参数,它决定了每次更新时所使用的训练样本数量。常见的批次大小选择有以下几种:

**小批量:**比如 32 或 64(通常是2的幂次),这种设置在实际应用中最为常见,能够兼顾计算效率和收敛性。
**大批量:**比如 128 或 256,虽然可以进一步加快计算速度,但可能导致训练过程的震荡性增加。
**小批量过小:**如果批次过小,比如只有 1 或 2,这样做就几乎回到了随机梯度下降,可能导致梯度估计噪声过大,优化过程不稳定。
批次大小的选择通常依赖于具体的数据集、硬件条件以及目标任务的特点。小批量梯度下降的批次大小需要根据实际情况进行调节,通常是通过实验来找到最佳值。

4. 优化过程
小批量梯度下降的优化过程大致如下:

将训练数据集随机划分为若干小批量。
每次从小批量中取出一个批次,计算该批次的梯度并更新模型参数。
重复以上过程,直到完成所有小批次的训练,或者达到停止条件(如误差小于某个阈值,或者经过足够的迭代次数)。
5. 学习率与批量大小的关系
批量大小与学习率有一定的相互关系。通常情况下,批量越大,更新的方向会越精确,学习率可以相应地调高;而批量越小,则由于每次梯度估计的不稳定,学习率需要适当调低来避免过度震荡。

6. 小批量梯度下降的变种
除了基本的小批量梯度下降外,还有许多改进和变种方法,旨在提高收敛速度和优化过程的稳定性。常见的包括:

**动量(Momentum):**通过引入动量项,利用历史梯度来平滑当前的更新方向,避免参数更新的剧烈波动。
**Adam(Adaptive Moment Estimation):**结合了动量和自适应学习率的优点,能够自动调整每个参数的学习率,适应不同参数的梯度变化。
7. 总结
小批量梯度下降(Mini-Batch Gradient Descent)是一种计算高效且收敛稳定的优化算法,广泛应用于深度学习中。它通过将训练数据划分为小批次来计算梯度,使得算法在批量梯度下降的稳定性和随机梯度下降的计算效率之间达到了平衡。选择合适的批量大小、优化超参数和改进算法(如Adam等)是提高模型训练性能的关键。

import numpy as np
import matplotlib.pyplot as plt# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)  # 100个数据点,特征维度为1
y = 4 + 3 * X + np.random.randn(100, 1)  # 目标值 y = 4 + 3X + 噪声# 标准化数据(常见做法,提高模型训练效率)
X = (X - X.mean()) / X.std()# 将X扩展为包含常数项的特征矩阵
X_b = np.c_[np.ones((X.shape[0], 1)), X]# 小批量梯度下降实现
def mini_batch_gradient_descent(X, y, learning_rate=0.1, n_iterations=1000, batch_size=32):m = len(X)theta = np.random.randn(X.shape[1], 1)  # 随机初始化参数for iteration in range(n_iterations):# 随机打乱数据indices = np.random.permutation(m)X_shuffled = X[indices]y_shuffled = y[indices]# 分小批量for i in range(0, m, batch_size):X_batch = X_shuffled[i:i+batch_size]y_batch = y_shuffled[i:i+batch_size]# 计算梯度gradients = 2 / batch_size * X_batch.T.dot(X_batch.dot(theta) - y_batch)# 更新参数theta -= learning_rate * gradientsreturn theta# 使用小批量梯度下降训练模型
theta_final = mini_batch_gradient_descent(X_b, y, learning_rate=0.1, n_iterations=1000, batch_size=32)# 输出最终的theta值
print(f"Final model parameters: {theta_final.ravel()}")# 画出训练过程中的拟合直线
plt.scatter(X, y, color='blue', label='Data points')
plt.plot(X, X_b.dot(theta_final), color='red', label='Regression line')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Linear Regression using Mini-Batch Gradient Descent')
plt.show()

解释代码:
数据生成:

X:生成100个随机样本,表示特征(这里假设是1维特征)。
y:根据线性关系 ( y = 4 + 3X + \text{噪声} ) 生成目标值。
标准化:

对特征 X 进行标准化(均值为0,标准差为1),帮助提高模型训练效率。
小批量梯度下降函数:

mini_batch_gradient_descent:接收特征 X、目标 y、学习率、迭代次数和批次大小作为输入。
在每次迭代中,首先对数据进行随机打乱,然后分成小批次,每个小批次使用梯度下降更新模型参数。
梯度计算公式: ( \nabla_\theta J(\theta) = \frac{2}{m} X^T (X\theta - y) ),其中 ( J(\theta) ) 是均方误差损失函数。
训练过程:

在1000次迭代中,不断通过小批量梯度下降更新模型参数,最后得到训练后的参数 theta_final。
结果可视化:

绘制了训练数据点(蓝色散点)和拟合的回归直线(红色直线)。
小批量梯度下降的优势:
通过分小批次计算,避免了内存溢出,同时保持了较好的收敛性。
由于每个小批次包含多个样本,梯度更新比纯随机梯度下降更稳定。
调优:
你可以通过调整以下超参数来优化模型:

learning_rate:控制每次参数更新的步长。
n_iterations:迭代次数,越多通常能得到更好的拟合。
batch_size:小批量大小,常见选择是32、64、128等。可以根据训练数据的大小和硬件资源进行调整。
这段代码实现了一个基础的小批量梯度下降,用于线性回归问题,可以根据自己的需求进行修改和扩展。

4.梯度下降的变种

4.1 动量法(Momentum)

动量法(Momentum)借鉴了物理中的“动量”概念,它通过引入一个动量项,使得优化算法在梯度下降过程中不仅仅依赖当前的梯度,还结合了之前梯度的历史信息,帮助加速收敛,并减少震荡

def momentum_gradient_descent(X, y, learning_rate=0.1, n_iterations=1000, beta=0.9):m = len(X)theta = np.random.randn(X.shape[1], 1)v = np.zeros_like(theta)  # 初始化动量for iteration in range(n_iterations):gradients = 2 / m * X.T.dot(X.dot(theta) - y)v = beta * v + (1 - beta) * gradients  # 更新动量theta -= learning_rate * v  # 更新参数return theta

4.2 Adagrad

Adagrad(Adaptive Gradient Algorithm)是一种自适应梯度下降算法,通过为每个参数引入独立的学习率,使得学习率随着参数的更新而调整。对于更新较大的参数,学习率会逐渐减小;而对于更新较小的参数,学习率会相对较大,从而加速收敛。

def adagrad_gradient_descent(X, y, learning_rate=0.1, n_iterations=1000, epsilon=1e-8):m = len(X)theta = np.random.randn(X.shape[1], 1)G = np.zeros_like(theta)  # 初始化梯度平方和for iteration in range(n_iterations):gradients = 2 / m * X.T.dot(X.dot(theta) - y)G += gradients ** 2  # 累积梯度的平方theta -= learning_rate / (np.sqrt(G) + epsilon) * gradients  # 更新参数return theta

4.3 RMSprop

RMSprop(Root Mean Square Propagation)是对Adagrad的改进版本,目的是解决Adagrad学习率过早衰减的问题。RMSprop通过对梯度平方的指数加权平均来控制梯度更新,从而避免了学习率过快下降的问题。

def rmsprop_gradient_descent(X, y, learning_rate=0.01, n_iterations=1000, beta=0.9, epsilon=1e-8):m = len(X)theta = np.random.randn(X.shape[1], 1)Eg2 = np.zeros_like(theta)  # 初始化梯度平方的加权平均for iteration in range(n_iterations):gradients = 2 / m * X.T.dot(X.dot(theta) - y)Eg2 = beta * Eg2 + (1 - beta) * gradients ** 2  # 更新梯度平方的加权平均theta -= learning_rate / (np.sqrt(Eg2) + epsilon) * gradients  # 更新参数return theta

4.4 Adam

Adam(Adaptive Moment Estimation)结合了动量法和RMSprop的优点,同时考虑了梯度的均值和方差。它通过估计梯度的一阶矩(均值)和二阶矩(方差)的加权平均来调整每个参数的学习率。Adam是目前应用最广泛的优化算法之一,适用于大多数深度学习任务。

def adam_gradient_descent(X, y, learning_rate=0.001, n_iterations=1000, beta1=0.9, beta2=0.999, epsilon=1e-8):m = len(X)theta = np.random.randn(X.shape[1], 1)m_t = np.zeros_like(theta)  # 初始化一阶矩v_t = np.zeros_like(theta)  # 初始化二阶矩t = 0for iteration in range(n_iterations):t += 1gradients = 2 / m * X.T.dot(X.dot(theta) - y)# 更新一阶矩和二阶矩m_t = beta1 * m_t + (1 - beta1) * gradientsv_t = beta2 * v_t + (1 - beta2) * gradients ** 2# 偏差修正m_t_hat = m_t / (1 - beta1 ** t)v_t_hat = v_t / (1 - beta2 ** t)# 更新参数theta -= learning_rate * m_t_hat / (np.sqrt(v_t_hat) + epsilon)return theta

5.1 线性回归中的梯度下降
线性回归是一个常见的回归问题,目标是通过一条直线拟合数据点,最小化预测值与真实值之间的误差。我们可以通过梯度下降来优化线性回归模型的参数,使得模型能够尽可能准确地拟合训练数据。

线性回归模型:

import numpy as npdef gradient_descent(X, y, learning_rate=0.01, n_iterations=1000):m = len(y)theta = np.random.randn(X.shape[1], 1)  # 随机初始化参数for iteration in range(n_iterations):gradients = 2/m * X.T.dot(X.dot(theta) - y)  # 计算梯度theta -= learning_rate * gradients  # 更新参数return theta

输入: 训练数据 (X), 目标变量 (y), 学习率 (\alpha), 迭代次数
输出: 训练得到的参数 (\theta)
通过梯度下降迭代更新,模型会逐步接近最优的参数值,从而最小化预测误差。

5.2 神经网络中的梯度下降
神经网络是深度学习中的核心模型,它通过多个层级(输入层、隐藏层、输出层)进行非线性变换,用于处理复杂的任务,如分类、回归等。在神经网络中,梯度下降用于优化权重和偏置,以最小化损失函数,通常是交叉熵或均方误差。

神经网络的结构:
一个简单的神经网络通常包含:

输入层:接收输入特征
隐藏层:应用激活函数(如ReLU、sigmoid等)
输出层:输出预测结果
假设一个有一层隐藏层的神经网络,其中:

( X ) 是输入数据,( y ) 是目标输出。
权重矩阵分别为 ( W_1 ) 和 ( W_2 ),偏置分别为 ( b_1 ) 和 ( b_2 )。
激活函数为 ( \sigma )(如ReLU或sigmoid)。

def sigmoid(x):return 1 / (1 + np.exp(-x))def neural_network(X, y, learning_rate=0.01, n_iterations=1000):m = X.shape[0]n_features = X.shape[1]# 初始化权重和偏置W1 = np.random.randn(n_features, 4)b1 = np.zeros((1, 4))W2 = np.random.randn(4, 1)b2 = np.zeros((1, 1))for i in range(n_iterations):# 前向传播Z1 = np.dot(X, W1) + b1A1 = sigmoid(Z1)Z2 = np.dot(A1, W2)

 5.总结

  梯度下降法(Gradient Descent)是一种迭代优化算法,广泛应用于机器学习和深度学习中,用于最小化损失函数,从而优化模型参数。其基本原理是通过计算损失函数相对于参数的梯度,指示损失函数变化最快的方向,并沿着这个方向调整参数值。每次更新的步长由学习率决定,确保参数朝着最小值的方向前进。梯度下降法的核心优点是实现简单、计算高效,尤其适用于大规模数据集和复杂的模型。根据不同的计算方式,梯度下降法有几种常见变体,包括批量梯度下降、随机梯度下降(SGD)和小批量梯度下降(Mini-batch SGD),它们各有优缺点。虽然梯度下降法能有效地优化许多问题,但它也可能陷入局部最小值或鞍点,尤其是在非凸优化问题中;此外,学习率的选择对算法的收敛速度和稳定性至关重要,因此在实践中需要合理调节学习率,或者使用一些自适应学习率的优化算法(如Adam、Adagrad等)来改进收敛效率。

相关文章:

机器学习系列----梯度下降算法

梯度下降算法(Gradient Descent)是机器学习和深度学习中最常用的优化算法之一。无论是在训练神经网络、线性回归模型,还是其他类型的机器学习模型时,梯度下降都是不可或缺的一部分。它的核心目标是最小化一个损失函数(…...

AI大模型:软件开发的未来之路

随着AI技术的快速发展,AI大模型正在对软件开发流程产生深远的影响。从代码自动生成到智能测试,AI大模型正在重塑软件开发的各个环节,为软件开发者、企业和整个产业链带来新的流程和模式变化。 首先,AI大模型的定义是指通过大规模…...

指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾

10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。 作为大会的重要环节之一,袋鼠云数栈产品经理潮汐带来了…...

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto:Crypto-2:Crypto-3: 前言:本次比赛已经结束,用于赛后复现,欢迎大家交流学习! Crypto: Crypto-2: …...

关于Markdown的一点疑问,为什么很多人说markdown比word好用?

markdown和word压根不是一类工具,不存在谁比谁好,只是应用场景不一样。 你写博客、写readme肯定得markdown,但写合同、写简历肯定word更合适。 markdown和word类似邮箱和微信的关系,这两者都可以通信,但微信因为功能…...

NoSQL大数据存储技术测试(1)绪论

写在前面:未完成测试的同学,请先完成测试,此博文供大家复习使用,(我的答案)均为正确答案,大家可以放心复习 单项选择题 第1题 以下不属于云计算部署模型的是( ) 公…...

Linux命令学习,git命令

Linux系统,Git是一个强大的版本管理系统,允许用户跟踪代码的更改、管理项目历史以及与他人协作。 Linux Git命令: 初始化仓库:当前目录创建一个Git仓库,生成.git隐藏目录存储版本历史和其他Git相关的元数据。 git init 克隆仓库…...

【AI大模型】Transformer中的编码器详解,小白必看!!

前言 Transformer中编码器的构造和运行位置如下图所示,其中编码器内部包含多层,对应下图encoder1…encoder N,每个层内部又包含多个子层:多头自注意力层、前馈神经网络层、归一化层,而最关键的是多头自注意力层。 自注…...

PostgreSQL 字段按逗号分隔成多条数据的技巧与实践 ️

全文目录: 开篇语前言 📚1. PostgreSQL 字段拆分的基本概念 🎯2. 使用 string_to_array 函数拆分字段 💬示例:使用 string_to_array 拆分字段结果: 3. 使用 unnest 和 string_to_array 结合拆分 &#x1f5…...

设计模式学习总结(一)

设计模式学习笔记 面向对象、设计原则、设计模式、编程规范、重构之间的关系 面向对象、设计原则、设计模式、编程规范、重构之间的关系 面向对象 现在,主流的编程范式或者是编程风格有三种:面向过程、面向对象和函数式编程。 需要掌握七大知识点&#…...

软考中级 软件设计师 上午考试内容笔记(个人向)Part.1

软考上午考试内容 1. 计算机系统 计算机硬件通过高/低电平来模拟1/0信息;【p进制】: K n K n − 1 . . . K 2 K 1 K 0 K − 1 K − 2... K − m K n r n . . . K 1 r 1 K 0 r 0 K − 1 r − 1 . . . K − m r − m K_nK_{n-1}...K_2K_1K_0K…...

PHP API的数据交互类型设计

PHP API的数据交互类型设计涉及多个方面,包括请求方法、数据格式、安全性考虑等。以下是对PHP API数据交互类型设计的详细探讨: 一、请求方法 在PHP API中,常见的请求方法包括GET、POST、PUT、DELETE等。这些方法在数据交互中各有其用途和特…...

【EFK】Linux集群部署Elasticsearch最新版本8.x

【EFK】Linux集群部署Elasticsearch最新版本8.x 摘要环境准备环境信息系统初始化启动先决条件 下载&安装修改elasticsearch.yml控制台启动Linux服务启动访问验证查看集群信息查看es健康状态查看集群节点查询集群状态 生成service token验证service tokenIK分词器下载 摘要 …...

【大数据测试 Elasticsearch — 详细教程及实例】

大数据测试 Elasticsearch — 详细教程及实例 1. Elasticsearch 基础概述核心概念 2. 搭建 Elasticsearch 环境2.1 安装 Elasticsearch2.2 配置 Elasticsearch 3. 大数据测试的常见方法3.1 使用 Logstash 导入大数据3.2 使用 Elasticsearch 的 Bulk API3.3 使用 Benchmark 工具…...

用ArkTS写一个登录页面(实现简单的逻辑)

登录页面 1.登录页面编码 Extend(TextInput) function customStyle(){.backgroundColor(#fff).border({width:{bottom:0.5},color:#e4e4e4}).borderRadius(1) //让圆角不明显.placeholderColor(#c3c3c5).caretColor(#fa711d) //input获取焦点样式 }Entry Component struct Log…...

matlab将INCA采集的dat文件多个变量批量读取到excel中

参考资料: MATLAB处理INCA采集数据(mdf,dat等)一 使用matlab处理INCF采集数据,mdf(.dat)格式文件,并将将其写入excel文件 这个资料只能一个变量一个变量的提取,本对其进…...

list集合常见去重方式以及效率对比

1.概述 list集合去重是开发中比较常用的操作,在面试中也会经常问到,那么list去重都有哪些方式?他们之间又该如何选择呢? 本文将通过LinkedHashSet、for循环、list流toSet、list流distinct等4种方式分别做1W数据到1000W数据单元测试…...

JavaWeb——Web入门(7/9)-Tomcat-介绍(Tomcat 的简介:轻量级Web服务器,支持Servlet/JSP少量JavaEE规范)

目录 Web服务器的作用 三个方面的讲解 Tomcat 的简介 小结 Web服务器的作用 封装 HTTP 协议操作:Web服务器是一个软件程序,对 HTTP 协议的操作进行了封装。这样开发人员就不需要再直接去操作 HTTP 协议,使得外部应用程序的开发更加便捷、…...

【SpringBoot】19 文件/图片下载(MySQL + Thymeleaf)

Git仓库 https://gitee.com/Lin_DH/system 介绍 从 MySQL 中,下载保存的 blob 格式的文件。 代码实现 第一步:配置文件 application.yml spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8datasource:driver-class-name: com.mysql.…...

陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解

时下,开发一款功能全面、用户体验良好的陪诊问诊APP成为了医疗行业的一大热点。本文将结合互联网医院系统源码,详细解析陪诊问诊APP的开发过程,为开发者提供实用的开发方案与技术指导。 一、陪诊问诊APP的背景与功能需求 陪诊问诊APP核心目…...

Spark 中 RDD 的诞生:原理、操作与分区规则

Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式之Yarn模式的原…...

c++构造与析构

构造函数特性 名称与类名相同:构造函数的名称必须与类名完全相同,并且不能有返回值类型(包括void)。 自动调用:构造函数在对象实例化时自动调用,不需要手动调用。 初始化成员变量:构造函数的主…...

C++(函数重载,引用,nullptr)

1.函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。传参时会自动匹配传入的参数,对应该函数的形参类型,进行函数调用,这样C函数调⽤就表现出了多态⾏为&a…...

django+postgresql

PostgreSQL概述 PostgreSQL 是一个功能强大的开源关系数据库管理系统(RDBMS),以其高度的稳定性、扩展性和社区支持而闻名。PostgreSQL 支持 SQL 标准并具有很多先进特性,如 ACID 合规、复杂查询、外键支持、事务处理、表分区、JS…...

前端滚动锚点(点击后页面滚动到指定位置)

三个常用方案:1.scrollintoView 把调用该方法的元素滚动到屏幕的指定位置,中间,底部,或者顶部 优点:方便,只需要获取元素然后调用 缺点:不好精确控制,只能让元素指定滚动到中间&…...

使用SSL加密465端口发送邮件

基于安全考虑,云虚拟主机的25端口默认封闭,如果您有发送邮件的需求,建议使用SSL加密端口(465端口)来对外发送邮件。本文通过提供.NET、PHP和ASP样例来介绍使用SSL加密端口发送邮件的方法,其他语言的实现思路…...

一些面试题总结(一)

1、string为什么是不可变的,有什么好处 原因: 1、因为String类下的value数组是用final修饰的,final保证了value一旦被初始化,就不可改变其引用。 2、此外,value数组的访问权限为 private,同时没有提供方…...

泄露的文档显示 Google 似乎意识到了 Tensor 处理器存在过热问题

Google 知道其 Tensor 芯片存在一些问题,尤其是在过热和电池寿命方面,显然他们正在努力通过即将推出的代号为"Malibu"的 Tensor G6 来解决这一问题。 Android Authority 泄露的幻灯片显示,过热是基于 Tensor 的 Pixel 手机退换货的…...

python爬虫案例——网页源码被加密,解密方法全过程

文章目录 1、任务目标2、网页分析3、代码编写1、任务目标 目标网站:https://jzsc.mohurd.gov.cn/data/company,该网站的网页源码被加密了,用于本文测验 要求:解密该网站的网页源码,请求网站并返回解密后的明文数据,网页内容如下: 2、网页分析 进入网站,打开开发者模式,…...

2.4_SSRF服务端请求伪造

SSRF服务端请求伪造 定义:服务端请求伪造。是一种攻击者构造请求后,交由服务端发起请求的漏洞; 产生原理:该服务器提供了从其他服务器获取数据的功能,但没有对用户提交的数据做严格校验; 利用条件&#…...