介绍
这篇文章给大家介绍使用pytorch怎么实现一个CNN卷积神经网络,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
,,卷积神经网络是时下最为流行的一种深度学习网络,由于其具有局部感受野等特性,让其与人眼识别图像具有相似性,因此被广泛应用于图像识别中,本人是研究机械故障诊断方面的,一般利用旋转机械的振动信号作为数据。
,,,对一维信号,通常采取的方法有两种,第一,直接对其做一维卷积,第二,反映到时频图像上,这就变成了图像识别,此前一直都在利用keras搭建网络,最近学了pytroch搭建cnn的方法,进行一下代码的尝试。所用数据为经典的财政部手写字体数据集
import 火炬 import torch.nn  as 神经网络 import torch.utils.data  as 数据 import torchvision import matplotlib.pyplot  as plt ' EPOCH =1 BATCH_SIZE =50 LR 0.001=, DOWNLOAD_MNIST =,真的 从网上下载数据集: ”“python 时间=train_data torchvision.datasets.MNIST ( 根=啊?mnist/?=,train ,真的, ,变换=torchvision.transforms.ToTensor (),=,,download  DOWNLOAD_MNIST, ) print (train_data.train_data.size ()) print (train_data.train_labels.size ()) ' ' ' plt.imshow (train_data.train_data [0] .numpy(),提出=& # 39;秋天# 39;) plt.title(“%我,%,train_data.train_labels [0]) plt.show () 时间=train_loader Data.DataLoader(数据集=train_data, batch_size=batch_size,洗牌=True) test_data =, torchvision.datasets.MNIST (root=啊?mnist/,,,火车=False) 时间=test_x torch.unsqueeze (test_data.test_data,昏暗的=1).type (torch.FloatTensor) [2000]/255。 时间=test_y test_data.test_labels [2000] class CNN (nn.Module): 自我,def __init__ (): 超级才能(CNN,,自我). __init__ () 时间=self.conv1 才能;nn.Sequential ( ,,nn.Conv2d ( ,,,in_channels=1, ,,,out_channels=16, ,,,kernel_size=5, ,,,跨步=1, ,,,填充=2, ,,), ,, ,,nn.ReLU (), ,,nn.MaxPool2d (kernel_size=2), ,,) ,, 时间=self.conv2 才能;nn.Sequential ( ,,nn.Conv2d(16日,32岁,5,,1,,2), ,,nn.ReLU (), ,,nn.MaxPool2d (2), ,,) ,, self.out 才能=,nn.Linear (32 * 7 * 7, 10), #, fully connected 层,output 10类 ,, 向前,def (自我,,x): 时间=x 才能;self.conv1 (x) 时间=x 才能;self.conv2 (x) 时间=x 才能;x.view (x.size (0), 1), #, flatten 从而output of conv2 用(batch_size, 32 * 7 * 7) 时间=output 才能;self.out (x) return 才能输出 , 时间=optimizer torch.optim.Adam (cnn.parameters (),, lr=lr) 时间=loss_func nn.CrossEntropyLoss () , ,得到matplotlib import 厘米 试一试:得到sklearn.manifold import  TSNE; HAS_SK =, True 除了:HAS_SK =, False;,打印(& # 39;Please  install sklearn for layer 可视化# 39;) def plot_with_labels (lowDWeights,,标签): ,plt.cla () ,X, Y =, lowDWeights (:,, 0), lowDWeights (:,, 1) ,for x, y,, s 拷贝zip (x, y,,标签): c 才能=,cm.rainbow (int (255, *, s /, 9));, plt.text(年代,x,, y,,写成backgroundcolor=c,字形大?9) ,plt.xlim (X.min (),, X.max ());, plt.ylim (Y.min (),, Y.max ());, plt.title (& # 39; Visualize  last 层# 39;);,plt.show ();, plt.pause (0.01) plt.ion () for epoch 拷贝范围(时代): ,for 一步,(提出,的话),拷贝列举(train_loader): output 才能=,cnn(提出) 时间=loss 才能;loss_func的话(,,) optimizer.zero_grad才能() loss.backward才能() optimizer.step才能() ,, if 才能;step %, 50,==, 0: ,,test_output =, cnn (test_x) ,,pred_y =, torch.max (test_output, 1) [1] .data.numpy () ,,accuracy =,浮子((==pred_y test_y.data.numpy ()) .astype (int) .sum()),/,浮子(test_y.size (0)) ,,print(“时代:“,,时代,,“|,train 失:,% .4f", %, loss.data.numpy (),, ,,,,“|,test 准确性:,% .2f", %,准确性) ,, plt.ioff ()
关于使用pytorch怎么实现一个CNN卷积神经网络就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。