目录
3、 torch.nn.Sequential(*layers) 中* 的作用?
10、from __futrue__ import print_function
1、什么是yaml 文件?
YAML常用于各种场景,包括软件应用程序的配置文件、软件包管理(例如Python中的pip
)等。是一种人类友好数据格式。
以下是使用示例,有以下特点:
1) # 表示注释
2)用键值对表示映射(字典)
3)破折号后跟空格来表示列表(序列)中的元素
# 示例YAML配置文件
name: John Doe
age: 25
email: johndoe@example.com
is_active: true
interests:
- 阅读
- 烹饪
- 徒步旅行
# Backbone
backbone: resnet50
# Transfer loss related
transfer_loss_weight: 1.0
transfer_loss: adv
# Optimizer related
lr: 0.01
weight_decay: 0.001 # 正则化权重衰减
momentum: 0.9 # 动量,一种优化器技术、使得参数在更新时保持一定惯性,有助于加快收敛速度和减少震荡
lr_scheduler: True # 是否采用学习率调度器
lr_gamma: 0.001 # 学习率衰减系数
lr_decay: 0.75 # 学习率衰减率
# Training related
n_iter_per_epoch: 500
n_epoch: 20
# Others
seed: 1 # 随机种子,在需要可复现的实验或训练过程中,设置相同的随机种子可以确保结果的一致
num_workers: 3 # 数据加载进程数目
2、文件夹中__init__.py 文件的作用?
3、 torch.nn.Sequential(*layers) 中* 的作用?
在Python中,*
(星号)是一个特殊的语法,称为"unpacking"(解包)。在函数调用或参数传递中,使用*
可以将一个可迭代对象(例如列表、元组)解包成单独的元素,然后作为函数的参数传递。这样做的好处是,可以方便地将一个可迭代对象中的元素逐个传递给函数,而不需要手动一个一个地写出来。
对于torch.nn.Sequential(*layers)
,*
的作用是将传递给函数的多个层(layers)解包成单独的参数,并按照它们在参数列表中的顺序传递给torch.nn.Sequential()
构造函数。
例如,假设有一个列表 layers_list
包含了多个神经网络层的对象,我们可以使用*
将列表中的层解包,然后传递给torch.nn.Sequential()
,如下所示:
import torch.nn as nn
# 假设 layers_list 是一个包含多个神经网络层对象的列表
layer1 = nn.Linear(in_features=64, out_features=128)
layer2 = nn.ReLU()
layer3 = nn.Linear(in_features=128, out_features=10)
layers_list = [layer1, layer2, layer3]
# 使用 * 将列表中的层解包,并按顺序传递给 torch.nn.Sequential()
model = nn.Sequential(*layers_list)
4、nn.Sigmoid() 做网络的最后一层的作用?
nn.Sigmoid() 是非线性激活函数,和nn.Relu()有类似的作用,增强网络的非线性。
而nn.Sigmoid()
作为神经网络的最后一层的作用通常用于解决二分类问题,并将输出转化为概率值。
在二分类问题中,我们通常希望模型输出一个介于0到1之间的值,表示样本属于某一类别的概率。nn.Sigmoid()
是一个激活函数,它将输入映射到0到1之间的范围。
在神经网络的输出层应用 nn.Sigmoid()
可以将输出转化为概率,即模型预测某一样本属于正类的概率。通常,如果 Sigmoid 输出的概率大于 0.5,则将样本划分为正类(类别1);如果 Sigmoid 输出的概率小于等于 0.5,则将样本划分为负类(类别0)。
在二分类问题中,可以使用二元交叉熵损失函数(Binary Cross Entropy Loss)与 nn.Sigmoid()
结合使用来进行训练,从而使得模型的输出尽可能接近样本的真实标签。
需要注意的是,对于多类别分类问题(即样本可以属于多个类别),通常不使用 nn.Sigmoid()
作为最后一层,而是使用 Softmax 函数与多类别交叉熵损失函数(Categorical Cross Entropy Loss)结合来进行训练。
5、请解释下述代码?
class ReverseLayerF(Function):
@staticmethod
def forward(ctx, x, alpha):
ctx.alpha = alpha
return x.view_as(x)
@staticmethod
def backward(ctx, grad_output):
output = grad_output.neg() * ctx.alpha
return output, None
6、torch.svd()?
计算矩阵的奇异值分解。
U, S, V = torch.svd(A)
其中,A
是输入的矩阵,U
、S
和 V
分别是奇异值分解的结果。U
是包含左奇异向量的正交矩阵,S
是包含奇异值的对角矩阵,V
是包含右奇异向量的正交矩阵。
7、如何理解奇异值分解的物理意义?
8、@ 运算符的含义?
矩阵乘法,类似于numpy.dot()
9、说明协方差矩阵的物理含义?
描述了两个变量之间的线性相关性和变异性,可以从以下几个方面来解释:
1) 相关性:协方差矩阵中的元素表示了两个变量之间的相关性。如果两个变量具有正相关性,那么它们的协方差为正值;如果它们具有负相关性,那么协方差为负值;如果它们之间没有线性关系,那么协方差接近于零。
2) 方差:协方差矩阵对角线上的元素表示了每个变量自身的方差。这些方差可以用来衡量每个变量自身的波动程度。
下面通过一个实例来说明协方差矩阵的应用:
假设我们有一组数据,包含了某城市人口的收入和平均寿命。我们可以使用这些数据来计算收入和平均寿命之间的协方差矩阵。协方差矩阵的对角线上的元素将给出收入和平均寿命方差,而非对角线上的元素将给出收入和平均寿命之间的协方差。
通过分析协方差矩阵,我们可以得出以下结论:
- 如果收入和平均寿命之间的协方差为正值,那么它们具有正相关性,即当收入较高时,和平均寿命较高。如果为负值,则负相关。
- 如果协方差接近于零,则说明收入和平均寿命之间之间没有明显的线性关系。
10、from __futrue__ import print_function
把下⼀个新版本的特性导⼊到当前版本,于是我们就可以在当前版本中测试⼀些新版本的特性。(就是你不⽤更新python的版本,直接加这个模块,就可以使⽤python新版本的功能)