torch.nn.Module
打印所有子模块:
for sub_module in model.children():
print(sub_module)
按照名字打印子模块:
for name, module in model.named_children():
if name in ['conv4', 'conv5']:
print(module)
打印所有模块:
for module in model.modules():
print(module)
按照名字打印所有模块:
for name, module in model.named_modules():
if name in ['conv4', 'conv5']:
print(module)
打印模型所有参数:
for param in model.parameters():
print(type(param.data), param.size())
打印模型所有参数名字:
model.state_dict().keys()
- model.cpu():将模型复制到CPU上;
- model.cuda():将模型复制到GPU上;
- model.double():将模型数据类型转换为double;
- model.eval():将模型设置成test模式,仅仅当模型中有Dropout和BatchNorm是才会有影响;
- model.float():将模型数据类型转换为float;
- model.half():将模型数据类型转换为half;
- model.load_state_dict(state_dict):用来加载模型参数,将state_dict中的parameters和buffers复制到此module和它的后代中,state_dict中的key必须和model.state_dict()返回的key一致;
- model.state_dict():返回一个字典,保存着module的所有状态;
- model.train():将模型设置为训练模式;
- model.zero_grad():将模型中的所有模型参数的梯度设置为0;
torch.nn.Sequential
时序模型例子
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
##################or##################
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
卷积层
- 一维卷积:
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系: Lout=floor((Lin+2padding−dilation(kernerlSize−1)−1)/stride+1) - 二维卷积:
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系: Hout=floor((Hin+2padding[0]−dilation[0](kernerlSize[0]−1)−1)/stride[0]+1) Wout=floor((Win+2padding[1]−dilation[1](kernerlSize[1]−1)−1)/stride[1]+1) - 三维卷积:
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
输入输出尺寸关系: Dout=floor((Din+2padding[0]−dilation[0](kernerlSize[0]−1)−1)/stride[0]+1) Hout=floor((Hin+2pad