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]])
"""