记录学习《手动学习深度学习》这本书的笔记(二)

这几天看完了第5章:深度学习计算,做个总结。

第五章:深度学习计算

5.1 层和块

介绍了神经网络的层和块。

层:①接收一组输入②生成相应输出③具有一组可调整参数

块:描述单个或多个层,或多个快,甚至整个模型。从编程角度,块由**类(class)**表示,其中包含前向传播函数和一些必要的参数。

python 复制代码
from mxnet import np, npx
from mxnet.gluon import nn

npx.set_np()

net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'))
net.add(nn.Dense(10))
net.initialize()

X = np.random.uniform(size=(2, 20))
net(X)

这样就实现了一个块,包含一个带激活函数的含256个神经元的全连接层和一个10个神经元的全连接层。

net(X)在这里相当于net.call(X)(默认调用函数),作用是将X前向传播得出预测的y。

python 复制代码
Class MLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.hidden = nn.Linear(20, 256) 
        self.out = nn.Linnear(256, 10)
        # 括号里两个参数分别代表输入维度和输出维度
    
    def forward(self, X):
        return self.out(F.relu(self.hidden(X)))

net = MLP()
net(X)

这样就手动实现了一个块。

nn.Module的默认调用函数是forward,所以net(X)运行的其实是net.forward(X)。

然后再来实现一个可以自定义的块:

python 复制代码
class mySequential(nn.Module):
    def __init__(self, *args):
        super().__init__()
        for idx, module in enumerate(args):
            self._modules[str(idx)] = module

    def forward(self, X):
        for block in self._modules.values():
            X = block(X)
        return X

net = MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))
net(X)

5.2 参数管理

这里介绍了一些关于神经网络参数的知识。

比如我们可以用函数访问参数:

python 复制代码
net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8,1))

print(net[2].state_dict())

state_dict()用于获取模型参数和缓冲区(如权重和偏置)的字典,访问第三层的weight和bias。

python 复制代码
print(net[2].bias)
print(net[2].bias.data)

输出偏置和参数类的实例。

还可以一次性输出模型全部参数,还有另一种输出模型参数的方式,还可以输出嵌套块的参数。

还有参数绑定:

python 复制代码
shared = nn.Linear(8, 8)
net = Sequential(shared, nn.ReLU(), shared)

这时改变一个,另一个也会变。

5.5 读写文件

可以将张量加载或保存,也可以将模型加载或保存。

5.6 GPU

计算机中有CPU和GPU两种处理器(设备),默认情况下变量和计算都保存在CPU中,CPU和GPU可以用torch.device('cpu')和torch.device('cuda')表示。

CPU代表所有物理CPU和内存,GPU只代表一个卡和显存。

python 复制代码
def try_gpu(i = 0):
    if torch.cuda.device_count() >= i+1:
        return torch.device(f'cuda:{i}')
    return torch.device('cpu')

可以自行设置将张量存储在gpu中,比如:

python 复制代码
X = torch.ones(2, 3, device = try_gpu(0))

不同gpu上张量无法互通,需要进行运算可以将张量复制到另一个gpu上。

python 复制代码
Z = X.cuda(1)

深度学习框架要求计算的输入数据都在同一设备上,无论是cpu还是gpu。

相关推荐
qq_284274052 小时前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
ACP广源盛139246256737 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
2603_965148117 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
文人sec8 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
摇滚侠9 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
kaixin_啊啊9 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝9 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记
deepseek239 小时前
AI 模型隐藏任意能力拆解:把加密神经网络塞进宿主权重,能力评估为什么在密码学上抓不到
人工智能·深度学习·神经网络·密码学·模型安全
Smoothcloud润云10 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu