五分钟内编写Pytorch模型-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

如果要在五分钟内编写Python模型,需要完成四个步骤:

1.导入和预处理(数据集)数据并对其进行批处理(数据加载器)

2.利用神经网络建立模型。

3.编写一个培训周期并运行。

4.验证集的验证。

由于MNIST已经做了非常彻底的工作,我们将介绍如何导入火炬视觉数据集并在五分钟内编写一些代码。由于这个原因,它不会很漂亮,但会起作用。

下载和导入数据

因为MNIST做了很多工作,我们将搜索标准火炬视觉数据集,看看是否还有其他我们想要尝试和预测的东西。

让我们看看Kuzushiji MNIST,它是由70000张图像组成的MNIST数据集的平假名替代品。

首先,我们找到每个通道的平均值和标准偏差。这背后的原因是我们想要规范化训练数据,但是Python转换需要预先给出规范化的平均值和标准偏差。因此,我们将使用数据集来查找这些值,重新导入它,并传递具有预定义值的标准化转换。

kmnist=datasets.kmnist(data=path,train=True,download=True.transform=transforms.Compose(〔transforms.ToTensor()〕))

kmnist_val=datasets.kmnist(data_path,train=False,download=True,transform=transforms.ToTensor())

请注意,kmnist是一个数据集,因此循环它将为我们提供每个图像和每个标签。因此,如果我们在数据集中的每个图像上循环,并沿着额外的第四维叠加它们,我们将得到所有图像的张量。

imgs=焊炬堆叠([img_t表示img _t,_in kmnist],dim=3)

imgs.形状

>>>焊炬尺寸([1,28,28,60000])

现在我们计算每个通道的平均值。请注意,调用imgs。视图(1,-1)将所有张量压缩到第二维度。在第二个维度中,我们取平均值(因此,dim=1)和像素值的标准偏差。

#计算每个通道的平均值和标准值

mean=imgs.view(1,-1).mean(dim=1)

std=imgs.view(1,-1).std(dim=1)

平均值,标准

>>>(张量([0.1918]).张量([0.3483]))

现在我们可以重新导入数据,使用Normalize变换,并将数组转换为张量。请注意,Normalize将像素值的平均值和标准偏差作为参数。

#标准化数据

t_kmnist=datasets.kmnist(data_path,train=True,download=False,transform=transforms.Compose(〔transforms.ToTensor(),transfords.Normalize((0.1307),(0.3081))〕)

t_kmnist_val=datasets.kmnist(data_path,train=False,download=False,transform=transforms.Compose(〔transforms.ToTensor()〕))

现在我们有了数据集,我们需要将这些数据输入到数据加载器中进行批处理。如果使用CPU,请确保设置较小的批大小和num_workers=1(这是GPU问题,所以不要太担心)。

火车装载机=torch.utils.data.DataLoader(kmnist,批次_大小=128,shuffle=True,num_工人=1)

val_loader=torch.utils.data.DataLoader(kmnist_val,批次_size=128,shuffle=False,num_workers=1)

我们可以从数据集中查看一些样本。

图=plt.图(图=(10,8))

列,行=5,5

对于范围(1,列*行+1)中的i:

sample_idx=torch.randint(len(t_kmnist),size=(1,)).item()

img,标签=t_kmnist〔样本_idx〕

图.添加_子地块(行,列,i)

plt.标题(标签)

plt.轴(“关闭”)

plt.imshow(img.squeze(),cmap=”灰涩”)

plt.show()

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

构建模型

这不是一个关于如何在理论上构建深度学习模型的教程。因此,我们将在这里介绍模型实现。

首先,需要将模型实例化为nn.Module的实例。其次,需要使用常用的Python方法初始化类。最后,您需要一个模型初始化。在这里,我们定义了所有的模型层,然后是向前方法。这里我们告诉模型如何获取输入并将其传递给这些层。

类网络(nn.模块):

定义_ _初始化_ _(自身):

super(Net,self).__init()

self.conv1=nn.Conv2d(in_channels=1,out_channel=16,kernel_size=5,step=1,padding=2)self.cov2=nn.Cconv2d(内核大小=2))self.layer2=nn.顺序(self.conv2,nn.ReLU(),nn.MaxPool2d(内核大小=2))self.out=nn.线姓(32*7*7,10)#输出10个类

向前定义(self,x):x=self.layer1(x)

x=自身层2(x)

#将conv2的输出平坦化为(批次_大小,32*7*7)

x=x.view(x.size(0),-1)输出=self.out(x)返回输出

在这个阶段,通过提供数据加载器的示例来调试模型总是很重要的。然后,我们将图像传递给模型,并检查其输出的内容大小是否正确。

img,_=next(iter(列车_装载机))

img=img[0]

模型=Net()

模型(img.unqueze(0)).shape

>>>焊炬尺寸([1,10])

我们已经建立了一个完美的模型,它使用K-MNIST图像,并输出10个类,表示从0到9的每个可能数的10个不同概率。

编写并运行训练循环图像

一如既往,我们的培训步骤是相似的。正向传播.损耗计算和梯度重置(Python)。反向传播以计算相关损耗的梯度。使用这些梯度更新权重。

def training_loop(n_epochs,model,loss_fn,optimizer,train_loader):

模型.train()

总步长=len(列车装载机)

对于范围(1,n_epochs+1)中的n:

对于枚举(火车装载机)中的i,(img,标签):输出=模型(变量(imgs))#前向通过损耗=损耗_fn(输出,变量(标签))#计算损耗优化。零_grad()#重置梯度损耗。向后()#反向传播优化。step()#更新权重如果(i+1)%(n_epochs/10)==0:打印(‘{}Epoch〔{〕/{〕〕,步骤〔{}}/}〕,损失:{:.4f}’

.format(datetime.datetime.now(),n,n_epochs,i+1,total_step,loss.item()))

然后,我们实例化我们的模型,设置Adam优化器,并使用交叉熵损失(因为这是一个多类分类问题)。

模型=Net()

优化器=torch.optim.Adam(model.parameters(),lr=1e-2)

损失_ fn=nn.CrossEntropyLoss()

然后将这些参数传递给训练循环。

训练_循环(n_epochs=10,模型=模型

损失_fn=损失_fn,优化器=优化器,列车装载机=列车装载机

)

验证模型

迭代验证数据加载器中的图像和标签,向前传播,并通过在输出张量中找到具有最高值的索引来获得预测(记住,我们输出10个概率向量)。数据squeze()来获取实际的标量本身。最后,计算预测值等于标记数除以标记总数的样本数。

def validate(model,train _loader,val _loader):model.eval()#设置为eval模式,以避免使用焊炬进行批量规范。no _grad():#避免正确计算梯度,total=0,图像为0,val _ loader中的标签:test _output=model(图像)pred _y=torch.max(test _out,1)〔1〕.data.squeeze()精度=(pred_y==labels).sum().item()/float(labels.size(0))打印(‘VALIDATION SET accuracy:%.2f’%精度)验证(模型.列车装载机.val_装载机)

>>>验证设定精度:0.95

验证集的准确率为95%。

结论

使模型更好:

·在模型训练期间打印验证集指标:很明显,我很高兴看到训练损失随着时间的推移而减少。然而,直到我们在训练后验证了模型,我们才真正了解模型的性能。如果您在运行期间打印以验证准确姓,您将更好地了解模型的成功。

·提前停止:一旦验证的准确姓在一定时间内没有提高(称为耐心),请返回性能最佳的时期并使用这些权重。看看其他指标:如曲线下面积(AUC)。

·其他网络架构的实现:自从CNN引入以来,计算机视觉取得了长足的进步。您可以尝试其他架构来提高性能。

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 五分钟内编写Pytorch模型-600学习网