小白学习之pytorch框架(4)-softmax回归(torch.gather()、torch.argmax())

学习pytorch路程之动手学深度学习-3.4-3.7

置信度、置信区间参考:https://cloud.tencent.com/developer/news/452418 本人感觉还是挺好理解的

交叉熵参考博客:https://www.cnblogs.com/kyrieng/p/8694705.html   https://blog.csdn.net/tsyccnh/article/details/79163834  个人感觉还不错,好理解

(这段瞅瞅就行了)torchvision包,服务于PyTorch深度学习框架的,用于构建计算机视觉模型,主要构成有:

  torchvision.datasets:加载数据的函数及常用的数据集接口

  torchvision.mdoels:包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等

  torchvision.transforms:常用的图片变换,例如裁剪、旋转等

  torchvision.utils:其他一些有用的方法

一行里画出多张图像和对应标签的函数

def show_fashion_mnist(images, labels):
    use_svg_display()
    # 这里的_表示我们忽略(不使用)的变量
    _, figs = plt.subplots(1, len(images), figsize=(12, 12))    # subplots(row, cloumn, figsize=(12, 12)) row:子图的行数,即有几行;column:子图的列数,即一行有几个图;  # figsize:子图的Height和Width 其他参数请参考博客https://www.cnblogs.com/zhouzhe-blog/p/9614761.html 感谢大佬     # fig, ax = subplots() fig:返回一个图像fig(这是一个整幅图像,含有子图);ax:返回子图列表(fig的子图)
    for f, img, lbl in zip(figs, images, labels):     # zip()把可迭代的对象中的元素打包成一个个的元组,返回这些元组的列表。若是可迭代对象的元素个数不一致,     # 则返回列表的长度与最短的对象相同https://www.runoob.com/python/python-func-zip.html     
        f.imshow(img.view((28, 28)).numpy()) # imshow(x,cmap) x表示要显示图片的变量,cmap为颜色图谱,默认为RGB(A)
        # imshow()其他参数可百度     f.set_title(lbl) # 设置图像标题
        f.axes.get_xaxis().set_visible(False) # 设置x轴不可见
        f.axes.get_yaxis().set_visible(False) # 设置y轴不可见
    plt.show()

查看数据集前10个图片及对应标签

X, y = [], []
for i in range(10):
    X.append(mnist_train[i][0])  # 每个图片对应的tensor(形状如torch.size([1, 28, 28]))附加到列表X中
    y.append(mnist_train[i][1])  # 每个图像对应的labels的数字代表(即用0-9代替了标签)
show_fashion_mnist(X, get_fashion_mnist_labels(y)) # get_fashion_mnist_labels()通过数字获取对应的标签  show_fashion_mnist()显示图片和对应的label

softmax回归实现

  torch.gather()函数的理解

  下面说说我对gather()函数的理解,gather(input,dim,index,out=None),对于gather函数我百度了一些解释,参考了一些博客,如  https://www.jianshu.com/p/5d1f8cd5fe31  (对dim=0时的三维tensor解释的可以)   https://blog.csdn.net/edogawachia/article/details/80515038

以上述第一个博客的tensor为例,

input = tensor([[[18.,   5.,   7.,   1.,   1.],
              [  3.,  26.,   9.,   7.,   9.],
              [ 10.,  28.,  22.,  27.,   0.]],

             [[ 26.,  10.,  20.,  29.,  18.],
              [  5.,  24.,  26.,  21.,   3.],
              [ 10.,  29.,  10.,   0.,  22.]]])

index = torch.LongTensor([[[0,1,2,0,2],
                          [0,0,0,0,0],
                          [1,1,1,1,1]],
                        [[1,2,2,2,2],
                         [0,0,0,0,0],
                         [2,2,2,2,2]]])
首先明确tensor的形状是(2,3,5),即第一层中括号里有2个维度,第二层中括号里有3个维度,第三层中括号里有5个维度,所以(2,3,5)
dim = 1
  即用index里值修改代替index对应位置的数值的下标中第2个下标值。例如index中下标为(0,0,0)的对应值0,用对应值0替换  下标中第2个值0得出(0,0,0),然后去input中取下标为(0,0,0)的值18放入输出tensor下标(0,0,0)对应位置index中下标为(0,0,1)的对应  值1,用对应值1替换下标中第2个值得出(0,1,1),取出input中下标为(0,1,1)的值为26放入输出tensor下标(0,0,1)对应位置;index中下标为(1,0,1)  对应值2,用对应值2替换下标中第2个值得出(1,2,1),取出input中下标为(1,2,1)的值为29放入输出tensor下标(1,0,1)对应位置。  依次类推,得出输出tensor如下:  tensor([[[ 18., 26., 22., 1., 0.],         [ 18., 5., 7., 1., 1.],         [ 3., 26., 9., 7., 9.]],         [[ 5., 29., 10., 0., 22.],         [ 26., 10., 20., 29., 18.],         [ 10., 29., 10., 0., 22.]]])
dim = 2
  同理dim=1,这次只不过是替换下标中第3个值。如index中下标为(0,0,4)的对应值2,替换后得(0,0,2),取input值为7
index2 = torch.LongTensor([[[0,1,1,0,1],
                          [0,1,1,1,1],
                          [1,1,1,1,1]],
                        [[1,0,0,0,0],
                         [0,0,0,0,0],
                         [1,1,0,0,0]]])
 dim = 0  同理dim=1,这次是替换下标中第1个值。如index2中下标为(0,0,1)的对应值1,替换后的(1,0,1),取input值为10

torch.argmax()函数的理解

  我真是菜的一批,看了好久(一看就困),以博客 https://blog.csdn.net/weixin_42494287/article/details/92797061 的三维的例子为例,说一下个人的理解

a=torch.tensor([
              [
                  [1, 5, 5, 2],
                  [9, -6, 2, 8],
                  [-3, 7, -9, 1]
              ],
              [
                  [-1, 7, -5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9, 1]
              ]])
# a的形状为(2,3,4) 比较时,若是第一块和第二块比,值一样,则取第二块的位置值;dim表示维度,要干掉的维度
b=torch.argmax(a,dim=0)
  dim=0,干掉第一维,也就是剩下(3,4),即红色中括号里对应位置数字相比,第一个红色中括号对应位置数字大,则取0,否则取1。  值相同取第二个红色中括号对应值1(对应上面的黑色粗体字)。(为什么取0/1?)
  结果:  tensor([[0, 1, 0, 1],      [1, 1, 1, 1],      [1, 1, 1, 1]])
c=torch.argmax(a,dim=1)
  dim=1,干掉第二维,也就是剩下(2,4),即蓝色和荧光绿色中括号里对应位置数字相对蓝色剩一行荧光绿色剩一行。以蓝色为例,第一个蓝色中括号  数值大则取0,第二个蓝色中括号数值大则取1,第三个蓝色中括号数值大则取2。(为什么取0/1/2?)
  结果:
  tensor([[1, 2, 0, 1],      [1, 2, 2, 1]])
d=torch.argmax(a,dim=2)  dim=2,干掉第三维,也就是剩下(2,3),即红色中括号为2,蓝色和荧光绿色为3,也就是蓝色和荧光绿色中括号里剩一个值并转置(或者说取了值后放  在一个列表里)。例如:第一个蓝色中括号:有2个5,取第二个5,取值2;第二个蓝色中括号:9最大,取值0;第三个蓝色中括号:7最大,取值1。组成列表为[2,0,1]  结果:
  tensor([[2, 0, 1],      [1, 0, 2]])
二维也一样,去掉某一维即可

看明白了argmax函数后,torch.sum(input,dim,output)也就懂了,不过sum是把要干掉的维度上数求和(即合并成一个)

原文地址:https://www.cnblogs.com/JadenFK3326/p/12120924.html

时间: 2024-10-25 22:42:22

小白学习之pytorch框架(4)-softmax回归(torch.gather()、torch.argmax())的相关文章

小白学习之pytorch框架(2)-动手学深度学习(begin)

在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比较执着,想学pytorch,好,有个大神来了,把<动手学深度学习>整本书用pytorch代码重现了,其GitHub网址为:https://github.com/ShusenTang/Dive-into-DL-PyTorch   原书GitHub网址为:https://github.com/d2l-

小白学习之pytorch框架(5)-多层感知机(MLP)-(tensor、variable、计算图、ReLU()、sigmoid()、tanh())

先记录一下一开始学习torch时未曾记录(也未好好弄懂哈)导致又忘记了的tensor.variable.计算图 计算图 计算图直白的来说,就是数学公式(也叫模型)用图表示,这个图即计算图.借用 https://hzzone.io/cs231n/%E7%90%86%E8%A7%A3-PyTorch-%E8%AE%A1%E7%AE%97%E5%9B%BE%E3%80%81Autograd-%E6%9C%BA%E5%88%B6%E5%92%8C%E5%AE%9E%E7%8E%B0%E7%BA%BF%E

小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) 模型选择 验证数据集(validation data set),又叫验证集(validation set),指用于模型选择的在train set和test set之外预留的一小部分数据集 若训练数据不够时,预留验证集也是一种luxury.常采用的方法为K折交叉验证.原理为:把train set分割成k个不重合

【动手学pytorch】softmax回归

一.什么是softmax? 有一个数组S,其元素为Si ,那么vi 的softmax值,就是该元素的指数与所有元素指数和的比值.具体公式表示为: softmax回归本质上也是一种对数据的估计 二.交叉熵损失函数 在估计损失时,尤其是概率上的损失,交叉熵损失函数更加常用.下面是交叉熵 当我们预测单个物体(即每个样本只有1个标签),y(i)为我们构造的向量,其分量不是0就是1,并且只有一个1(第y(i)个数为1).于是.交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确.遇

《深度学习与计算机视觉算法原理框架应用》PDF+《深度学习之PyTorch实战计算机视觉》PDF

下载:https://pan.baidu.com/s/12-s95JrHek82tLRk3UQO_w <深度学习与计算机视觉 算法原理.框架应用>PDF,带书签,347页.<大数据架构详解:从数据获取到深度学习>PDF,带书签,373页.配套源代码. 下载:https://pan.baidu.com/s/1P0-o29x0ZrXp8WotN7GzcA<深度学习之PyTorch实战计算机视觉> 更多分享:https://pan.baidu.com/s/1g4hv05UZ_

UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归.教程中已经给了cost及gradient的求法.需要注意的是一般用最优化方法求解参数theta的时候,采用的是贝叶斯学派的思想,需要加上参数theta. 习题答案: (1) 数据加载------代码已给 (2) %% STEP 2: Implement softmaxCost   得到计算cost和gradient M = theta

ufldl学习笔记与编程作业:Softmax Regression(softmax回归)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ softmax回归其实是逻

UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归. 教程中已经给了cost及gradient的求法.须要注意的是一般用最优化方法求解參数theta的时候,採用的是贝叶斯学派的思想,须要加上參数theta. softmax回归 习题的任务就是用原有的像素数据集构建一个softmax回归模型进行分类.准确率略低 92.6%,. 而自我学习是用5~9之间的数据集当做无标签的数据集,然后构建

PyTorch框架+Python 3面向对象编程学习笔记

一.CNN情感分类中的面向对象部分 sparse.py 1 super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义初始化 1 self.weight = Parameter(torch.Tensor(num_embeddings, embedding_dim)) Parameter跳转 1 class Parameter(Variable): 2 """A kind of Variabl