当我使用交叉熵损失作为损失函数时,我得到此Dimension out range错误
Traceback (most recent call last):
File "e:\testcode\cnn.py", line 122, in <module>
loss = loss_func(output, b_y) # cross entropy loss
File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\nn\modules\module.py", line 532, i
Pytorch中的许多损失函数都是在nn.modules.loss和nn.functional中实现的。
例如,下面的两行返回相同的结果。
import torch.nn as nn
import torch.functional as F
nn.L1Loss()(x,y)
F.l1_loss(x,y)
为什么有两个实现?
其他参数损失函数的相合性
损失函数的实例化带来了一些好处。
否则
使用Ubuntu20.04,Pytorch 1.10.1。
我试图解决一个具有转换器架构和多嵌入的音乐生成任务,用于处理具有多个特性的令牌。
在每次训练迭代中,我必须计算每个标记特征的损失,并将其存储在一个向量中,然后我假设我应该在检查点中存储一个包含所有这些特征(或类似的内容)的向量,而不是我现在所做的,即节省全部损失的向量。我想知道如何将所有损失存储在检查点(在加载时能够继续进行培训),或者根本不需要它。
时代循环:
for epoch in range(0, epochs):
print('Epoch: ', epoch)
loss =
我在github上读到了这些代码:
# loss1, loss2 belong to the same net
net.zero_grad()
loss1 = ...
loss2 = ...
loss1.backward()
loss2.backward()
optim.step()
这不是pytorch官方网站上提到的BP方法,官方文档中提到了tensor.backward的Computes the gradient of current tensor w.r.t. graph leaves.。
那么,其他梯度期望这两个损失张量不被计算?并且没有更新张量?
以下是我正在尝试实现的内容:
像往常一样,我们根据F(X)计算损失。但我们也定义了“对抗性损失”,它是基于F(X + e)的损失。e被定义为dF(X)/dX乘以某个常量。损失和对抗性损失都被反向传播为总损失。
在tensorflow中,这部分(获取dF(X)/dX)可以像下面这样编码:
grad, = tf.gradients( loss, X )
grad = tf.stop_gradient(grad)
e = constant * grad
下面是我的pytorch代码:
class DocReaderModel(object):
def __init__(self,
要在Pytorch中执行backward,我们可以使用一个可选参数y.backward(v)来计算乘以v的雅可比矩阵 x = torch.randn(3, requires_grad=True)
y = x * 2
v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float)
y.backward(v)
print(x.grad) 我认为计算雅可比矩阵的成本是相同的,因为计算雅可比矩阵所必需的AD图中的每个节点仍然是计算的。那么为什么Pytorch不想给我们雅可比矩阵呢?