参考链接: torch.nn.Module.train(mode=True)
原文及翻译:
train(mode=True)
方法: train(mode=True)
Sets the module in training mode.
将当前模块设置成训练模式.
This has any effect only on certain modules. See documentations of
particular modules for details of their behaviors in
training/evaluation mode, if they are affected,
e.g. Dropout, BatchNorm, etc.
这个方法只对某些特定的模块有实际效果.读者可以在相关文档上查看这些特
定的模块(受该函数影响的模块,比如Dropout和BatchNorm模块等等)在训练/评估
模式下的不同行为方式的详细信息.
Parameters 参数
mode (bool) – whether to set training mode (True) or
evaluation mode (False). Default: True.
mode (布尔类型) – 是否将模块设置成训练模式(True)或者评估
模式(False). 默认值是True.
Returns 函数返回
self 自身self
Return type 返回类型
Module 模块Module类型
代码实验展示:
import torch
import torch.nn as nn
torch.manual_seed(seed=20200910)
class Model(torch.nn.Module):
def __init__(self):
super(Model,self).__init__()
self.conv1=torch.nn.Sequential( # 输入torch.Size([64, 1, 28, 28])
torch.nn.Conv2d(1,64,kernel_size=3,stride=1,padding=1),
torch.nn.ReLU(), # 输出torch.Size([64, 64, 28, 28])
torch.nn.Conv2d(64,128,kernel_size=3,stride=1,padding=1), # 输出torch.Size([64, 128, 28, 28])
torch.nn.ReLU(),
torch.nn.MaxPool2d(stride=2,kernel_size=2) # 输出torch.Size([64, 128, 14, 14])
)
self.dense=torch.nn.Sequential( # 输入torch.Size([64, 14*14*128])
torch.nn.Linear(14*14*128,1024), # 输出torch.Size([64, 1024])
torch.nn.ReLU(),
torch.nn.Dropout(p=0.5),
torch.nn.Linear(1024,10) # 输出torch.Size([64, 10])
)
self.layer4cxq1 = torch.nn.Conv2d(2,33,4,4)
self.layer4cxq2 = torch.nn.ReLU()
self.layer4cxq3 = torch.nn.MaxPool2d(stride=2,kernel_size=2)
self.layer4cxq4 = torch.nn.Linear(14*14*128,1024)
self.layer4cxq5 = torch.nn.Dropout(p=0.8)
self.attribute4cxq = nn.Parameter(torch.tensor(20200910.0))
self.attribute4lzq = nn.Parameter(torch.tensor([2.0,3.0,4.0,5.0]))
self.attribute4hh = nn.Parameter(torch.randn(3,4,5,6))
self.attribute4wyf = nn.Parameter(torch.randn(7,8,9,10))
def forward(self,x): # torch.Size([64, 1, 28, 28])
x = self.conv1(x) # 输出torch.Size([64, 128, 14, 14])
x = x.view(-1,14*14*128) # torch.Size([64, 14*14*128])
x = self.dense(x) # 输出torch.Size([64, 10])
return x
print('cuda(GPU)是否可用:',torch.cuda.is_available())
print('torch的版本:',torch.__version__)
model = Model() #.cuda()
print('调用方法eval()之后'.center(100,'-'))
model_1 = model.eval()
print(id(model))
print(id(model_1))
print(id(model)==id(model_1))
print('调用方法train()之后'.center(100,'-'))
model_2 = model.train()
print(id(model))
print(id(model_2))
print(id(model)==id(model_2))
print('调用方法train(mode=True)之后'.center(100,'-'))
model_3 = model.train(mode=True)
print(id(model))
print(id(model_3))
print(id(model)==id(model_3))
print('调用方法train(mode=False)之后'.center(100,'-'))
model_4 = model.train(mode=False)
print(id(model))
print(id(model_4))
print(id(model)==id(model_4))
控制台输出结果展示:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
加载个人及系统配置文件用了 929 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> conda activate ssd4pytorch1_2_0
(ssd4pytorch1_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> & 'D:\Anaconda3\envs\ssd4pytorch1_2_0\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '59128' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\test4cxq\test2.py'
cuda(GPU)是否可用: True
torch的版本: 1.2.0+cu92
--------------------------------------------调用方法eval()之后--------------------------------------------
2397611164168
2397611164168
True
-------------------------------------------调用方法train()之后--------------------------------------------
2397611164168
2397611164168
True
---------------------------------------调用方法train(mode=True)之后---------------------------------------
2397611164168
2397611164168
True
--------------------------------------调用方法train(mode=False)之后---------------------------------------
2397611164168
2397611164168
True
(ssd4pytorch1_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>