pytorch学习笔记-高阶篇(时间序列表示)
前面已经学习了对于2d数据(图片等)的处理,卷积神经网络的相关知识,本篇主要介绍对于语言,连续文字等时间序列的表示方法
一、representation
对于文字信息,string类型, pytorch没有直接的数据类型处理,这里需要编码转换。常用的方法就是:Sequence representation。用一个向量来代表单词。
[seq_len,feature_len]
向量第一维表示序列长度,第二维表示表示方法
```

  对于图片中的文本表示,编码方式是**one-hot**那长度就取决于单词的数量,第一位为1表示是Rome,依次类推。如果有3500个单词,这句话的单词数是5,那就可以表示为[5, 3500]

本篇主要是卷积神经网络的实战,网络结构是resnet,数据集用的是CIFAR-10
一、resnet
resnet前面已经介绍过,这里不再赘述,需要和前面的Lenet5作区分,最显著的区别是一个短接 short cut的过程
二、resnet类
import torch
from torch import nn
from torch.nn import functional as F
class ResBlk(nn.Module):
def __init__(self, ch_in, ch_out, stride=1):
"""
Args:
ch_in:
ch_out:
"""
super(ResBlk, self).__init__()
self.conv1 = nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=stride, pa ...
pytorch学习笔记-高阶篇(卷积神经网络实战1)
本篇主要是卷积神经网络的实战,数据集用的是CIFAR-10
一、CIFAR-10介绍
CIFAR-10有10大类图片,分别是:airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truck。CIFAR-100是把这10大类细分为100类。每张图片的尺寸是32x32,每一类有6000张图片,一共60000张,按照5:1分为训练和测试数据集。
二、Lenet类
import torch
from torch import nn
from torch.nn import functional as F
class Lenet5(nn.Module):
"""
for cifar10 dataset
"""
def __init__(self):
super(Lenet5, self).__init__()
self.conv_unit = nn.Sequential(
# ...
pytorch学习笔记-高阶篇(数据增强)
为了使网络的性能增强,一个很常见的方法或者说途径就是增大数据集,本篇介绍一种最大化利用已有数据集的方法–数据增强
一、可选优化方法
对于数据有限这一不可避免的事实,我们可以:
减少网络参数量
Regularization
数据增强
二、数据增强
Fliptrain_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
# 随机性保证不是所有的图片都做此操作
transforms.RandomHorizontalFlip(),
transforms.RandomVerticalFlip(),
transforms.ToTensor(),
# transf ...
pytorch学习笔记-高阶篇(nn.module)
本篇主要介绍所有网络层次类的父类:nn.module
一、内置一些网络层
Linear
ReLu
Sigmoid
Conv2d
ConvTransposed2d
Dropout
二、Container
即Sequential类
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.net = nn.Sequential(BasicNet(),
nn.ReLU(),
nn.Linear(3, 2))
def forward(self, x):
return self.net(x)
三、parameters
四、modules
modules: 指所有的节点
children:指直系孩子
class Net(nn.Module):
def __init__(self ...
pytorch学习笔记-高阶篇(深度残差网络)
本篇主要记录一下深度残差网络的相关知识
一、Resnet提出
随着研究的深入,人们就想着是不是网络层数越高,深度越深,网络的性能就越好。但经过实验发现并不是如此。所以就引入了深度残差网络这一概念,初衷是想比如原来有22层,我加上8层,但是我要保证现在的这30层性能还要差,于是可以引一条short cut到22层的地方,保证如果这新加的8层如果没有带来更好的性能就沿用之前的22层所得。
二、Resnet网络
class ResBlk(nn.Module):
"""
resnet block
"""
def __init__(self, ch_in, ch_out):
"""
:param ch_in:
:param ch_out:
"""
super(ResBlk, self).__init__()
self.conv1 = ...
pytorch学习笔记-高阶篇(经典卷积网络)
本篇主要记录一下卷积神经网络的一些经典网络
一、LeNet
二、AlexNet
三、VGG
四、GoogLeNet
pytorch学习笔记-高阶篇(batchnorm)
本篇主要记录一下一些卷积神经网络中batch norm相关知识
一、batch Norm引入
对于sigmoid函数,在有效范围外就会梯度接近0,出现梯度离散的情况,数据长时间得不到更新,这不是我们所希望的,因此就需要把输入值控制在有效范围内,对此,引入batch norm把输入映射到希望的范围内。
二、feature Scaling
对于一个普通的RGB三通道的图片:经过适当的各通道的标准化,可以使得三个通道接下来对卷积层等的作用效果几乎等价,不至于R通道要改变很大时而G通道改变很小时的效果差不多。可以上梯度下降的过程更加平滑
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
```
### 三、batch Norm

  对于batch norm,比如[6, 3, 28, 28]这样shape的 ...
pytorch学习笔记-高阶篇(池化层)
本篇主要记录一下一些卷积神经网络中池化层和采样相关知识
一、下采样(降维)
1.原始 sub sampling
最初的降维的下采样没有复杂的机制,只是简单的隔行采样
1.最大池化 max pooling
同样用一个小窗口扫描整个feature map,比较特殊的是最大池化指的是取小窗口中最大值作为采样值
2.平均池化 Avg pooling
x = torch.randn([1, 16, 14, 14])
# Out[4]: torch.Size([1, 16, 14, 14])
layer = nn.MaxPool2d(kernel_size=2, stride=2)
out = layer(x)
# Out[8]: torch.Size([1, 16, 7, 7])
out = F.avg_pool2d(x, 2, stride=2)
# Out[12]: torch.Size([1, 16, 7, 7])
二、上采样(放大)
out = F.interpolate(x, scale_factor=2, mode='nearest')
# Out[14]: ...
pytorch学习笔记-高阶篇(卷积神经网络)
本篇主要记录一下卷积神经网络的相关知识
一、多通道
对于原来1通道的28*28的一个Image通过7个不同的卷积核,可以理解为从7个不同的角度观察这个图片,得到7个通道的新的feature map
下面以该图为例,解释各参数的size
x:[batch_size, ch_in, 28, 28]
[b, 3, 28, 28],3是表示 RGB 3通道
单个卷积核:[ch, 3, 3]
[3, 3, 3],3同样表示 RGB 3通道,这里必须和输入的通道数匹配,后面的是卷积核的size
多个卷积核:[16, ch, 3, 3]
16表示卷积核的个数,这里是单纯地复制,是完全一样的16个(批)
bias:16
output:[batch_size, ch_in, 28, 28]
[b, 16, 28, 28]
二、API使用
小写的nn.F中的conv2d和Conv2d用法含义类似(参数有所不同[input,kerbel,output,stride等…])),这里不再赘述
layer = nn.Conv2d(in_channels=1, out_ch ...