PyTorch的结构是怎样的呢
PyTorch的结构是怎样的呢,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
PyTorch中常用的模块的结构如下:
1、torchvision包:
① datasets:datasets中包含常用的数据集,例如MNIST,CIFA等;
② models:models中包含一些经典的已经训练好的模型,例如VGG16,VGG19、ResNet等,这些模型主要是用来进行迁移学习的。关于迁移学习,我们将在后续章节中进行介绍。
③ transforms:把数据集中的内容转化成tensor。
2、torch包中主要包括四块:
① autograd包。里面有用来定义PyTorch变量的Variable。
② nn (neural network)包。nn包中包含的内容最丰富:损失函数 (MSELoss, crossEntropyLoss等), functional (一般用F表示,包含各种激活函数、池化相关函数、正则化相关函数等),网络层的函数 (线性层/全连接层Linear, 卷积函数Conv2d等)。其中需要注意的是,卷积和池化是在一起使用的,但是却在不同的包里。原因是:PyTorch把需要训练参数的内容都放在网络层,把不需要训练参数的工具函数都放到了functional中。神经网络中的参数w、b和卷积参数都在网络层中,我们要训练的就是这些参数。而无论是激活函数,还是池化 (池化的卷积核大小、步长等可以计算出来)、dropout等都可以没有参数。nn包还有一个Module模块,这个模块中包含了parameters()、train()和eval()等方法。parameters()方法可以直接获取到要训练的所有参数。这些参数必须是在__init__()中用self.conv1,self.fc1等指定的。如果在神经网络模型中使用了dropout,则在训练的时候会随机丢弃掉部分神经元,这就要在训练时用train()方法指定是训练时的神经网络。对应的,如果是已经训练好的神经网络的预测,则要用eval()方法指定是测试用的神经网络。最神奇的是forward()方法,模型的前向传播必须调用forward(),甚至可以不用forward这个名字,直接可以调用,例如:model(input),反向传播的过程其实就是对forward()方法中的函数进行反向求导。
③ optim包。里面有梯度下降相关的函数,例如SGD、Adam等。(Momentum作为一个参数被包含在SGD中了)。还有梯度清零 (zero_grad)、进行一次优化 (step) 等函数。
④ torch模块下属有众多处理tensor的方法。
根据上述内容,我们至少可以实现全连接的神经网络、卷积神经网络以及迁移学习了,是不是很期待实现这些功能?下面我们就开始从PyTorch的基本数据类型、基本操作开始讲解。
看完上述内容,你们掌握PyTorch的结构是怎样的呢的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!