张量:张量是现代机器学习的基础。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。
【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.SGDoptimizer = 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,批量加载训练数据