您当前的位置: 首页 >  pytorch

惊鸿一博

暂无认证

  • 3浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

笔记_深度学习相关_PyTorch

惊鸿一博 发布时间:2020-03-02 22:02:57 ,浏览量:3

知识点 张量

张量:张量是现代机器学习的基础。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。

【tensorflow】浅谈什么是张量tensor :https://blog.csdn.net/qq_31821675/article/details/79188449

范数

x.data.norm() : 正常求2-范数,即所有元素平方和,再开根号。如

梯度

requires_grad=True   要求梯度

卷积

nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)) 参数:   in_channel: 输入数据的通道数,例RGB图片通道数为3;   out_channel: 输出数据的通道数,这个根据模型调整;   kennel_size: 卷积核大小,可以是int,或tuple;kennel_size=2,意味着卷积大小2, kennel_size=(2,3),意味着卷积在第一维度大小为2,在第二维度大小为3;   stride:步长,默认为1,与kennel_size类似,stride=2,意味在所有维度步长为2, stride=(2,3),意味着在第一维度步长为2,意味着在第二维度步长为3;   padding: 零填充 参考: https://blog.csdn.net/qq_26369907/article/details/88366147;

nn.Conv2d 参数及输入输出详解:https://www.cnblogs.com/siyuan1998/p/10809646.html

连接函数

PyTorch的 nn.Linear()是用于设置网络中的全连接层的,需要注意的是全连接层的输入与输出都是二维张量,一般形状为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下:

参考:PyTorch的nn.Linear()详解: https://blog.csdn.net/qq_42079689/article/details/102873766

采样

在pytorch中使用Pooling操作来实现采样,常见的pool操作包含Max_pool,Avg_pool等

# def max_pool2d(inputs,
#                kernel_size,
#                stride=2,
#                padding='VALID',
#                data_format=DATA_FORMAT_NHWC,
#                outputs_collections=None,
#                scope=None):

参考:Pytorch(笔记3)--MaxPool2d&AdaptiveAvgPool2d :http://www.freesion.com/article/491210388/

nn.MaxPool2d(kernel_size=2, stride=(2, 1), padding=(0, 1))
激活函数ReLu

ReLu(Rectified Linear Units)激活函数

ReLU为什么比Sigmoid效果好: https://www.cnblogs.com/alexanderkun/p/6918029.html

常用函数 Pytorch中的view函数

作用是将张量铺平,即变成一行。

例如:

import torch
target = torch.randn(10,2)
print(target)
target = target.view(1,-1)
print(target)

tensor([[ 0.4080,  0.2592],         [-0.6065, -1.6695],         [-0.2938,  1.0712],         [-1.2811,  0.1640],         [-0.1256,  0.3585],         [-0.6682, -0.8516],         [-1.6582,  1.2890],         [ 0.0135,  1.5360],         [-0.1070,  0.6072],         [-0.1969, -0.6077]]) tensor([[ 0.4080,  0.2592, -0.6065, -1.6695, -0.2938,  1.0712, -1.2811,  0.1640,          -0.1256,  0.3585, -0.6682, -0.8516, -1.6582,  1.2890,  0.0135,  1.5360,          -0.1070,  0.6072, -0.1969, -0.6077]])

optim.SGD

optimizer = optim.SGD(net.parameters(), lr=0.01)

Stochastic Gradient Descent (SGD)

SGD是最基础的优化方法,普通的训练方法, 需要重复不断的把整套数据放入神经网络NN中训练, 这样消耗的计算资源会很大.当我们使用SGD会把数据拆分后再分批不断放入 NN 中计算. 每次使用批数据, 虽然不能反映整体数据的情况, 不过却很大程度上加速了 NN 的训练过程, 而且也不会丢失太多准确率.

以optim.SGD为例介绍pytorch优化器:https://www.jianshu.com/p/ff0059a9d2cb

Pytorch中的函数
  • torch.normal(means, std, out=None)
    • 返回一个张量,包含从给定参数(标准差为means,均值为std)的离散正态分布中抽取随机数
  • net = Net(3,10,2)
    • 输入3个特征,设定有10个神经元的隐藏层,输出2个分类
  • loss_func = torch.nn.MSELoss()
    • 回归问题时损失函数使用MSE
  • loss_func = torch.nn.CrossEntropyLoss()
    • 输出的是属于某个类的概率形式,如[0.1, 0.2, 0.7]
  • 搭建神经网络层结构的两种方式
    • 类定义的形式
      • class Net(torch.nn.Module):
            def __init__(self, n_feature, n_hidden, n_output):
                super(Net, self).__init__()
                self.hidden = torch.nn.Linear(n_feature, n_hidden)
                self.predict = torch.nn.Linear(n_hidden, n_output)
        
            def forward(self, x):
                x = F.relu(self.hidden(x))
                x = self.predict(x)
                return x
        
        net1 = Net(1, 10, 1)   # 这是我们用这种方式搭建的 net1

         

    • Sequential的方式
      • net2 = torch.nn.Sequential(
            torch.nn.Linear(1, 10),
            torch.nn.ReLU(),
            torch.nn.Linear(10, 1)
        )

         

  • 批处理:使用 Data.DataLoader,批量加载训练数据

 

 

关注
打赏
1663399408
查看更多评论
立即登录/注册

微信扫码登录

0.0379s