pytorch 分类器,pytorch cnn 文本分类

  pytorch 分类器,pytorch cnn 文本分类

  这篇文章主要为大家介绍了大蟒深度学习之多标签分类器的使用说明及框架的实现源码,有需要的朋友可以借鉴参考下,希望能够有所帮助

  

目录
多标签分类器多标签分类器损失函数代码实现

  

多标签分类器

  多标签分类任务与多分类任务有所不同,多分类任务是将一个实例分到某个类别中,多标签分类任务是将某个实例分到多个类别中。多标签分类任务有有两大特点:

  类标数量不确定,有些样本可能只有一个类标,有些样本的类标可能高达几十甚至上百个类标之间相互依赖,例如包含蓝天类标的样本很大概率上包含白云如下图所示,即为一个多标签分类学习的一个例子,一张图片里有多个类别,房子,树,云等,深度学习模型需要将其一一分类识别出来。

  

多标签分类器损失函数

  

代码实现

  针对图像的多标签分类器框架的简化代码实现如下所示。因为图像的多标签分类器的数据集比较难获取,所以可以通过对手写数字识别数据集中的每个图片打上特定的多标签,例如类别数字一(一)的多标签可以为[1,1,0,1,0,1,0,0,1],然后再利用重新打标后的数据集训练出一个手写数字识别的多标签分类器。

  从参考导入数据集、转换

  从torch.utils.data导入数据加载器,数据集

  进口火炬

  将torch.nn作为神经网络导入

  将火炬. optim作为使最优化导入

  导入火炬. nn .功能为F

  导入操作系统

  美国有线新闻网;卷积神经网络类(NN .模块):

  def __init__(self):

  超级()。__init__()

  自我Sq1=nn .顺序(

  nn .Conv2d(in_channels=1,out_channels=16,kernel_size=5,stride=1,padding=2),# (16,28,28) # output: (16,28,28)

  nn .ReLU(),

  nn .MaxPool2d(kernel_size=2),# (16,14,14)

  )

  自我Sq2=nn .顺序(

  nn .Conv2d(in_channels=16,out_channels=32,kernel_size=5,stride=1,padding=2),# (32,14,14)

  nn .ReLU(),

  nn .MaxPool2d(2),# (32,7,7)

  )

  self.out=nn .线性(32 * 7 * 7,100)

  定义向前(自身,x):

  x=自我100 . Sq1(x)

  x=自我100 . Sq2(x)

  x=x.view(x.size(0),-1)

  x=self.out(x)

  ##乙状结肠激活

  输出=F.sigmoid(x) # 1/(1 e**(-x))

  返回输出

  def loss_fn(预测,目标):

  返回-(目标*火炬。对数(预测)(1个目标)*手电筒。log(1-pred)).总和()

  定义多标签_生成(标签):

  Y1=F.one_hot(标签,数量_类别=100)

  Y2=F.one_hot(标签10,数量类=100)

  Y3=F.one_hot(标签50,数量类=100)

  多标签=Y1 Y2 Y3

  返回多标签

  # def multilabel_generate(标签):

  # multilabel_dict={}

  # multi_list=[]

  #对于范围内的I(标签。shape[0]):

  #多_列表。append(multi label _ dict[label[I].item()])

  #多标签_张量=火炬。张量(多列表)

  #返回多标签

  定义火车():

  epoches=10

  mnist_net=CNN()

  mnist_net.train()

  opitimizer=optim .SGD(mnist_net.parameters(),lr=0.002)

  mnist_train=数据集MNIST(mnist-data ,train=True,download=True,transform=transforms)。ToTensor())

  火车_装载机=火炬。utils。数据。数据加载器(mnist _ train,batch_size=128,shuffle=True)

  对于范围内的纪元(纪元:)

  损失=0

  对于batch_X,在火车_装载机:中为批处理_Y

  opitimizer.zero_grad()

  outputs=mnist_net(batch_X)

  loss=loss_fn(outputs,multi label _ generate(batch _ Y))/batch _ x . shape[0]

  loss.backward()

  opitimizer.step()

  打印(损失)

  if __name__==__main__:

  火车()

  以上就是大蟒深度学习之多标签分类器及框架源码的详细内容,更多关于多标签分类器框架源码的资料请关注盛行信息技术软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: