16自定义层
import torch
import torch. nn. functional as F
from torch import nnclass CenteredLayer ( nn. Module) : def __init__ ( self) : super ( ) . __init__( ) def forward ( self, X) : return X - X. mean( ) layer = CenteredLayer( )
"""
torch.FloatTensor: 这是 PyTorch 中的一种张量类型,专门用于存储浮点数数据。
尽管 torch.FloatTensor 是创建浮点张量的一种方式,
但在 PyTorch 的最新版本中,建议使用 torch.tensor 函数,
因为它更加通用和灵活。
"""
print ( layer( torch. FloatTensor( [ 1 , 2 , 3 , 4 , 5 ] ) ) )
net = nn. Sequential( nn. Linear( 8 , 128 ) , CenteredLayer( ) )
"""
torch.rand和torch.randn有什么区别?
一个均匀分布 [0,1) ,一个是标准正态分布。
"""
Y = net( torch. rand( 4 , 8 ) )
print ( Y. mean( ) )
"""
该层需要两个参数,一个用于表示权重,另一个用于表示偏置项。
在此实现中,我们使用修正线性单元作为激活函数。
该层需要输入参数:in_units和units,分别表示输入数和输出数。
"""
class MyLinear ( nn. Module) : def __init__ ( self, in_units, units) : super ( ) . __init__( ) 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. datareturn 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]])
"""