最近在学pytorch,虽然与TF2很类似了,但是感觉很多地方还是不太一样,这篇文章主要就是记录一下学习pytorch中遇到的api。
torch.tensor与torch.from_numpy
Torch.tensor可以将numpy对象转化为tensor,但是得到的tensor与原来的数据不共享内存;
torch.from_numpy也可以将numpy对象转化为tensor,但是得到的tensor与原来的数据共享内存。
nn.Conv2d
nn.Conv2d(in_channels,out_channels,kernel_size,strides=1,padding=0)
其中,in_channels表示输入的channels数目,out_channels表示输出的channels数目,kernel_size表示卷积核大小,一般是一个数字或者一个tuple。注意:在nn.conv2d中,无激活函数,需要使用nn.functional中的函数来激活。输入的维度是(batch_size,channels,height,width),与tensorflow不太一样。
nn.MaxPool2d
nn.MaxPool2d(kernel_size,stride=0,padding=1)
输入维度是(batch_size,channels,height,width),输出维度是:(batch_size,channels,height_out,width_out)。
nn.Linear
输入的维度是:(batch_size,seq_length,hidden_size),这个与卷积层的输入是不一样的!
nn.LSTM(input_size=10,hidden_size=20,num_layers=1,batch_first=False,bidirectional=False)
Input_size表示输入的张量的最后一个维度
hidden_size表示输出的张量的最后一个维度
num_layers表示叠加的LSTM的数目,默认为1
batch_first=True表示batch_size放在第0维,那么输入的维度是:(batch_size,seq_length,input_size);默认为false,即输入的维度是:(seq_length,batch_size,input_size)
bidirectional=True表示是BILSTM;默认为false。
pytorch中的各种loss function链接
nn.NLLLoss()表示负对数似然函数,适用于多分类,在使用这个之前,需要使用nn.LogSoftmax;
nn.CrossEntropyLoss表示交叉熵损失函数,适用于多分类,在使用这个之前,不需要使用softmax,只需要得到logits就可以了,结果与nn.NLLLoss结果一样;
1 | import torch |
np.random中的各种api
- np.random.normal(size=(3,4,5))
- np.random.randint(low=1,high=10,size=(3,4,5))
- np.random.randn(3,4,5)
- np.random.choice(tensor,size=(3,4,5))
- np.random.rand(3,4,5)
permute
一般我们都是使用permute来交换维度,一般不用transpose,注意在使用permute的时候,我们是:x.permute(1,2,3)。
view与reshape讲解
如果我们在使用view之前,使用了transpose与permute等操作,我们一般要紧跟着contiguous(),然后再调用view,要不然会报错;
如果我们不想使用contiguous+view这样的操作,我们也可以使用reshape,但是我们会创建新的tensor。