- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Unet 模型进行语义分割 - 我有一个自定义的图像数据集及其掩码,均为 .png 格式。我查看了在线论坛并尝试了一些东西,但效果不佳?有关如何解决错误或改进代码的任何建议都会有所帮助。
model.eval()
with torch.no_grad():
for xb, yb in val_dl:
yb_pred = model(xb.to(device))
# yb_pred = yb_pred["out"].cpu()
print(yb_pred.shape)
yb_pred = torch.argmax(yb_pred,axis = 1)
break
print(yb_pred.shape)
criteron = nn.CrossEntropyLoss(reduction = 'sum')
opt = optim.Adam(model.parameters(), lr = 3e-4)
def loss_batch(loss_func, output, target, opt = None):
loss = loss_func(output, target)
if opt is not None:
opt.zero_grad()
loss.backward()
opt.step()
return loss.item(), None
lr_scheduler = ReduceLROnPlateau(opt, mode = 'min', factor = 0.5, patience= 20, verbose = 1)
def get_lr(opt):
for param_group in opt.param_groups:
return param_group['lr']
current_lr = get_lr(opt)
print('current_lr = {}'.format(current_lr))
def loss_epoch(model, loss_func, dataset_dl, sanity_check = False, opt = None):
running_loss = 0.0
len_data = len(dataset_dl.dataset)
for xb, yb in dataset_dl:
xb = xb.to(device)
yb = yb.to(device)
# xb = torch.tensor(xbh, requires_grad=True)
output = model(xb)
loss_b, metric_b = loss_batch(loss_func, output, yb, opt)
running_loss += loss_b
if sanity_check is True:
break
loss = running_loss/float(len_data)
return loss, None
def train_val(model, params):
num_epochs = params["num_epochs"]
loss_func = params["loss_func"]
opt = params["optimizer"]
train_dl = params["train_dl"]
val_dl = params["val_dl"]
sanity_check = params["sanity_check"]
lr_scheduler = params["lr_scheduler"]
path2weights = params["path2weights"]
loss_history = {"train": [],
"val": []}
best_model_wts = copy.deepcopy(model.state_dict())
best_loss = float('inf')
for epoch in range(num_epochs):
current_lr = get_lr(opt)
print('Epoch {}/{}, current_lr = {}'.format(epoch, num_epochs - 1, current_lr))
with torch.enable_grad():
model.train()
train_loss, _ = loss_epoch(model, loss_func, train_dl, sanity_check, opt)
loss_history["train"].append(train_loss)
model.eval()
with torch.no_grad():
val_loss, _ = loss_epoch(model, loss_func, val_dl, sanity_check, opt)
loss_history["val"].append(val_loss)
if val_loss < best_loss:
best_loss = val_loss
best_model_wts = copy.deepcopy(model.state_dict())
torch.save(model.state_dict(), path2weights)
print("copied best model weights!!")
lr_scheduler.step(val_loss)
if current_lr != get_lr(opt):
print("Loading best model weights!!")
model.load_state_dict(best_model_wts)
print("train Loss: %.6f" %(train_loss))
print("val_loss: %.6f" %(val_loss))
print("-"*20)
model.load_state_dict(best_model_wts)
return model, loss_history, metric_history
path2models = "./models/"
if not os.path.exists(path2models):
os.mkdir(path2models)
param_train = {
"num_epochs": 10,
"loss_func": criteron,
"optimizer": opt,
"train_dl": train_dl,
"val_dl": val_dl,
"sanity_check": False,
"lr_scheduler": lr_scheduler,
"path2weights": path2models + "weights.pt"
model, loss_hist, _ = train_val(model, param_train)
错误消息看起来像 -文件“”,第 10 行,位于模型, loss_hist, _ = train_val(model, param_train)
文件“”,第 27 行,在 train_val 中val_loss, _ = loss_epoch(model, loss_func, val_dl, sanity_check, opt)
文件“”,第13行,在loss_epochloss_b, metric_b = loss_batch(loss_func, output, yb, opt)
文件“”,第6行,在loss_batch损失.向后()
文件“C:\Users\W540\anaconda3\lib\site-packages\torch\tensor.py”,第 198 行,向后torch.autograd.backward(self, gradient, retain_graph, create_graph)
文件“C:\Users\W540\anaconda3\lib\site-packages\torch\autograd_init_.py”,第 100 行,向后allow_unreachable=True) # allow_unreachable 标志
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
我不确定将哪个变量设置为 require_grad = True 或者我应该在哪里启用 grad...
最佳答案
你可以在 loss.backward()
之前尝试这个:
loss = Variable(loss, requires_grad = True)
或者,因为变量已从 PyTorch 中删除(仍然存在但已弃用),您可以使用以下代码简单地做同样的事情:
loss.requires_grad = True
关于python - 运行时错误 - 张量的元素 0 不需要 grad 并且没有 grad_fn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62699306/
我目前正在了解改进的 Perlin 噪声。 我完全理解这个理论,但是我对其常见实现的一个方面感到困惑,例如 this . 我的问题是,grad() 函数如何返回归一化向量(梯度和方向)的点积?我的意思
我已经训练了一个网络,并以 mynetwork.model 的形式保存了它。我想使用我自己的模型而不是 VGG16 或 ResNet 等应用 gradcam。 apply_gradcam.py # i
我正在尝试理解 python 中的 grad() 函数,我了解反向传播,但对 .grad() 函数结果有一些疑问。 因此,如果我有一个非常简单的网络,比如只有一个输入和一个权重: import tor
我们在用神经网络求解PDE时, 经常要用到输出值对输入变量(不是Weights和Biases)求导; 在训练WGAN-GP 时, 也会用到网络对输入变量的求导。 以上两种需求, 均可以用pytor
我在做fast-ai的类(class),SGD看不懂..... 这会减去系数(学习率 * 梯度)... 但是为什么要减去呢? 代码如下: def update(): y_hat = x@a
我正在处理不同长度的序列。但我只想根据序列末尾计算的输出对它们进行评分。 样本经过排序,长度逐渐减小,并且用零填充。对于 5 个 1D 样本,它看起来像这样(为了可见性省略了宽度尺寸): array(
我正在使用 autograd工具 PyTorch ,并发现自己处于需要通过整数索引访问一维张量中的值的情况。像这样: def basic_fun(x_cloned): res = []
我有以下功能 def msfe(ys, ts): ys=ys.detach().numpy() #output from the network ts=ts.detach().nump
我正在使用 Matlab 打印一个小文本文件 (temp_script.exec),该文件将用于运行 GrADS 命令。该脚本如下所示: 'reinit' 'open temp_ctl.ctl' 's
我正在尝试定义一个带有渐变的自定义 theano Op 以便将其与 pymc3 一起使用,但我不明白如何定义 grad 方法。 下面的代码是我陷入困境的地方。函数 phi() 是一个模拟函数(实际上,
我想计算网络中两个张量之间的梯度。输入 X 张量通过一组卷积层发送,返回并输出 Y 张量。 我正在创建一个新的损失,我想知道 norm(Y) w.r.t. 梯度之间的 MSE。 X 的每个元素。这里是
我刚刚在 Python 3.7.2 (macOS) 上安装了 torch-1.0.0,并尝试了 tutorial ,但是以下代码: import torch x = torch.ones(2, 2,
我正在尝试使用 torch.autograd.grad 在 PyTorch 中计算矩阵导数,但是我遇到了一些问题。这是重现错误的最小工作示例。 theta = torch.tensor(np.rand
我正在尝试获取 d(loss)/d(input) .我知道我有 2 个选择。 第一个选项: loss.backward() dlossdx = x.grad.data 第二种选择:
在 documentation的 torch.autograd.grad ,据说,对于参数, parameters: outputs (sequence of Tensor) – outputs of
我想计算网络中两个张量之间的梯度。输入 X 张量(批量大小 x m)通过一组卷积层发送,这些卷积层返回并输出 Y 张量(批量大小 x n)。 我正在创建一个新的损失,我想知道 Y w.r.t. 的梯度
我有包含 6 小时间隔(每天 4 个文件)的 .grd 格式的大气数据的文件。我也有相关的描述 rune 件 (yyyymmddhh.ctl)。我可以使用 GrADS 绘制数据。但我需要将这些文件转换
当我阅读有关创建新操作的文档时,我无法理解示例中的 grad() http://deeplearning.net/software/theano/extending/extending_theano.
我创建了一个theano.Op,它返回两个输入集合中每对之间的距离,转换scipy cdist: class Cdist(theano.Op): __props__ = () def
我有以下用于训练 A3C 的训练函数代码。我遇到了以下错误。 RuntimeError("grad can be implicitly created only for scalar outputs"
我是一名优秀的程序员,十分优秀!