周工作交流

CNN神经网络模型学习

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable

class Net(nn.Module):
    #定义Net的初始化函数,这个函数定义了该神经网络的基本结构
    def __init__(self):
        super(Net, self).__init__() #复制并使用Net的父类的初始化方法,即先运行nn.Module的初始化函数
        self.conv1 = nn.Conv2d(1, 6, 2) # 定义conv1函数的是图像卷积函数:输入为图像(1个频道,即灰度图),输出为 6张特征图, 卷积核为5x5正方形
        self.conv2 = nn.Conv2d(6, 16, 2)# 定义conv2函数的是图像卷积函数:输入为6张特征图,输出为16张特征图, 卷积核为5x5正方形
        self.fc1   = nn.Linear(16*6*6, 120) # 定义fc1(fullconnect)全连接函数1为线性函数:y = Wx + b,并将16*5*5个节点连接到120个节点上。
        self.fc2   = nn.Linear(120, 84)#定义fc2(fullconnect)全连接函数2为线性函数:y = Wx + b,并将120个节点连接到84个节点上。
        self.fc3   = nn.Linear(84, 10)#定义fc3(fullconnect)全连接函数3为线性函数:y = Wx + b,并将84个节点连接到10个节点上。

    #定义该神经网络的向前传播函数,该函数必须定义,一旦定义成功,向后传播函数也会自动生成(autograd)
    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2),2) #输入x经过卷积conv1之后,经过激活函数ReLU(原来这个词是激活函数的意思),使用2x2的窗口进行最大池化Max pooling,然后更新到x。
        x = F.max_pool2d(F.relu(self.conv2(x)), 2) #输入x经过卷积conv2之后,经过激活函数ReLU,使用2x2的窗口进行最大池化Max pooling,然后更新到x。
        # print(x.shape,787877878)
        x = x.view(-1, self.num_flat_features(x)) #view函数将张量x变形成一维的向量形式,总特征数并不改变,为接下来的全连接作准备。
        # print(x.shape,444444454)
        # x=x.view(x.size(0),-1)
        x = F.relu(self.fc1(x)) #输入x经过全连接1,再经过ReLU激活函数,然后更新x
        x = F.relu(self.fc2(x)) #输入x经过全连接2,再经过ReLU激活函数,然后更新x
        x = self.fc3(x) #输入x经过全连接3,然后更新x
        return x

    #使用num_flat_features函数计算张量x的总特征量(把每个数字都看出是一个特征,即特征总量),比如x是4*2*2的张量,那么它的特征总量就是16。
    def num_flat_features(self, x):
        size = x.size()[1:] #16,6,6 这里为什么要使用[1:],是因为pytorch只接受批输入,也就是说一次性输入好几张图片,那么输入数据张量的维度自然上升到了4维。【1:】让我们把注意力放在后3维上面
        num_features = 1
        for s in size:
            num_features *= s
        return num_features
net = Net()

# 以下代码是为了看一下我们需要训练的参数的数量
print (net)
input = Variable(torch.randn(20, 1, 30,30))
output=net(input)
# print(output)
params = list(net.parameters())
print(params)
k=0
jo=0
for i in params:
    l =1
    jo=jo+1
    print(jo)
    print( "该层的结构:"+str(list(i.size())))
    # print(i.size())
    for j in i.size():
        # print(1)
        l *= j
    print ("参数和:"+str(l))
    k = k+l

print ("总参数和:"+ str(k))

在这里插入图片描述

论文阅读中:Multi-Label Learning with Global and Local Label Correlation

本文提出了一种新的多标签方法GLOCAL,通过潜在标签表示和优化标签流形,同时利用全局和局部标签相关性来处理完整标签和丢失标签的情况。

1.简介

低秩结构可以被视为隐含地利用标签相关性,但仍需要明确地使用标签相关性。这已被证明有助于恢复丢失的标签。然而,在缺少标签的情况下,标签相关性的估计变得更加困难,因为观察到的标签分布与真实分布不同。因此,提出了一种称为“具有全局和局部标签相关性的多标签学习”(GLOCAL)新方法,它可以同时恢复丢失的标签,训练线性分类器,探索和利用全局和局部标签相关性。鼓励分类器输出在高度正相关相似的标签,并在高度负相关标签上不同。

2.GLOCAL算法

该算法在学习分类器时探索并利用全局和局部标签相关性。它可以用于带有完整标签或缺少标签的任务。它的成功主要归功于四个因素:(1)它使用标签矩阵的低秩结构来获得更紧凑和抽象的潜在标签表示,这也为丢失标签的恢复提供了一个自然的解决方案;(2) 它利用全局和局部标签相关性,因此标签分类器可以利用来自所有标签的信息;(3) 它直接从数据中学习标签相关性,无需对相关性矩阵进行普通且困难的手动说明 ;(4) 它将上述问题集成到一个联合学习问题中,并采用高效的交替最小化策略进行优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值