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

《Python星球日记》 第50天:深度学习概述与环境搭建

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

    • 一、什么是深度学习?它与传统机器学习的区别
      • 1. 深度学习的定义
      • 2. 深度学习与传统机器学习的区别
    • 二、神经网络的发展历程:感知机 → 深度神经网络
      • 1. 感知机:神经网络的起点
      • 2. 多层感知机(MLP)
      • 3. 反向传播与深度学习的第一次浪潮
      • 4. 深度学习的复兴与突破
    • 三、安装深度学习框架
      • 1. TensorFlow 入门安装与配置
        • (1) 使用pip安装TensorFlow
        • (2) 验证安装
        • (3) TensorFlow环境配置建议
      • 2. PyTorch 入门安装与配置
        • (1) 使用pip安装PyTorch
        • (2) 验证安装
        • (3) PyTorch环境配置建议
    • 四、编写第一个深度学习程序(Hello World)
      • 1. TensorFlow实现
      • 2. PyTorch实现
    • 五、练习:运行一个简单的神经网络模型
      • 练习:使用深度学习识别手写数字
        • TensorFlow版本
      • 拓展练习
    • 六、总结与展望
    • 参考资源

👋 专栏介绍: Python星球日记专栏介绍(持续更新ing)
上一篇: 《Python星球日记》 第49天:特征工程与全流程建模

欢迎来到Python星球的第50天!🪐

今天我们将踏入人工智能领域中最令人兴奋的技术——深度学习。随着这项技术的飞速发展,它已经在图像识别、自然语言处理、推荐系统等众多领域掀起了革命性的变化。让我们一起探索这个奇妙的世界!

一、什么是深度学习?它与传统机器学习的区别

1. 深度学习的定义

深度学习是机器学习的一个分支,它通过模拟人脑的结构和功能,使用多层神经网络来学习数据中的复杂模式。与传统的机器学习算法相比,深度学习能够自动从原始数据中提取特征,无需人工干预即可发现数据中的隐藏规律。

以学习的例子,来再理解一下机器学习和深度学习的概念。

  • 机器学习 类似于 教学生解题时给他们公式和步骤;

  • 深度学习 类似于 让学生自己总结出解题的公式。

深度学习的核心在于其"深度",即神经网络中的多层结构。每一层都能够学习数据的不同级别的抽象表示,从简单的特征(如图像中的边缘、文本中的单词)到复杂的概念(如人脸、句子的语义)。

在这里插入图片描述

2. 深度学习与传统机器学习的区别

特性传统机器学习深度学习
特征提取需要人工设计特征自动学习特征
数据量要求可以在较小的数据集上表现良好通常需要大量数据
计算资源计算资源需求相对较低需要强大的计算资源(GPU/TPU)
可解释性多数算法具有较好的可解释性通常被视为"黑盒",可解释性较差
适用场景结构化数据,问题明确非结构化数据(图像、文本、音频)
性能上限随着数据增加,性能提升有限随着数据和模型规模增加,性能可持续提升

传统机器学习算法(如我们之前学习的决策树、SVM等)在特征明确的情况下效果很好,但面对原始的、复杂的数据(如图像、音频)时往往力不从心

深度学习擅长从这些复杂数据中自动学习表示,这也是为什么它在计算机视觉、自然语言处理等领域取得了突破性进展。

在这里插入图片描述

二、神经网络的发展历程:感知机 → 深度神经网络

1. 感知机:神经网络的起点

感知机(Perceptron)是最早的人工神经网络模型之一,由Frank Rosenblatt在1958年提出。它模拟了单个神经元的工作方式,接收多个输入信号,通过加权求和和激活函数产生输出。

感知机的数学表达式为:

output = activation_function(∑(weight_i * input_i) + bias)

尽管结构简单,感知机只能解决线性可分的问题(如逻辑与、逻辑或),但它奠定了神经网络的基础。

2. 多层感知机(MLP)

为了克服单层感知机的局限性,研究人员提出了多层感知机(Multi-layer Perceptron),它由输入层、一个或多个隐藏层和输出层组成。然而,早期的多层网络面临训练困难的问题,直到反向传播(Backpropagation)算法的出现。

3. 反向传播与深度学习的第一次浪潮

20世纪80年代,反向传播算法的普及解决了多层网络的训练问题。这一算法通过计算损失函数对网络参数的梯度,并沿着梯度的反方向调整参数,从而最小化预测误差。

在这里插入图片描述

4. 深度学习的复兴与突破

尽管理论基础早已建立,但直到21世纪初,深度学习才真正取得突破性进展。这主要得益于三个关键因素:

  • 大规模数据:互联网时代产生的海量数据为模型训练提供了充足的素材
  • 计算能力:GPU等并行计算设备的发展大幅提升了训练速度
  • 算法创新:新的网络结构和优化算法不断涌现

2012年,AlexNet在ImageNet图像分类竞赛中的惊人表现标志着深度学习时代的到来。此后,各种网络架构如卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)和Transformer等推动了深度学习在各个领域的应用。

三、安装深度学习框架

要开始深度学习之旅,我们首先需要安装相应的框架。目前最流行的两个深度学习框架TensorFlowPyTorch,它们各有特色,都值得学习。在这里插入图片描述

1. TensorFlow 入门安装与配置

TensorFlow是由Google开发的开源深度学习框架,以其强大的生产部署能力和完善的生态系统而著名。

(1) 使用pip安装TensorFlow
# 安装CPU版本的TensorFlow
pip install tensorflow# 或者安装支持GPU的版本(需要CUDA和cuDNN)
pip install tensorflow-gpu

在这里插入图片描述
在这里插入图片描述

注意:从TensorFlow 2.0开始,tensorflow-gpu包已合并到tensorflow包中,安装时会自动检测并使用可用的GPU。

(2) 验证安装

安装完成后,可以运行以下代码验证TensorFlow是否正确安装:

import tensorflow as tf
print("TensorFlow版本:", tf.__version__)# 检查是否可以使用GPU
print("可用的GPU设备:", tf.config.list_physical_devices('GPU'))

在这里插入图片描述

(3) TensorFlow环境配置建议
  • Python版本:推荐使用Python 3.7-3.9
  • 虚拟环境:建议使用Anaconda或venv创建独立的环境
  • GPU支持:如需GPU加速,请安装与TensorFlow兼容的CUDA和cuDNN版本
  • 内存要求:至少8GB RAM,深度模型训练建议16GB以上

2. PyTorch 入门安装与配置

PyTorch是由Facebook(Meta)AI研究团队开发的深度学习框架,以其动态计算图和直观的Python接口而受到研究人员的青睐。

(1) 使用pip安装PyTorch

PyTorch的安装需要根据你的操作系统和CUDA版本选择适当的命令。访问PyTorch官网(https://pytorch.org/get-started/locally/)可获取最适合你系统的安装命令。

以下是一个通用的安装命令示例:

# 安装CPU版本
pip install torch torchvision torchaudio# 安装支持CUDA 11.6的GPU版本
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116

在这里插入图片描述
在这里插入图片描述

(2) 验证安装

使用以下代码验证PyTorch是否正确安装:

import torch
print("PyTorch版本:", torch.__version__)# 检查CUDA是否可用
print("CUDA是否可用:", torch.cuda.is_available())
if torch.cuda.is_available():print("CUDA设备数量:", torch.cuda.device_count())print("当前CUDA设备:", torch.cuda.get_device_name(0))

在这里插入图片描述

(3) PyTorch环境配置建议
  • Python版本:推荐Python 3.7-3.9
  • 虚拟环境:同样推荐使用Anaconda管理环境
  • GPU支持:确保安装与PyTorch兼容的CUDA版本
  • 额外包:通常需要安装NumPy、Matplotlib等辅助包

四、编写第一个深度学习程序(Hello World)

了解了基本概念并完成环境配置后,让我们编写一个简单的深度学习程序,这就是深度学习领域的"Hello World"。我们将使用最简单的全连接神经网络来解决一个二分类问题

下面分别用TensorFlow和PyTorch实现同一个任务,你可以根据个人喜好选择其中一个框架开始学习。

1. TensorFlow实现

import tensorflow as tf
import numpy as np
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as pltimport numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from mpl_toolkits.mplot3d import Axes3D# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 1. 生成螺旋形数据(一个经典的非线性二分类问题)
X, y = make_circles(n_samples=1000, noise=0.1, factor=0.2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 2. 构建神经网络模型
model = tf.keras.Sequential([tf.keras.layers.Dense(10, activation='relu', input_shape=(2,)),  # 隐藏层,10个神经元tf.keras.layers.Dense(10, activation='relu'),                   # 第二个隐藏层tf.keras.layers.Dense(1, activation='sigmoid')                  # 输出层,二分类问题
])# 3. 编译模型
model.compile(optimizer='adam',                      # Adam优化器loss='binary_crossentropy',            # 二分类的损失函数metrics=['accuracy']                   # 评估指标
)# 4. 训练模型
history = model.fit(X_train, y_train,epochs=50,                             # 训练轮数batch_size=32,                         # 批量大小validation_data=(X_test, y_test),      # 验证数据verbose=1                              # 显示进度
)# 5. 评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f"测试集准确率: {accuracy:.4f}")# 6. 可视化训练过程
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='训练准确率')
plt.plot(history.history['val_accuracy'], label='验证准确率')
plt.xlabel('Epoch')
plt.ylabel('准确率')
plt.legend()plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='训练损失')
plt.plot(history.history['val_loss'], label='验证损失')
plt.xlabel('Epoch')
plt.ylabel('损失')
plt.legend()
plt.show()# 7. 可视化决策边界
def plot_decision_boundary(model, X, y):# 定义网格h = 0.01x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# 预测网格中每个点的类别Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.3)plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')plt.xlabel('特征1')plt.ylabel('特征2')plt.title('决策边界')plt.show()plot_decision_boundary(model, X, y)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. PyTorch实现

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 设置随机种子确保可重复性
torch.manual_seed(42)# 1. 生成数据
X, y = make_circles(n_samples=1000, noise=0.1, factor=0.2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 转换为PyTorch张量
X_train = torch.FloatTensor(X_train)
X_test = torch.FloatTensor(X_test)
y_train = torch.FloatTensor(y_train).reshape(-1, 1)
y_test = torch.FloatTensor(y_test).reshape(-1, 1)# 2. 定义神经网络模型
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.layer1 = nn.Linear(2, 10)  # 输入层到第一个隐藏层self.layer2 = nn.Linear(10, 10) # 第一个隐藏层到第二个隐藏层self.layer3 = nn.Linear(10, 1)  # 第二个隐藏层到输出层self.relu = nn.ReLU()         # ReLU激活函数self.sigmoid = nn.Sigmoid()   # Sigmoid激活函数def forward(self, x):x = self.relu(self.layer1(x))x = self.relu(self.layer2(x))x = self.sigmoid(self.layer3(x))return xmodel = SimpleNN()# 3. 定义损失函数和优化器
criterion = nn.BCELoss()  # 二元交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.01)  # Adam优化器# 4. 训练模型
num_epochs = 50
batch_size = 32
train_losses = []
val_losses = []
train_accs = []
val_accs = []for epoch in range(num_epochs):# 训练模式model.train()for i in range(0, len(X_train), batch_size):# 获取小批量数据inputs = X_train[i:i+batch_size]targets = y_train[i:i+batch_size]# 前向传播outputs = model(inputs)loss = criterion(outputs, targets)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 评估模式model.eval()with torch.no_grad():# 训练集评估train_outputs = model(X_train)train_loss = criterion(train_outputs, y_train).item()train_acc = ((train_outputs > 0.5).float() == y_train).float().mean().item()# 验证集评估val_outputs = model(X_test)val_loss = criterion(val_outputs, y_test).item()val_acc = ((val_outputs > 0.5).float() == y_test).float().mean().item()train_losses.append(train_loss)val_losses.append(val_loss)train_accs.append(train_acc)val_accs.append(val_acc)if (epoch+1) % 10 == 0:print(f'Epoch {epoch+1}/{num_epochs}, 训练损失: {train_loss:.4f}, 验证损失: {val_loss:.4f}, 训练准确率: {train_acc:.4f}, 验证准确率: {val_acc:.4f}')# 5. 可视化训练过程
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(train_accs, label='训练准确率')
plt.plot(val_accs, label='验证准确率')
plt.xlabel('Epoch')
plt.ylabel('准确率')
plt.legend()plt.subplot(1, 2, 2)
plt.plot(train_losses, label='训练损失')
plt.plot(val_losses, label='验证损失')
plt.xlabel('Epoch')
plt.ylabel('损失')
plt.legend()
plt.show()# 6. 可视化决策边界
def plot_decision_boundary(model, X, y):# 定义网格h = 0.01x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# 预测网格中每个点的类别grid = torch.FloatTensor(np.c_[xx.ravel(), yy.ravel()])with torch.no_grad():Z = model(grid).reshape(-1).numpy()Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.3)plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')plt.xlabel('特征1')plt.ylabel('特征2')plt.title('决策边界')plt.show()plot_decision_boundary(model, X, y)

在这里插入图片描述
在这里插入图片描述

五、练习:运行一个简单的神经网络模型

对于初学者来说,理解深度学习的最好方式是亲自动手实践。下面提供一个简单的练习,帮助你巩固今天学到的知识。

练习:使用深度学习识别手写数字

MNIST数据集是机器学习中的"Hello World"数据集,包含了0-9的手写数字图像。这个练习将带你完成一个简单的手写数字识别模型。

TensorFlow版本
import tensorflow as tf
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np# 1. 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 2. 数据预处理
# 归一化像素值到0-1之间
x_train = x_train / 255.0
x_test = x_test / 255.0# 3. 构建模型
model = tf.keras.Sequential([# 将28x28的图像展平为784个特征tf.keras.layers.Flatten(input_shape=(28, 28)),# 第一个隐藏层,128个神经元tf.keras.layers.Dense(128, activation='relu'),# 第二个隐藏层tf.keras.layers.Dense(64, activation='relu'),# 输出层,10个类别(数字0-9)tf.keras.layers.Dense(10, activation='softmax')
])# 4. 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy']
)# 5. 训练模型
history = model.fit(x_train, y_train,epochs=10,batch_size=64,validation_data=(x_test, y_test)
)# 6. 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"测试准确率: {test_acc:.4f}")# 7. 可视化一些预测结果
predictions = model.predict(x_test)plt.figure(figsize=(15, 6))
for i in range(10):plt.subplot(2, 5, i+1)plt.imshow(x_test[i], cmap='gray')predicted_label = np.argmax(predictions[i])true_label = y_test[i]plt.title(f"预测: {predicted_label}, 实际: {true_label}")plt.axis('off')
plt.tight_layout()
plt.show()

在这里插入图片描述
在这里插入图片描述

拓展练习

  1. 尝试调整网络结构(增加/减少层数、改变神经元数量)
  2. 实验不同的优化器(SGD、RMSprop等)
  3. 添加批归一化(Batch Normalization)层或Dropout层来提高模型性能
  4. 将全连接网络改为卷积神经网络(CNN)来提高识别准确率

六、总结与展望

今天,我们踏入了深度学习的世界,了解了它与传统机器学习的区别,神经网络的发展历程,以及如何搭建深度学习环境并运行第一个神经网络模型。这仅仅是深度学习旅程的起点,未来我们将探索更多精彩内容:

  • 卷积神经网络(CNN)及其在计算机视觉中的应用
  • 循环神经网络(RNN)和LSTM在序列数据处理中的应用
  • Transformer架构和其在自然语言处理中的革命性影响
  • 生成对抗网络(GAN)和扩散模型等生成模型
  • 强化学习的基本概念与应用

深度学习是一个不断发展的领域,新的算法和技术层出不穷。保持学习的热情,跟随最新的研究进展,你将能够利用这些强大的工具解决各种复杂问题。

在这里插入图片描述

理论知识固然重要,但真正的学习来自于动手实践。尝试修改今天的代码,构建自己的模型,解决自己感兴趣的问题。只有这样,你才能真正掌握深度学习的精髓。

明天,我们将深入探讨卷积神经网络及其在图像处理中的应用。敬请期待!

参考资源

  1. TensorFlow官方文档:https://www.tensorflow.org/
  2. PyTorch官方教程:https://pytorch.org/tutorials/
  3. 《动手学深度学习》:https://d2l.ai/
  4. 《深度学习》(花书),Ian Goodfellow等著
  5. Andrew Ng的深度学习课程:https://www.coursera.org/specializations/deep-learning

学习永无止境,明天再会!

创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!

相关文章:

《Python星球日记》 第50天:深度学习概述与环境搭建

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是深度学习?它与传统机器学习的区别1. 深度学习的定义2. 深…...

BUUCTF——Cookie is so stable

BUUCTF——Cookie is so stable 进入靶场 页面有点熟悉 跟之前做过的靶场有点像 先简单看一看靶场信息 有几个功能点 flag.php 随便输了个admin 根据题目提示 应该与cookie有关 抓包看看 构造payload Cookie: PHPSESSIDef0623af2c1a6d2012d57f3529427d52; user{{7*7}}有…...

Java 基础面试题

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

bcm5482 phy 场景总结

1,BCM5482是一款双端口10/100/1000BASE-T以太网PHY芯片,支持多种速率和双工模式。其配置主要通过MDIO(Management Data Input/Output)接口进行,MDIO接口用于访问PHY芯片内部的寄存器,从而配置网络速率、双工模式以及其他相关参数。 a,具体以下面两种场景举例 2. 寄存器和…...

小程序多线程实战

在小程序开发中,由于微信小程序的运行环境限制,原生并不支持传统意义上的多线程编程,但可以通过以下两种核心方案实现类似多线程的并发处理效果,尤其在处理复杂计算、避免主线程阻塞时非常关键: 一、官方方案&#xff…...

PPT图表怎么制作?说5款自己使用过的PPT图表制作工具

PPT图表怎么制作?准备一份吸引人的PPT演示文稿时,图表往往能起到画龙点睛的作用。但是,对于很多人来说,制作既美观又专业的图表却不是一件容易的事情。今天,我们就来聊聊如何利用一些优秀的工具制作PPT图表。 1、亿图图…...

渠道销售简历模板范文

模板信息 简历范文名称:渠道销售简历模板范文,所属行业:其他 | 职位,模板编号:KRZ3J3 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…...

数据库实验10

设计性实验 1.实验要求 1.编写函数FsumXXX,1~n(参数)求和; GO CREATE FUNCTION Fsum065 (n INT) RETURNS INT AS BEGIN DECLARE sum INT 0 WHILE n > 0 BEGIN SET sum sum n SET n n - 1 END RETURN sum END …...

C#异步Task,await,async和Unity同步协程

标题 TaskawaitasyncUnity协程 Task Task是声明异步任务的必要关键字&#xff0c;也可以使用Task<>泛型来定义Task的返回值。 await await是用于等待一个Task结束&#xff0c;否则让出该线程控制权&#xff0c;让步给其他线程&#xff0c;直到该Task结束才往下运行。 …...

【ML-Agents】ML-Agents示例项目导入unity报错解决

最近在跑ML-Agents的示例代码&#xff0c;无奈往unity中导入项目后&#xff0c;就出现报错。本文简要描述了各个报错的解决方法。 文章目录 一、error CS0234: The type or namespace name InputSystem does not exist in the namespace UnityEngine (are you missing an assem…...

【Web前端开发】HTML基础

Web前端开发是用来直接给用户呈现一个一个的网页&#xff0c;主要包含实现用户的结构&#xff08;HTML&#xff09;、样式&#xff08;CSS&#xff09;、交互&#xff08;JavaScript&#xff09;。然而一个软件通常是由后端和前端完成的。可以查阅文档&#xff1a;HTML 教程 (w…...

spark-哈希join介绍

目录 1. Shuffle Join 和 Hash Join 的复杂度1.1 Shuffle Join1.2 Hash Join 2. 哈希算法的原理2.1 什么是哈希算法&#xff1f;2.2 哈希算法的工作原理2.3 常见哈希函数 3. 哈希算法的弊端3.1 哈希碰撞3.2 哈希分布不均匀3.3 哈希值不可逆 4. 哈希碰撞的处理方法4.1 链地址法4…...

计算机网络与多线程同步机制详解

一、IP地址与子网划分 在互联网世界中&#xff0c;IP地址就像是每个设备的"门牌号"&#xff0c;它使得数据包能够准确送达目的地。IP地址的划分与管理就像城市的规划&#xff0c;通过合理的子网划分&#xff0c;能够高效地管理网络资源。 子网掩码的工作原理 子网…...

栈溢出攻击最基本原理

函数在调用的过程中&#xff0c;函数在调用之前呢&#xff0c;会将调用完这个函数之后的下一条命令的地址保存到LR中。 void func() {int a[4];a[6] 100; } 这个函数在用gcc编译的时候是不会报错的&#xff0c;所以我们可以在尝试之后&#xff0c;修改LR的值&#xff0c;让代…...

ChemDraw、InDraw、KingDraw有什么差别?

在化学相关的科研与教学领域&#xff0c;一款好用的结构式编辑器至关重要&#xff0c;ChemDraw因此闻名&#xff1b;但近年来&#xff0c;ChemDraw代理商频繁发送律师函&#xff0c;给学校和企业带来诸多困扰&#xff0c;促使大家纷纷寻找替代软件。InDraw和KingDraw这两款软件…...

NVMe控制器IP设计之接口模块

这是NVMe控制器IP设计系列博客之一&#xff0c;其他的见本博客或csdn搜用户名&#xff1a;tiantianuser。相关视频见B站用户名&#xff1a;专注与守望。 接口转换模块负责完成AXI4接口与控制器内部的自定义接口之间的转换工作。接口转换模块的框图如图1所示。 图1 接口转换示…...

从0开始学linux韦东山教程第三章问题小结(2)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。 摘要关键词&#xff1a;PC远程访问ubuntu配置&#xff0c;ubuntu配置uboot环境&#xff0c;串口控制开发板 本文详细介绍以下问题&…...

JS正则表达式介绍(JavaScript正则表达式)

文章目录 JavaScript正则表达式完全指南正则表达式基础元字符与特殊字符基本元字符. - 点号\d - 数字\D - 非数字\w - 单词字符\W - 非单词字符\s - 空白字符\S - 非空白字符 正则表达式标志常用标志详解g - 全局匹配i - 忽略大小写m - 多行匹配s - 点号匹配所有字符u - Unicod…...

(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)

前言&#xff1a; 本次Timer0模块改装了一下&#xff0c;注意&#xff01;&#xff01;&#xff01;今天只是简单的实现一下&#xff0c;明天用次功能显示遥控密码锁 演示视频&#xff1a; 在审核 源代码&#xff1a; 如上图将9个文放在Keli5 中即可&#xff0c;然后烧录在…...

关于单片机的基础知识(一)

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于单片机基础知识的相关内容&#xf…...

操作系统学习笔记第2章 (竟成)

第 2 章 进程管理 【考纲内容】 1.进程与线程&#xff1a; (1) 进程 / 线程的基本概念&#xff1b; (2) 进程 / 线程的状态与转换&#xff1b; (3) 线程的实现&#xff1a;内核支持的线程&#xff1b;线程库支持的线程&#xff1b; (4) 进程与线程的组织与控制&#xff1b; (5)…...

《从零开始:构建你的第一个区块链应用》

一、引言 区块链技术&#xff0c;这个曾经只在金融领域被广泛讨论的技术&#xff0c;如今已经渗透到各个行业。从供应链管理到智能合约&#xff0c;区块链的应用场景越来越丰富。对于开发者来说&#xff0c;理解区块链的基本原理并构建一个简单的区块链应用&#xff0c;是进入这…...

[思维模式-24]:《本质思考力》-5- 马克思主义毛泽东思想揭示了了人类社会运作的普遍规律有哪些?

目录 一、马克思主义毛泽东思想揭示了了人类社会运作的普遍规律有哪些&#xff1f; 1、生产力与生产关系的辩证运动规律 2、阶级斗争与社会革命规律 3、社会形态演变规律 4、人民群众是历史创造者的规律 5、社会基本矛盾运动规律 6、认识与实践的辩证关系规律 二、马克…...

CentOS7.9部署FunASR实时语音识别接口 | 部署商用级别实时语音识别接口FunASR

0. 环境说明 本次在云服务器中部署一套实时语音识别接口&#xff0c;基于阿里开源的FunASR。 云服务器使用莱卡云&#xff0c;4核心4GB内存50GB存储空间&#xff0c;带宽10Mbps。 操作系统使用CentOS7.9 视频演示可以看 云服务器中部署实时语音识别接口 | FunASR在云服务器…...

炫酷粒子系统动画实战:Matplotlib实现银河漩涡效果

炫酷粒子系统动画实战&#xff1a;Matplotlib实现银河漩涡效果 效果演示&#xff1a;银河粒子漩涡核心代码分析1. 粒子系统初始化2. 动画更新函数3. 渲染优化技巧 完整实现代码Matplotlib的动画模块介绍​核心类对比核心功能分点注意事项 效果演示&#xff1a;银河粒子漩涡 动…...

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL

ICLR 2025 spotlight paper 构建能够在少量样本下学习出优良策略的深度强化学习&#xff08;RL&#xff09;智能体一直是一个极具挑战性的任务。为了提高样本效率&#xff0c;近期的研究尝试在每获取一个新样本后执行大量的梯度更新。尽管这种高更新-数据比&#xff08;UTD&am…...

机器学习第四讲:无监督学习 → 给无标签积木自由组合,发现隐藏规律

机器学习第四讲&#xff1a;无监督学习 → 给无标签积木自由组合&#xff0c;发现隐藏规律 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细…...

Vue 两种导航方式

目录 一、声明式导航 二、编程式导航 三、两句话总结 一、声明式导航 1. 传参跳转&#xff1a; <router-link :to"/user?nameCHEEMS&id114514">Query传参 </router-link><router-link :to"/user?参数名1参数值1&参数名2参数值2&a…...

HTTP 的发展史:从前端视角看网络协议的演进

别再让才华被埋没&#xff0c;别再让github 项目蒙尘&#xff01;github star 请点击 GitHub 在线专业服务直通车GitHub赋能精灵 - 艾米莉&#xff0c;立即加入这场席卷全球开发者的星光革命&#xff01;若你有快速提升github Star github 加星数的需求&#xff0c;访问taimili…...

Spring 必会之微服务篇(2)

经过上一篇文章的介绍,应该对微服务有了基本的认识,以及为什么要用微服务和微服务要面临的挑战和对应的解决问题,这一期继续聊聊关于微服务的相关知识。 服务拆分 为什么拆 对于大多数的小型项目来说,一般是先采用单体架构,但是随着后面的用户规模变大,业务越来越复杂…...

21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划

从这篇文章开始我们将开始一步一步的拆分现有的单体应用孢子记账项目。按照上一篇文章中的介绍&#xff0c;我们首先把身份认证服务拆分出来。 一、功能分析 在当前的单体应用中&#xff0c;身份认证服务主要负责用户认证、授权以及角色权限管理等核心功能。 在拆分之前&…...

人工智能100问☞第19问:什么是专家系统?

目录 一、通俗解释 二、专业解析 ​三、权威参考 专家系统是基于​​知识库​​(存储专家经验与规则)和​​推理机​​(模拟专家逻辑判断)的人工智能程序,能在特定领域(如医疗诊断、工业控制)高效解决复杂问题。 一、通俗解释 ​​专家系统​​就像个“智能版老师傅…...

AutoGen+Deepseek+chainlit的简单使用

AutoGen 的应用场景 AutoGen 作为一个强大的多智能体协作框架&#xff0c;可用于多种复杂任务&#xff1a; 自动化工作流&#xff1a;构建由多个智能体组成的流水线&#xff0c;例如数据收集、分析、报告生成复杂问题分解&#xff1a;将难题拆解为子任务&#xff0c;分配给不…...

贪心算法专题(Part1)

目录 1. 贪心算法简介 2. 柠檬水找零 3. 将数组和减半的最少操作次数 4. 递增的三元子序列 5. K次取反后最大化的数组和 6. 增减字符串匹配 7. 分发饼干 8. 整数替换 1. 贪心算法简介 2. 柠檬水找零 题目链接&#xff1a;860. 柠檬水找零 - 力扣&#xff08;LeetCode…...

PyTorch API 4 - 分布式通信、分布式张量

文章目录 分布式通信包 - torch.distributed后端支持PyTorch 内置的后端选择哪个后端&#xff1f;常见环境变量选择使用的网络接口其他NCCL环境变量 基础概念初始化返回类型&#xff1a;boolTCP初始化共享文件系统初始化环境变量初始化方法 初始化后操作关闭处理重新初始化 组D…...

《类和对象(中)》

引言&#xff1a; 上次我们主要学习了类的相关知识&#xff0c;今天我们就来学习类和对象(中)&#xff0c;今天也会用到之前学习过的东西&#xff0c;可以说是前面知识的结合&#xff0c;较前面会难一点&#xff08;打个预防针&#xff09;。 一&#xff1a;类的默认成员函数…...

SSH终端登录与网络共享

SSH 是较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议 注意 SSH终端登录的前提是&#xff1a;电脑和板卡都能够通过网络相连接及通信 与连接互联网不一样&#xff0c;SSH可以不用互联网&#xff0c;只要电脑和板卡组成一个小型网络即可 网络方案 如果您…...

n8n系列(5):LangChain与大语言模型应用

引言 n8n作为一个强大的工作流自动化平台,可以通过集成LangChain框架,为用户提供了便捷地利用OpenAI、Azure OpenAI等大语言模型的能力。 本文将深入探讨n8n中的AI集成功能,特别是LangChain节点的使用,以及如何构建智能化的工作流程来解决实际业务问题。 1. n8n的AI集成概…...

springboot3+vue3融合项目实战-大事件文章管理系统-更新用户信息

在一下三个代码处进行修改 在UserController里面增加uadate方法 PutMapping ("/update")public Result update(RequestBody Validated User user){userService.update(user);return Result.success();}在userservice中增加update方法 void update(User user); 然…...

20250510-查看 Anaconda 配置的镜像源

打开 Anaconda Prompt 查看 Anaconda 当前配置的镜像源&#xff0c;使用命令 conda config --show channels这将显示当前配置的通道&#xff08;channels&#xff09;&#xff0c;即镜像源列表。 此外&#xff0c;还可以使用 conda config --show命令来显示conda的配置信息&…...

CDGP数据治理主观题评分标准与得分策略

1.数据模型题目评分标准 1)准确理解题目中所描述的业务逻辑和需求得[1分] 2)正确使用模型设计方法,使用信息工程、信息建模集成定义、巴克符号、陈氏符号等其中一种得[1分] 3)正确设计实体和属性,题目中涉及的实体数量为25-30个,10个以内得[2分],10-20个得[3分],25个…...

[学习]RTKLib详解:sbas.c与rtcm.c

RTKLib详解&#xff1a;sbas.c与rtcm.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解&#xff1a;pntp…...

【基础IO下】磁盘/软硬链接/动静态库

前言&#xff1a; 文件分为内存文件和磁盘文件。磁盘文件是一个特殊的存在&#xff0c;因为磁盘文件不属于冯诺依曼体系&#xff0c;而是位于专门的存储设备中。因此&#xff0c;磁盘文件存在的意义是将文件更好的存储起来&#xff0c;一边后续对文件进行访问。在高效存储磁盘…...

JAVA练习题(1) 卖飞机票

import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入飞机的票价&#xff1a;");int pricesc.nextInt();System.out.println("请输入月份&#xff1a;");…...

SpringBoot框架开发网络安全科普系统开发实现

概述 基于SpringBoot框架的网络安全科普系统开发指南&#xff0c;该系统集知识科普、案例学习、在线测试等功能于一体&#xff0c;本文将详细介绍系统架构设计、功能实现及技术要点&#xff0c;帮助开发者快速构建专业的网络安全教育平台。 主要内容 系统功能架构 本系统采…...

机器学习 day02

文章目录 前言一、TF-IDF特征词重要度特征提取二、无量纲化处理1.最大最小值归一化2.normalize归一化3.StanderScaler标准化 前言 通过今天的学习&#xff0c;我掌握了TF-IDF特征词重要度特征提取以及无量纲化处理的相关知识和用法 一、TF-IDF特征词重要度特征提取 机器学习算…...

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…...

计网学习笔记———网络

&#x1f33f;网络是泛化的概念 网络是泛化的概念 &#x1f342;泛化理解 网络的概念在生活中无处不在举例&#xff1a;社交网络、电话网路、电网、计算机网络 &#x1f33f;网络的定义 定义&#xff1a; 离散的个体通过通讯手段连成群体&#xff0c;实现资源的共享与交流、个…...

Vue3 怎么在ElMessage消息提示组件中添加自定义icon图标

1、定义icon组件代码&#xff1a; <template><svg :class"svgClass" aria-hidden"true"><use :xlink:href"iconName" :fill"color"/></svg> </template><script> export default defineComponen…...

17.Excel:实用的 VBA 自动化程序

一 excel 设置 开始-选项 二 批量创建工作表 某工作簿用于保存31天的东西&#xff0c;手动创建31个工作表不方便。 A1单元格输入内容&#xff0c;或者空着。从A2单元格开始&#xff0c;一定要以字符形式的&#xff0c;不能以数值和日期形式。12345这是数值形式&#xff0c;1月…...