RNN seq2seq中所涉及到的函数用法

本文介绍了如何在PyTorch中使用torch.view()函数调整张量维度,并对比了torch.rand()和torch.randn()生成随机数的差异,包括均匀分布与标准正态分布。通过实例展示了随机数生成的结果。
摘要由CSDN通过智能技术生成

view

torch.view()
如果你想改变一个 tensor 的大小或者形状,你可以使用torch.view。
在pytorch中view函数的作用为重构张量的维度,相当于numpy中resize()的功能。view()返回的数据和传入的tensor一样,只是形状不同

当参数是-1 的时候,自适应的调节

rand函数

torch.rand(size,out) 和 torch.randn(size,out)有什么区别?

rand均匀分布
返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。

randn 是标准正态分布
返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。

t1 = torch.randn(2,4)
for i in enumerate(t1):
    print(i)

随机生成的结果。
(0, tensor([-0.1951, -1.2249, -0.1557, -0.8947]))
(1, tensor([-1.2676, 1.0490, -0.2844, -1.0318]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyTorch中,Seq2Seq模型是一个常用的用于处理序列数据的模型,主要用于将一个序列转换为另一个序列。这种模型在自然语言处理、语音识别等领域都有广泛的应用。 Seq2Seq模型由两个部分组成:编码器和解码器。编码器将输入序列转换为一个固定大小的向量表示,解码器将这个向量表示转换为目标序列。在训练过程中,Seq2Seq模型会将编码器和解码器联合起来进行训练,以最小化输出序列与目标序列之间的差距。 在PyTorch中实现Seq2Seq模型通常需要使用nn.Module类来定义模型结构,同时还需要实现自定义的数据加载和预处理函数。在编码器中,通常使用RNN或CNN等结构对输入序列进行处理,并将最终的状态向量作为解码器的输入。在解码器中,通常使用RNN或Attention等机制来生成目标序列。 以下是一个简单的PyTorch Seq2Seq代码示例: ``` import torch import torch.nn as nn class Encoder(nn.Module): def __init__(self, input_size, hidden_size): super(Encoder, self).__init__() self.hidden_size = hidden_size self.embedding = nn.Embedding(input_size, hidden_size) self.gru = nn.GRU(hidden_size, hidden_size) def forward(self, input): embedded = self.embedding(input) output, hidden = self.gru(embedded) return output, hidden class Decoder(nn.Module): def __init__(self, hidden_size, output_size): super(Decoder, self).__init__() self.hidden_size = hidden_size self.embedding = nn.Embedding(output_size, hidden_size) self.gru = nn.GRU(hidden_size, hidden_size) self.out = nn.Linear(hidden_size, output_size) self.softmax = nn.LogSoftmax(dim=1) def forward(self, input, hidden): output = self.embedding(input).view(1, 1, -1) output, hidden = self.gru(output, hidden) output = self.softmax(self.out(output)) return output, hidden input_size = 100 output_size = 100 hidden_size = 256 encoder = Encoder(input_size, hidden_size) decoder = Decoder(hidden_size, output_size) criterion = nn.NLLLoss() learning_rate = 0.01 encoder_optimizer = torch.optim.SGD(encoder.parameters(), lr=learning_rate) decoder_optimizer = torch.optim.SGD(decoder.parameters(), lr=learning_rate) for epoch in range(num_epochs): for i, (input_seq, target_seq) in enumerate(data_loader): encoder_optimizer.zero_grad() decoder_optimizer.zero_grad() input_len = input_seq.size(0) target_len = target_seq.size(0) encoder_hidden = torch.zeros(1, 1, hidden_size) loss = 0 for j in range(input_len): encoder_output, encoder_hidden = encoder(input_seq[j], encoder_hidden) decoder_input = torch.tensor([[START_TOKEN]]) decoder_hidden = encoder_hidden for j in range(target_len): decoder_output, decoder_hidden = decoder(decoder_input, decoder_hidden) loss += criterion(decoder_output, target_seq[j]) decoder_input = target_seq[j] loss.backward() encoder_optimizer.step() decoder_optimizer.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值