**前言:**最近在构建网络的时候,有一些层参数一样,于是就没有定义新的层,直接
重复使用了原来已经有的层,发现效果和模型大小都没有什么变化,心
中产生了疑问:定义的网络结构层能否
重复使用?因此接下来利用了一个小模型网络
实验了一下。
在深度学习中,处理数据和对模型进行参数初始赋值通常有许多随机性的操作,为了使在同一台设备中能可重复性实验,可以提前在以下几个方面进行设置,保证初始的随机种子(seed)相等。
1、Pytorch
通过torch.manual_seed()来为CPU和CUDA设置其初始的seed
import torch
torch.manual_seed(0)
2、CuDNN
当代码运行在CuDNN的后端,需要执行以下两步操作:
torch.backends.cudnn.deterministic = True
torch.manual_seed(init_seed)
torch.cuda.manual_seed(init_seed)
np.random.seed(init_seed) # 用于numpy的随机数
torch.manual_seed(seed)
为了生成随机数设置种子。返回一个torch.Generator对象
seed (int) – 期望的种子数
torch.cuda.manual_seed(seed)
为当前GPU生成随机数设置种子。如果CUDA不可用,调用该
在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,为了把握随机数的生成特性,从随机数的随机无序中获得确定和秩序。我们可以利用随机数种子(random seed)来实现这
一目标,随机数种子,可以使得引入了随机数的整个程序,在多次运行中得到确定的,一致的结果。
1. 随机数种子
python自带的random函数:
import random
# print(help(random))
def test_random_seed_in_std_lib(seed=0, cnt...
问题背景是这样的:
我用了自己定义了pytorch中的模型,并且,在main函数中设置了随机种子用来保证模型初始化的参数是一致的,同时pytorch中的随机种子也能够影响dropout的作用,见链接
为了保证所有的参数都一样,我在设置dataloader的时候,数据并没有进行shuffle,这样能够在每一个iteration的时候,没有random的操作
但是,一旦我把模型放到GPU上运行之...
1. AlexNet:一个经典的卷积神经网络模型。
2. VGG:一系列深度卷积神经网络模型,具有不同的层数和参数量。
3. ResNet:使用残差块来解决深度网络训练
中的梯度消失问题。
4. Inception:使用多个不同大小的卷积核和池化核来提取特征。
5. DenseNet:使用密集连接来提高特征传递效率。
6. MobileNet:专门设计用于移动设备的轻量级模型。
7. U-Net:用于图像分割任务的编码-解码结构。
8. GAN(生成对抗网络):包括GAN、DCGAN、CycleGAN等,用于生成新的数据样本。
除了这些,还有许多其他模型可供选择。您可以使用`torchvision.models`模块来加载这些预训练模型。