pytorch中view的使用小结

本文详细介绍了PyTorch中Tensor的view方法,包括其作用、流程及与numpy的resize和reshape的相似性。view操作不会创建新数据,而是提供了一个不同形状的视图,共享原始数据的内存。当修改其中一个Tensor时,另一个也会相应改变。此外,还提到了view的-1参数用法,说明了不能推断的情况。通过实例展示了合法和不合法的view参数设置。
摘要由CSDN通过智能技术生成

pytorch中的view类似于numpy中的resize和reshape,也就是说它的作用是重新组合tensor数据

它的流程为:

  1. 将原始tensor数据按行展开。比如[[[1,2,3],[4,5,6]]],展开成一维向量之后就是[1,2,3,4,5,6]。
  2. 然后按照参数组合成新的tensor(与原始tensor没有关联)。

理解一:

不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。举例如下:

import torch

a=torch.Tensor([[[1,2,3],[4,5,6]]])
b=torch.Tensor([1,2,3,4,5,6])

print(a.view(1,6))
print(b.view(1,6))

输出:

tensor([[1., 2., 3., 4., 5., 6.]])
tensor([[1., 2., 3., 4., 5., 6.]])

理解二:

对原始tensor进行view操作之后,它们共享内存,其中一个tensor改变,会造成另一个tensor改变。所以view只是改变给人看的数据排列形式。

import torch

x = [1,2,3,4,5,6]
a=torch.Tensor(x)

t = a.view(1, 6)

print(a)
print(t)

a[0] = 10 #修改a[0]的值
print(a)
print(t)#会造成a.view改变,所以t也跟着变化。

t[0][1] = 100 #修改t[0][1]的值
print(a)#会造成a的改变。
print(t)

print(t.storage().data_ptr() == a.storage().data_ptr()) #返回True,也就是共享内存

输出:

tensor([1., 2., 3., 4., 5., 6.])
tensor([[1., 2., 3., 4., 5., 6.]])
tensor([10.,  2.,  3.,  4.,  5.,  6.])
tensor([[10.,  2.,  3.,  4.,  5.,  6.]])
tensor([ 10., 100.,   3.,   4.,   5.,   6.])
tensor([[ 10., 100.,   3.,   4.,   5.,   6.]])
True

view的-1参数

view中的参数不能忽略,如果想要让程序自己推到,可以将参数设置为-1。

  • 不能被推断的情况:
  • 情况一:推断有歧义,比如说有6个数据,而设置view(-1,-1,-2),那么就会造成歧义,因为-1的值可以是1和3。
  • 情况二view只能出现一个-1。即使人可以推断出来,也不能view的参数也不可以出现2个以上的-1。例如有6个数据,而view(-1,-1,6),这种情况也是不被允许的。

代码举例:

import torch

a=torch.Tensor([[[1,2,3],[4,5,6]]])

print(a.view(-1,6))
print(a.view(-1,3))
print(a.view(-1,-1,6))#不能出现一个以上的-1推断

输出:

tensor([[1., 2., 3., 4., 5., 6.]])
tensor([[1., 2., 3.],
        [4., 5., 6.]])
Traceback (most recent call last):
  File "../pytorch/test/test.py", line 7, in <module>
    print(a.view(-1,-1,6))
RuntimeError: only one dimension can be inferred
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PyTorch使用TensorBoard可以通过安装TensorBoardX库来实现。TensorBoardX是一个PyTorch的扩展库,它提供了一种将PyTorch的数据可视化的方法,可以将训练过程的损失函数、准确率等指标以图表的形式展示出来,方便用户对模型的训练过程进行监控和调试。具体使用方法可以参考TensorBoardX的官方文档。 ### 回答2: PyTorch是一款流行的深度学习框架,用于实现神经网络模型和训练过程。TensorBoard是与TensorFlow框架一起使用的一个可视化工具,方便进行模型训练和性能调优。但是,PyTorch用户也可以充分利用TensorBoard来监控他们的模型。 在PyTorch使用TensorBoard主要包括以下几个步骤: 1. 安装TensorBoard和TensorFlow:需要在PyTorch的虚拟环境安装TensorFlow和TensorBoard,这可以使用pip来完成。 2. 导入所需的库:首先,需要导入PyTorch库和TensorFlow库。在这里,PyTorch库用于定义、训练和测试模型,而TensorFlow库用于可视化和监视模型训练过程。可以使用以下代码导入这些库: ``` import tensorflow as tf from torch.utils.tensorboard import SummaryWriter ``` 3. 创建SummaryWriter对象:SummaryWriter是TensorBoard类的主要接口。可以使用它来创建TensorBoard的摘要文件和事件文件。在下面的代码,可以创建一个名为“runs/xxx”的摘要写入器: ``` writer = SummaryWriter('runs/xxx') ``` 4. 定义模型:在PyTorch定义模型。在下面的代码,定义了一个包含两个全连接层的简单线性模型: ``` import torch.nn as nn class LinearModel(nn.Module): def __init__(self): super(LinearModel, self).__init__() self.fc1 = nn.Linear(784, 100) self.fc2 = nn.Linear(100, 10) def forward(self, x): x = x.view(-1, 784) x = nn.functional.relu(self.fc1(x)) x = self.fc2(x) return x ``` 5. 记录数据:使用writer对象记录数据。可以使用以下代码来记录训练数据: ``` for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 定义前向传递 outputs = model(images) # 计算损失 loss = criterion(outputs, labels) # 后向传递和优化器的更新 optimizer.zero_grad() loss.backward() optimizer.step() # 记录损失和准确率 writer.add_scalar('Training/Loss', loss.item(), epoch * len(train_loader) + i) total = labels.size(0) _, predicted = torch.max(outputs.data, 1) correct = (predicted == labels).sum().item() writer.add_scalar('Training/Accuracy', 100 * correct / total, epoch * len(train_loader) + i) ``` 6. 可视化和监控:在运行完上述代码后,可以返回到TensorBoard,可视化和监视训练过程。输入以下命令,启动TensorBoard服务: ``` tensorboard --logdir=runs ``` 然后,在Web浏览器,输入http://localhost:6006访问TensorBoard服务器。此时,可以看到图形界面显示了许多模型指标,例如损失和准确率。点击“Scalars”选项卡,就可以查看训练过程的损失和准确率曲线。 总之,在PyTorch使用TensorBoard可以方便地监视模型的训练和性能,并且TensorBoard可以提供可视化和交互式工具来帮助调试模型。 ### 回答3: PyTorch是近年来开发迅速的深度学习框架之一,基于Python语言,操作简便易学,广受欢迎。其应用范围广泛,包括图像识别、文本分类、语言模型等多种场景。 TensorBoard是TensorFlow框架提供的可视化工具,能够展现模型训练过程的各类参数、数据和图形化结果。然而,使用PyTorch的开发者也可以使用TensorBoard,PyTorch支持使用TensorBoard进行训练过程可视化。 下面是关于使用TensorBoard来监测PyTorch训练过程的几种方法: 一、使用TensorboardX TensorBoardX是一种基于PyTorch创建的TensorBoard工具,它使用了TensorFlow的tensorboard接口。使用该工具需要对PyTorch进行一些包的安装。 首先安装TensorboardX包: ```python !pip install tensorboardX ``` 然后,创建一个SummaryWriter,监测损失函数、准确率、图像等数据: ```python from tensorboardX import SummaryWriter writer = SummaryWriter("tb_dir") for i in range(100): writer.add_scalar('loss/train', i**2, i) writer.add_scalar('loss/test', 0.7*i**2, i) writer.add_scalar('accuracy/test', 0.9*i, i) writer.add_scalar('accuracy/train', 0.6*i, i) ``` 最后启动TensorBoard,运行 pytorch使用tensorboard的命令行。 ``` tensorboard --logdir tb_dir --host localhost --port 8088 ``` 二、使用PyTorch内置的TensorBoard可视化 pytorch 1.2版本以上,又增加了 PyTorch自带的TensorBoard可视化,PyTorch 内置的与TensorBoard的API兼容,创建SummaryWriter的方法更加简便,而不需要安装多个包。在训练过程,与使用TensorBoardX类似,将需要监测的数据文件写入到SummaryWriter: ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() for i in range(100): writer.add_scalar('loss/train', i**2, i) writer.add_scalar('loss/test', 0.7*i**2, i) writer.add_scalar('accuracy/test', 0.9*i, i) writer.add_scalar('accuracy/train', 0.6*i, i) ``` 运行 tensorboard --logdir , 输入PyTorch写入的文件即可。 三、使用Fastai集成的TensorBoardCallback 除了TensorboardX和PyTorch内置的TensorBoard可视化外,有另外一个可选方案,即使用Fastai的TensorBoardCallback。Fastai是基于PyTorch的高级深度学习框架,其包含了处理端到端的许多好用工具,包括用于监控训练进程的TensorBoardCallback。下面是使用方法: ```python from fastai.basics import * path = untar_data(URLs.MNIST_SAMPLE) data = ImageDataBunch.from_folder(path) learn = cnn_learner(data, models.resnet18, metrics=accuracy, callback_fns=ShowGraph) learn.fit(5) ``` 设置callback_fns的ShowGraph即可可视化监测模型的训练过程。 总结 PyTorch是一个强大的深度学习框架,它提供了多种工具监测模型的训练过程。TensorBoard是目前广泛使用的可视化工具之一,使用TensorboardX、PyTorch内置的可视化、Fastai的TensorBoardCallback等方法均可实现PyTorch训练过程的监测和可视化,方便开发者了解模型的训练进程,发现问题并进行调整优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值