哈哈哈哈哈哈

例如 x=torch.randn(1,2,3,4)
x.repeat(1,3,1,1)
经过repeat后的x为(1,6,3,4),也就是把第二个维度重复三次。
若为x.repeat(1,1,2,1),
则x为(1,2,6,4),就是把每行重复一次。在这里插入图片描述

    random.seed(args.seed)
    np.random.seed(args.seed)
    torch.manual_seed(args.seed)
    torch.cuda.manual_seed(args.seed)

seed也就是随机种子,随机数的生成本质上是一个复杂的算法,算法开始需要一个初始值,而seed就是这个初始值,我们将一个初始值代入随机数生成,会返回两个结果,一个是通过计算产生的随机数,另外一个是计算下一个随机数所需要的随机种子,也就是说,如果保持输入的随机种子不变,random函数会返回相同的值。
具体例子如下:

随机种子在循环外,所以生成的四个随机数不同。
在这里插入图片描述
随机种子在循环内,所以生成的四个数是完全相同的,因为随机算法的初始值相同。

其中后两个是为CPU,GPU设置随机种子。

torch.max(tensor, dim=r_dim, keepdim=True)

图像转tensor

path = r'C:\Users\hwq\Desktop\data\1.png'
image = Image.open(path)
Trans = transforms.ToTensor()
image = Trans(image)

tensor的形状是C,H,W
tensor转图像

unloader = transforms.ToPILImage()
image1 = unloader(a)

今天看代码时遇到一个问题:

import torch.nn as nn
import torch
torch.manual_seed(1234)
class Embeddings(nn.Module):
    def __init__(self,css=3):
        super(Embeddings, self).__init__()
        self.conv1 = nn.ModuleList([nn.Conv2d(in_channels=css,out_channels=css,kernel_size=1) for i in range(css)])
    def forward(self,x):
        x = self.conv1(x)
        x = x.transpose(-1, -2)
        return x
a=Embeddings()
b=torch.randn(1,3,5,5)
a(b)

代码看着没什么问题,但是在运行的时候,总是报错

TypeError: forward() takes 1 positional argument but 2 were given

百度搜了好久没有解决。记录一下。

发现时nn.MoudleList的问题,不能这么写。改过以后是这样:

import torch.nn as nn
import torch
torch.manual_seed(1234)
class xx(nn.Module):
    def __init__(self,css=3):
        super(xx, self).__init__()
        self.layer = nn.ModuleList()
        self.conv1 = nn.Conv2d(in_channels=css,out_channels=css,kernel_size=1)
        for _ in range(2):#12
            layer = self.conv1
            self.layer.append(layer)
    def forward(self,x):
        for layer_block in self.layer:
            x=layer_block(x)
            print(x)
        return x

用append添加层,再用for循环调用。

改变tensor的类型

image.type(torch.float32)

print(image.dtype)

tensor放入cuda

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值