423|15

227

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

采用pyTorch训练CNN的讨论 [复制链接]

 

采用pyTorch训练CNN,既可以在CPU上,也可以在GPU上训练。

1、安装支持GPU的pyTorch;

2、使用pytorch中的函数判断是否支持GPU:

                    g_support = torch.cunda.is_available()
                    if g_support:

                            device = torch.device('cuda:0')
                    else:
                            device = torch.device('cpu')

3、转移CPU到GPU:

                    net = Net()

                    net.to(device) 

最新回复

好好学习,天天向上,加油,同学们,加油,自己!!!   详情 回复 发表于 2024-11-11 05:34
点赞 关注
个人签名

波光潋滟.~

 
 

回复
举报

227

帖子

2

TA的资源

一粒金砂(高级)

沙发
 

判断是否支持GPU的语句,也可以按如下方式进行编码:

            device = "cuda" if torch.cuda.is_available() else "cpu"

 

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

板凳
 

CNN特别适合图像数据的处理,可以捕获图像中的空间层次结构,例如边缘,纹理和更复杂的模式;一般来说,一个CNN可以由卷积层,池化层、和完全连接层组成。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

4
 

卷积层作为CNN的构建块,一般由以下几个部分组成:

1、卷积核;

2、步幅(缩小);

3、填充(放大);

4、特征图。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

5
 

CNN的架构代码:Conv2D ()、ReLU()和MaxPool2D()层执行卷积、激活和池化操作,Linear()全连接层执行分类,各层通过使用torch.nn.Sequential容器组合起来。

class CNN(torch.nn.Module): 
        ...
        self.model = torch.nn.Sequential(             
            torch.nn.Conv2d(in_channels = 3, out_channels = 32, kernel_size = 3, padding = 1), 
            torch.nn.ReLU(),             
            torch.nn.MaxPool2d(kernel_size=2),      

            ...                   

            torch.nn.Flatten(), 
            torch.nn.Linear(64*4*4, 512), 
            torch.nn.ReLU(), 
            torch.nn.Linear(512, 10) 
        ) 

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

6
 

由Module类继承,使用torch.nn.Conv2d构建一个只有一层二维卷积的神经网络:

   class MyNet(torch.nn.Module):

            def __init__(self):

                super(MyNet, self).__init__()

                self.conv2d = torch.nn.Conv2d(in_channels=3,out_channels=64,kernel_size=3,stride=2,padding=1)

 

            def forward(self, x):                        

                x = self.conv2d(x)

                return x

   net = MyNet()

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

7
 

#定义CNN网络的例子(LeNet网络):
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = torch.nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5)
        self.pool1 = torch.nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = torch.nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5)
        self.fc1 = torch.nn.Linear(in_features=16 * 5 * 5,out_features=120)
        self.fc2 = torch.nn.Linear(in_features=120, out_features=84)
        self.fc3 = torch.nn.Linear(in_features=84, out_features=10)

    def forward(self, x):
        x = self.pool1(torch.nn.functional.relu(self.conv1(x)))
        x = self.pool1(torch.nn.functional.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5) 
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

8
 

采用pyTorch进行模型的保存与加载:

            torch.save(net, "abc.pth")

定义模型结构并加载参数

            net = torch.nn.Sequential(...)

            net = torch.load("abc.pth")

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

9
 

在CNN中,卷积核代表特征,通过卷积层运算可得到特征图,这是一种线性激活响应;之后,通过非线性激活响应(Relu),减少数据量;再通过池化层,进一步减少数据量。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

10
 

作为最早出现的卷积神经网络之一,LeNet的卷积单元由卷积层、sigmoid(或ReLU)激活函数和平均(最大)汇聚层组成。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

11
 

全连接层(FC)将特征进行组合,在CNN中起到分类器的作用,并映射到样本标记空间,全连接层可由卷积操作实现。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

12
 

卷积层通过局部映射来缩小实体对象在某一分类方向上的表示尺寸(投影);池化层(也称汇聚层)通过指定操作进一步缩小信息块,以更显著的特征来生成特征图。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

13
 

CNN是一种带有卷积结构的前馈神经网络,卷积结构可以减少深层网络占用的内存量,其中三个关键操作——局部感受野、权值共享、池化层,有效的减少了网络的参数个数,缓解了模型的过拟合问题。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

14
 

人工神经网络(ANN)通过调整内部神经元之间的权重,达到处理信息目的;CNN在卷积层中输出特征图的每个神经元与其输入进行局部连接,并通过对应的连接权值与局部输入进行加权求和再加上偏置值,得到神经元输入值,该过程等同于卷积过程,CNN也由此而得名。

个人签名

波光潋滟.~

 
 
 

回复

227

帖子

2

TA的资源

一粒金砂(高级)

15
 

pyTorch通过提供torch.library来进行pyTorch 核心运算符库的扩展、测试和创建,几个方法及其作用:
1、torch.library.custom_op  用于创建新的自定义运算符。此装饰器将函数包装为自定义运算符,使其能够与PyTorch的各个子系统交互。

2、torch.library.opcheck  用于测试自定义运算符是否正确注册,并检查运算符在不同设备上的行为是否一致。

3、torch.library.register_kernel  为自定义运算符注册特定设备类型的实现(如CPU或CUDA)。

4、torch.library.register_autograd  注册自定义运算符的后向传递公式,使其能够在自动求导过程中正确计算梯度。

5、torch.library.register_fake  为自定义运算符注册 FakeTensor 实现,以支持 PyTorch 编译 API。

个人签名

波光潋滟.~

 
 
 

回复

419

帖子

0

TA的资源

纯净的硅(中级)

16
 

好好学习,天天向上,加油,同学们,加油,自己!!!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表