DeepLearning笔记

1.环境配置

安装anaconda:  直接在anaconda.com官网里面下载然后安装

Anaconda的理解(到底需不需要它呢)?
总结:Anaconda 是一个“环境+包管理平台”,帮你快速配置、隔离、管理深度学习环境。
    但深度学习不用 Anaconda 也完全可以跑,它只是帮你“更方便、更省心”地管理环境而已。
本质:一套 Python 发行版 + 虚拟环境管理器 + 常用科学计算库(numpy、pandas、torch 等)。
优点:“东西很全”
缺点:(尤其是在ubuntu环境)
    修改 PATH 后容易“劫持”系统 Python;与 ROS、系统 Python 或 apt 安装的软件冲突严重

查看显卡信息和对应的可使用的最高等级的cuda版本:nvidia-smi

然后通过conda创建env:conda create -n envpytorch python=3.12.07

激活虚拟环境: conda activate envpytorch

配置环境: pip install -r requirements.txt

安装pytorch(Cuda会跟着一起安装下来): 直接在pytorch.com官网的指令在对应的虚拟环境里面安装

测试在env里是否安装成功pytorch: python; import torch; torch.cuda.is_available()-->True;

在vscode右下角可以选择当前文件使用的解释器,选择env\envpytorch解释器就行

2.使用tips

dir()可以查看某个包里面含有什么东西,如dir(torch)

help()解释某个函数的用法,如help(torch.cuda.is_available)

3.基础使用(多去pytorch.com里面的Doc里面查看用法,或者pytorch各种用法doc)

  • tensorboard工具库,可以用来展示训练进程的图像:from torch.utils.tensorboard import SummaryWriter;        在终端查看:tensorboard --logdir="logs"
  • torchvision.datasets.CIFAR10()可以获取pytorch官方的一些数据集,通过__getitem__查看这个实例化对象里面获取的是什么一般为img, target。(train_dataset[0])
    train_dataset = torchvision.datasets.CIFAR10(root="./cifar10_dataset",
                                 train=True,
                                 transform=torchvision.transforms.ToTensor(),
                                 download=True)    # ctrl+P可查看所需参数

  • dataloader用来批量抓取数据集数据:from torch.utils.data import DataLoader

    test_dataset_dataloader = DataLoader(test_dataset, batch_size=64, shuffle=True, drop_last=True, num_workers=0)
    
    writer = SummaryWriter(log_dir="./logs")
    
    for epoch in range(2):
        writer_step = 0
        for datas in test_dataset_dataloader:
            imgs, targets = datas
            writer.add_images("epoch:{}".format(epoch), imgs, global_step=writer_step)
            writer_step += 1
    writer.close()
    

4. argparse()模块的使用

argparse 是 Python 标准库中专门用来处理 命令行参数 的模块

用途:可以通过命令行运行脚本时传入不同的参数,而不需要手动改代码,比如:

python train.py --epochs 50 --batch-size 16 --use-rgb 1 

程序通过 argparse 自动解析这些参数,把它们变成可以用的变量。

# 基本使用架构
import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='说明你这个程序是干嘛的')

    # 添加参数
    parser.add_argument('--参数名', type=类型, default=默认值, help='参数说明')

    # 解析参数
    args = parser.parse_args()
    return args
#使用示例

import argparse

def parse_args():
    
    parser = argparse.ArgumentParser(description="Train network")
    
    # normal argument
    parser.add_argument('--network', type=str, default='grconvnet3',
                        help='Network name in inference/models')
    parser.add_argument('--input-size', type=int, default=224,
                        help='Input image size for the network')
    
    # bool flag  # 只要你在命令行中写了 --vis,它就变成 True; 不写就为False 
    parser.add_argument('--vis', action='store_true', 
                        help='Visualiable the training process')    

    args = parser.parse_args()
    
    return args


if __name__ == "__main__":
    
    args = parse_args()
    print(args.input_size)    # 注意,这里是下划线


# 命令行中
bash
python train.py --vis --input-size 224   # 注意,这里是中划线

# 原因:因为 Python 中的变量名不能包含 -,所以 argparse 会自动把 --input-size 转成 input_size 这个属性名。

5.关于运行ros2与conda冲突的案例

在使用conda创建的venv环境下运行一个包含gazebo的项目时候报错:

client-8] gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const [with T = gazebo::rendering::Camera; typename boost::detail::sp_member_access<T>::type = gazebo::rendering::Camera*]: 断言 "px != 0" 失败。
[ERROR] [gzclient-8]: process has died [pid 69106, exit code -6, cmd 'gzclient --gui-client-plugin=libgazebo_ros_eol_gui.so'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) aga

而通过conda deactivate退出来再用系统环境运行的时候是没错的。

分析:

这是典型的 Gazebo GUI(gzclient)在 Conda 环境下 crash 的情况。原因和 Python 环境无关,而是和 Conda 对系统库(尤其是 Qt / OpenGL / Boost)的隔离 有关。

原因分析

Gazebo GUI 依赖系统的 Qt、OpenGL、Boost 库。

Conda 环境可能带了自己版本的 libboost、libGL 或 Qt,和系统 Gazebo 的库冲突。

报错信息:gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: ... 断言 "px != 0" 失败。
表明 Boost smart_ptr 在访问渲染 Camera 时出错,典型是 ABI 不匹配 / 多版本冲突。

在系统环境下没问题,说明系统的 Qt / Boost / Gazebo 库正常。

Conda 环境隔离了系统库,可能:

加载了 Conda 自带的 libboost、libGL、libQt5Core.so 等

这些库版本和 ROS2 / Gazebo 预编译包不兼容 → gzclient crash
建议:
  • 对于 ROS2 + Gazebo GUI,不要在 Conda 环境里运行 gzclient,用系统 Python/系统库环境运行 Gazebo。

  • Conda 环境可以用来运行你自己的 ROS2 节点、YOLO 等 Python 包,但不要让它接管系统的 GUI 库。

### 关于《Dive into Deep Learning》学习笔记 #### 笔记概述 《Dive into Deep Learning》是一本全面介绍深度学习理论与实践的书籍。该书不仅涵盖了基础概念,还深入探讨了实际应用中的各种技巧和技术细节。对于希望深入了解深度学习原理及其实施方法的学习者来说是非常有价值的资源。 #### 主要内容摘要 书中介绍了多种核心主题,包括但不限于: - **线性代数表示法的应用** 使用矩阵运算可以有效地简化复杂计算过程,并显著提升程序运行效率[^4]。 - **模型评估机制** 构建有效的损失函数用于衡量预测值与真实标签之间的差异程度;采用随机梯度下降(SGD)作为参数调整手段以逐步逼近最优解。 - **批处理技术的作用** 小批量(Batch)训练模式允许一次迭代中同时考虑多个样本来加快收敛速度并增强泛化能力。 - **概率论视角下的回归分析** 当假设残差服从正态分布时,最小二乘法求得的最佳拟合直线实际上就是使似然函数最大化的结果。 #### 实践案例分享 为了更好地理解上述知识点,《Dive into Deep Learning》提供了丰富的实例代码片段供读者动手实验。例如,在实现简单线性回归任务时,展示了如何定义前向传播路径以及反向传播过程中权重更新的具体逻辑: ```python import torch from d2l import torch as d2l def linreg(X, w, b): #@save """The linear regression model.""" return torch.matmul(X, w) + b def squared_loss(y_hat, y): #@save """Squared loss.""" return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2 def sgd(params, lr, batch_size): #@save """Minibatch stochastic gradient descent.""" with torch.no_grad(): for param in params: param -= lr * param.grad / batch_size param.grad.zero_() ``` 这些例子有助于加深对抽象概念的理解,并为后续更复杂的网络架构设计打下坚实的基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值