Pytorch view()、squeeze()、unsqueeze()、torch.max()

本文介绍了PyTorch中的view()、squeeze()、unsqueeze()函数及其用法,详细解释了它们如何改变张量的形状。同时,探讨了torch.max()函数,说明其返回最大值及对应索引的功能,并展示了如何根据轴选择最大值的索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇博客主要向大家介绍Pytorch中view()、squeeze()、unsqueeze()、torch.max()函数,这些函数虽然简单,但是在 神经网络编程总却经常用到,希望大家看了这篇博文能够把这些函数的作用弄清楚。
import torch
a=torch.Tensor(2,3)
a

 

 3.8686e+25  9.1836e-39  1.2771e-40
 9.0079e+15  1.6751e-37  2.9775e-41
 [torch.FloatTensor of size 2x3]

view()函数作用是将一个多行的Tensor,拼接成一行。


 
import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt import numpy as np # 数据集:字符序列预测(Hello -> Elloh) char_set = list("hello") char_to_idx = {c: i for i, c in enumerate(char_set)} idx_to_char = {i: c for i, c in enumerate(char_set)} # 数据准备 input_str = "hello" target_str = "elloh" input_data = [char_to_idx[c] for c in input_str] target_data = [char_to_idx[c] for c in target_str] # 转换为独热编码 input_one_hot = np.eye(len(char_set))[input_data] # 转换为 PyTorch Tensor inputs = torch.tensor(input_one_hot, dtype=torch.float32) targets = torch.tensor(target_data, dtype=torch.long) # 模型超参数 input_size = len(char_set) hidden_size = 8 output_size = len(char_set) num_epochs = 200 learning_rate = 0.1 # 定义 RNN 模型 class RNNModel(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RNNModel, self).__init__() self.rnn = nn.RNN(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x, hidden): out, hidden = self.rnn(x, hidden) out = self.fc(out) # 应用全连接层 return out, hidden model = RNNModel(input_size, hidden_size, output_size) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) # 训练 RNN losses = [] hidden = None # 初始隐藏状态为 None for epoch in range(num_epochs): optimizer.zero_grad() # 前向传播 outputs, hidden = model(inputs.unsqueeze(0), hidden) hidden = hidden.detach() # 防止梯度爆炸 # 计算损失 loss = criterion(outputs.view(-1, output_size), targets) loss.backward() optimizer.step() losses.append(loss.item()) if (epoch + 1) % 20 == 0: print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}") # 测试 RNN with torch.no_grad(): test_hidden = None test_output, _ = model(inputs.unsqueeze(0), test_hidden) predicted = torch.argmax(test_output, dim=2).squeeze().numpy() print("Input sequence: ", ''.join([idx_to_char[i] for i in input_data])) print("Predicted sequence: ", ''.join([idx_to_char[i] for i in predicted])) # 可视化损失 plt.plot(losses, label="Training Loss") plt.xlabel("Epoch") plt.ylabel("Loss") plt.title("RNN Training Loss Over Epochs") plt.legend() plt.show(),在这个代码里加入gpu加速
03-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI算法网奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值