PyTorch是否有可能在训练过程中动态改变优化器的学习率(我不想事先定义学习率计划)?
所以,假设我有一个优化器:
optim = torch.optim.SGD(model.parameters(), lr=0.01)
Run Code Online (Sandbox Code Playgroud)
现在由于我在训练期间进行的一些测试,我意识到我的学习率太高,所以我想改变它来说0.001.似乎没有一种方法optim.set_lr(0.001)但是有一些方法可以做到这一点吗?
我需要澄清一下如何使用torch.nn模块的不同组件正确准备批量培训的输入.具体来说,我正在寻找为seq2seq模型创建编码器 - 解码器网络.
假设我有一个包含这三层的模块,按顺序:
nn.Embeddingnn.LSTMnn.Linearnn.Embedding输入: batch_size * seq_length
输出: batch_size * seq_length * embedding_dimension
我在这里没有任何问题,我只想明确输入和输出的预期形状.
nn.LSTM输入: seq_length * batch_size * input_size(embedding_dimension在这种情况下)
输出: seq_length * batch_size * hidden_size
last_hidden_state: batch_size * hidden_size
last_cell_state: batch_size * hidden_size
要使用Embedding图层的输出作为图层的输入LSTM,我需要转置轴1和2.
我在网上发现的许多例子都有类似的东西x = embeds.view(len(sentence), self.batch_size , -1),但这让我很困惑.该视图如何确保同一批次的元素保留在同一批次中?当尺寸len(sentence)和self.batch尺寸相同时会发生什么?
nn.Linear输入: batch_size x input_size(在这种情况下LSTM的hidden_size或??)
输出: batch_size xoutput_size
如果我只需要last_hidden_state的LSTM话,我可以把它作为输入nn.Linear.
但是,如果我想利用输出(其中包含所有中间隐藏状态),那么我需要改变 …
我有一个火炬张量
a = torch.randn(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 numpy 中得到它?
就像是
b = a.tonumpy()
Run Code Online (Sandbox Code Playgroud)
输出应该和我一样
b = np.random.randn(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud) 在装有 NVidia GeForce 820M 的 Windows 10 PC 上,我成功安装了 CUDA 9.2 和 cudnn 7.1,然后使用 pytorch.org 上的说明安装了 PyTorch。
具体我使用了命令
pip install torch==1.4.0+cu92 torchvision==0.5.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html
Run Code Online (Sandbox Code Playgroud)
因为我使用 pip 而不是 Anaconda。
但我得到以下
>>> import torch
>>> torch.cuda.is_available()
False
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我见过多个有关以下问题的问题:
RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1614378083779/work/torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled cuda error, NCCL version 2.7.8
ncclUnhandledCudaError: Call to CUDA function failed.
Run Code Online (Sandbox Code Playgroud)
但似乎没有人能帮我解决这个问题:
我尝试torch.cuda.set_device(device)在每个脚本的开头手动执行。这似乎对我不起作用。我尝试过不同的 GPU。我尝试过降级pytorch版本和cuda版本。1.6.0、1.7.1、1.8.0 和 cuda 10.2、11.0、11.1 的不同组合。我不确定还能做什么。人们做了什么来解决这个问题?
也许非常相关?
更完整的错误消息:
('jobid', 4852)
('slurm_jobid', -1)
('slurm_array_task_id', -1)
('condor_jobid', 4852)
('current_time', 'Mar25_16-27-35')
('tb_dir', PosixPath('/home/miranda9/data/logs/logs_Mar25_16-27-35_jobid_4852/tb'))
('gpu_name', 'GeForce GTX TITAN X')
('PID', '30688')
torch.cuda.device_count()=2
opts.world_size=2
ABOUT TO SPAWN WORKERS
done setting sharing strategy...next mp.spawn
INFO:root:Added key: store_based_barrier_key:1 to store for rank: 1
INFO:root:Added key: store_based_barrier_key:1 to store …Run Code Online (Sandbox Code Playgroud) 问题就是这一切.我希望得到一个2-D torch.Tensor,其大小[a,b]填充了[r1,r2]PyTorch中均匀分布(范围内)的值.
我有一个巨大的numpy数组列表,其中每个数组代表一个图像,我想使用torch.utils.data.Dataloader对象加载它.但是torch.utils.data.Dataloader的文档提到它直接从文件夹加载数据.我如何根据自己的原因修改它?我是pytorch的新手,任何帮助都会受到极大的关注.我的单个图像的numpy数组看起来像这样.imagae是RBG图像.
`[[[ 70 82 94]
[ 67 81 93]
[ 66 82 94]
...,
[182 182 188]
[183 183 189]
[188 186 192]]
[[ 66 80 92]
[ 62 78 91]
[ 64 79 95]
...,
[176 176 182]
[178 178 184]
[180 180 186]]
[[ 62 82 93]
[ 62 81 96]
[ 65 80 99]
...,
[169 172 177]
[173 173 179]
[172 172 178]]
...,
`
Run Code Online (Sandbox Code Playgroud) 我正在研究GAN我已经完成了一门课程,它给了我一个程序的例子,该程序根据输入的例子生成图像.
这个例子可以在这里找到:
https://github.com/davidsonmizael/gan
Run Code Online (Sandbox Code Playgroud)
所以我决定使用它来生成基于面部正面照片数据集的新图像,但我没有取得任何成功.与上面的示例不同,代码仅生成噪声,而输入具有实际图像.
实际上我没有任何关于我应该改变什么以使代码指向正确方向并从图像中学习的线索.我没有更改示例中提供的代码的单个值,但它不起作用.
如果有人能帮助我理解这一点,并指出我正确的方向将是非常有帮助的.提前致谢.
我的判断者:
class D(nn.Module):
def __init__(self):
super(D, self).__init__()
self.main = nn.Sequential(
nn.Conv2d(3, 64, 4, 2, 1, bias = False),
nn.LeakyReLU(0.2, inplace = True),
nn.Conv2d(64, 128, 4, 2, 1, bias = False),
nn.BatchNorm2d(128),
nn.LeakyReLU(0.2, inplace = True),
nn.Conv2d(128, 256, 4, 2, 1, bias = False),
nn.BatchNorm2d(256),
nn.LeakyReLU(0.2, inplace = True),
nn.Conv2d(256, 512, 4, 2, 1, bias = False),
nn.BatchNorm2d(512),
nn.LeakyReLU(0.2, inplace = True),
nn.Conv2d(512, 1, 4, 1, 0, bias = False),
nn.Sigmoid()
)
def forward(self, input): …Run Code Online (Sandbox Code Playgroud) 我想使用个人数据库在PyTorch上训练一个简单的神经网络.此数据库从Excel文件导入并存储在df.
其中一列被命名"Target",它是网络的目标变量.如何使用此数据框作为PyTorch神经网络的输入?
我试过这个,但它不起作用:
target = pd.DataFrame(data = df['Target'])
train = data_utils.TensorDataset(df, target)
train_loader = data_utils.DataLoader(train, batch_size = 10, shuffle = True)
Run Code Online (Sandbox Code Playgroud) 我在对pytorch 中的 MNIST 数据集的2 个隐藏层的全连接深度神经网络进行分类时遇到问题。
我想在两个隐藏层中都使用tanh作为激活,但最后,我应该使用softmax。
对于损失,我选择nn.CrossEntropyLoss()了 PyTORch,它(正如我发现的那样)不想将单热编码标签作为真正的标签,而是采用 LongTensor 类。
我的模型是nn.Sequential(),当我最终使用 softmax 时,它在测试数据的准确性方面给了我更糟糕的结果。为什么?
import torch
from torch import nn
inputs, n_hidden0, n_hidden1, out = 784, 128, 64, 10
n_epochs = 500
model = nn.Sequential(
nn.Linear(inputs, n_hidden0, bias=True),
nn.Tanh(),
nn.Linear(n_hidden0, n_hidden1, bias=True),
nn.Tanh(),
nn.Linear(n_hidden1, out, bias=True),
nn.Softmax() # SHOULD THIS BE THERE?
)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.5)
for epoch in range(n_epochs):
y_pred = model(X_train)
loss = criterion(y_pred, …Run Code Online (Sandbox Code Playgroud)