Class15自定义层

import torch
import torch.nn.functional as F
from torch import nn
# 定义类继承自nn.Module
class CenteredLayer(nn.Module):
    # 构造函数
    def __init__(self):
        # 调用父类构造函数
        super().__init__()
    # 定义前向传播函数    
    def forward(self,X):
        # 每个元素减去整个张量的平均值
        return X - X.mean()
# 创建自定义PyTorch层
layer = CenteredLayer()
# 构造1D的浮点数张量
layer(torch.FloatTensor([1,2,3,4,5]))
# nn.Linear():全连接层,输入为8,输出为128
# CenteredLayer():对输入张量进行中心化操作
net = nn.Sequential(nn.Linear(8,128),CenteredLayer())
# 生成一个形状为[4,8]的张量映射为[4,128]
Y = net(torch.rand(4,8))
# 计算512个元素的平均值
Y.mean()
# 定义类继承自nn.Module
class MyLinear(nn.Module):
    # 定义构造函数
    # in_units:输入特征维度
    # units:输出特征维度
    def __init__(self,in_units,units):
        # 调用父类构造函数
        super().__init__()
        # 创建一个可训练的权重矩阵,形状为[in_units,units]
        self.weight = nn.Parameter(torch.randn(in_units,units))
        # 创建一个形状为[unit]的偏置项,可训练
        self.bias = nn.Parameter(torch.randn(units,))
    # 执行线性变换
    def forward(self,X):
        linear = torch.matmul(X,self.weight.data) + self.bias.data
        # 使用Relu激活函数
        return F.relu(linear)
# 实例化一个输入维度5,输出维度3的线性层
linear = MyLinear(5,3)
# 查看模型中定义的权重张量
linear.weight
# 输入一个形状为[2,5]的张量
linear(torch.rand(2,5))

你可能感兴趣的:(深度学习,python,pytorch,开发语言)