动手学深度学习(Pytorch版)代码实践 -卷积神经网络-16自定义层

16自定义层

python 复制代码
import torch
import torch.nn.functional as F
from torch import nn

class CenteredLayer(nn.Module):
    def __init__(self):
        super().__init__()
    
    #从其输入中减去均值
    #X.mean() 计算的是整个张量的均值
    #希望计算特定维度上的均值,可以传递 dim 参数。
    #例如,每一列均值,X.mean(dim=0)
    def forward(self, X):
        return X - X.mean()

layer = CenteredLayer()
"""
torch.FloatTensor: 这是 PyTorch 中的一种张量类型,专门用于存储浮点数数据。
尽管 torch.FloatTensor 是创建浮点张量的一种方式,
但在 PyTorch 的最新版本中,建议使用 torch.tensor 函数,
因为它更加通用和灵活。
"""

#均值为 3.0
print(layer(torch.FloatTensor([1, 2, 3, 4, 5])))
#tensor([-2., -1.,  0.,  1.,  2.])

net = nn.Sequential(nn.Linear(8, 128), CenteredLayer())
"""
torch.rand和torch.randn有什么区别?
一个均匀分布 [0,1) ,一个是标准正态分布。
"""
Y = net(torch.rand(4, 8))
print(Y.mean())
#tensor(-6.5193e-09, grad_fn=<MeanBackward0>)

#带参数的层
#实现自定义版本的全连接层
"""
该层需要两个参数,一个用于表示权重,另一个用于表示偏置项。 
在此实现中,我们使用修正线性单元作为激活函数。
该层需要输入参数:in_units和units,分别表示输入数和输出数。
"""
class MyLinear(nn.Module):
    def __init__(self, in_units, units):
        super().__init__()
        #nn.Parameter 是一种特殊的张量,会被自动添加到模型的参数列表中。
        self.weight = nn.Parameter(torch.randn(in_units, units))
        self.bias = nn.Parameter(torch.randn(units,))
        
    def forward(self, X):
        linear = torch.matmul(X, self.weight.data) + self.bias.data
        return F.relu(linear)
    
linear = MyLinear(5, 3)
print(linear.weight)
"""
tensor([[ 0.7130, -1.0828,  0.2203],
        [-2.0417, -0.1385,  0.6858],
        [-0.5163, -0.6009,  0.0783],
        [-0.3642,  0.5252, -0.6144],
        [-0.6479, -0.4700,  0.1486]], requires_grad=True)
"""
#使用自定义层直接执行前向传播计算。
print(linear(torch.rand(2, 5)))
"""
tensor([[0.0000, 0.0000, 0.2741],
        [0.0000, 0.0000, 0.5418]])
"""

#使用自定义层构建模型,就像使用内置的全连接层一样使用自定义层。
net = nn.Sequential(MyLinear(64, 8), MyLinear(8, 1))
print(net(torch.rand(2, 64)))
"""
tensor([[9.0080],
        [7.6102]])
"""
相关推荐
Purepisces16 分钟前
深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)
人工智能·笔记·python·深度学习·机器学习·分类
2301_7951685843 分钟前
昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分
人工智能·深度学习·学习
西西弗Sisyphus1 小时前
卷积层的输出
深度学习·神经网络·计算机视觉·卷积
及时行樂樂樂1 小时前
【PromptCC】遥感图像变化字幕的解耦范式
深度学习·算法·计算机视觉·transformer
魔云连洲1 小时前
UNet进行病理图像分割
python·深度学习·机器学习
@李思成2 小时前
动手学深度学习(Pytorch版)代码实践 -计算机视觉-40目标检测和边界框
pytorch·深度学习·计算机视觉
HyperAI超神经2 小时前
入选顶会ICML,清华AIR等联合发布蛋白质语言模型ESM-AA,超越传统SOTA
人工智能·深度学习·机器学习·语言模型·自然语言处理·清华大学·蛋白质语言模型
简简单单做算法2 小时前
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
人工智能·cnn·卷积神经网络·步态识别·casia库
Linux运维老纪2 小时前
通俗易懂的chatgpg的原理简介
深度学习·算法·机器学习·chatgpt·gpt-3
oscar9993 小时前
AI基本概念(人工智能、机器学习、深度学习)
人工智能·深度学习·机器学习·gai