nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
参数:
in_channel: 输入数据的通道数,例RGB图片通道数为3;
out_channel: 输出数据的通道数,这个根据模型调整;
kennel_size: 卷积核大小,可以是int,或tuple;kennel_size=2,意味着卷积大小(2,2), kennel_size=(2,3),意味着卷积大小(2,3)即非正方形卷积
stride:步长,默认为1,与kennel_size类似,stride=2,意味着步长上下左右扫描皆为2, stride=(2,3),左右扫描步长为2,上下为3;
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
参数:
num_features:一般输入参数为batch_size×num_features×height×width,即为其中特征的数量
eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5
momentum:一个用于运行过程中均值和方差的一个估计参数
affine:当设为true时,会给定可以学习的系数矩阵gamma和beta
torch.nn.AvgPool2d( kernel_size , stride=None , padding=0 , ceil_mode=False , count_include_pad=True , divisor_override=None )
参数:
kernel_size:池化核的尺寸大小
stride:窗口的移动步幅,默认与kernel_size大小一致
padding:在两侧的零填充宽度大小
ceil_mode:设为True时,在计算输出形状的过程中采用向上取整的操作,否则,采用向下取整
count_include_pad:布尔类型,当为True时,将在平均池化计算中包括零填充,否则,不包括零填充
divisor_override:如果被指定,则除数会被代替成divisor_override。换句话说,如果不指定该变量,则平均池化的计算过程其实是在一个池化核内,将元素相加再除以池化核的大小,也就是divisor_override默认为池化核的高×宽;如果该变量被指定,则池化过程为将池化核内元素相加再除以divisor_override。
torch.save(model, 'net.pth') # 保存整个神经网络的模型结构以及参数
torch.save(model.state_dict(), 'net_params.pth') # 只保存模型参数
model = torch.load('net.pth') # 加载整个神经网络的模型结构以及参数
model.load_state_dict(torch.load('net_params.pth')) # 仅加载参数
model.train( ) :启用 BatchNormalization 和 Dropout
model.eval( ) :不启用 BatchNormalization 和 Dropout
训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有batch normalization层所带来的的性质。
torch.max(a): 返回输入a中所有元素的最大值。
torch.max(a, 0): 返回每一列的最大值,且返回索引(返回最大元素在各列的行索引)。
torch.max(a, 1): 返回每一行的最大值,且返回索引(返回最大元素在各行的列索引)。
torch.max()[0]: 只返回最大值。
torch.max()[1]: 只返回最大值的索引。
torch.max()[0].data: 只返回variable中的数据部分(去掉Variable containing)。
torch.max()[0].data.numpy(): 把数据转化成 numpy ndarray。
torch.max()[0].numpy(): 把数据转化成 numpy ndarray。
a: tensor([[ 1, 5, 62, 54],
[ 2, 6, 2, 6],
[ 2, 65, 2, 6]])
torch.max(a): tensor(65)
torch.max(a, 0): torch.return_types.max(
values=tensor([ 2, 65, 62, 54]),
indices=tensor([2, 2, 0, 0]))
torch.max(a, 0)[0]: tensor([ 2, 65, 62, 54])
torch.max(a, 0)[1]: tensor([2, 2, 0, 0])
torch.max(a, 0)[1].data: tensor([2, 2, 0, 0])
torch.max(a, 0)[1].data.numpy(): [2 2 0 0]
torch.max(a, 0)[1].numpy(): [2 2 0 0]
torch.max(a, 1): torch.return_types.max(
values=tensor([62, 6, 65]),
indices=tensor([2, 3, 1]))
准确率的计算
pred_y = torch.max(predict, 1)[1].numpy()
label_y = torch.max(label, 1)[1].data.numpy()
accuracy = (pred_y == label_y).sum() / len(label_y)