Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyTorch:';“无交叉熵”;对象没有属性';项目';_Python_Python 3.x_Neural Network_Pytorch_Cnn - Fatal编程技术网

Python PyTorch:';“无交叉熵”;对象没有属性';项目';

Python PyTorch:';“无交叉熵”;对象没有属性';项目';,python,python-3.x,neural-network,pytorch,cnn,Python,Python 3.x,Neural Network,Pytorch,Cnn,目前正在部署CNN模型 model = CNN(height=96, width=96, channels=3) 并观察其交叉熵损失 criterion = nn.CrossEntropyLoss() 培训师课程如下: class Trainer: def __init__( self, model: nn.Module, train_loader: DataLoader, val_loader: DataLoader, criterion: nn.M

目前正在部署CNN模型

model = CNN(height=96, width=96, channels=3)
并观察其交叉熵损失

criterion = nn.CrossEntropyLoss()
培训师课程如下:

class Trainer:
def __init__(
    self,
    model: nn.Module,
    train_loader: DataLoader,
    val_loader: DataLoader,
    criterion: nn.Module,
    optimizer: Optimizer,
    summary_writer: SummaryWriter,
    device: torch.device,
):
    self.model = model.to(device)
    self.device = device
    self.train_loader = train_loader
    self.val_loader = val_loader
    self.criterion = criterion
    self.optimizer = optimizer
    self.summary_writer = summary_writer
    self.step = 0

def train(
        self,
        epochs: int,
        val_frequency: int,
        print_frequency: int = 20,
        log_frequency: int = 5,
        start_epoch: int = 0
):
    self.model.train()
    for epoch in range(start_epoch, epochs):
        self.model.train()
        data_load_start_time = time.time()
        for batch, labels in self.train_loader:
            batch = batch.to(self.device)
            labels = labels.to(self.device)
            data_load_end_time = time.time()
            loss=self.criterion
            logits=self.model.forward(batch)

            with torch.no_grad():
                preds = logits
                accuracy = compute_accuracy(labels, preds)

            data_load_time = data_load_end_time - data_load_start_time
            step_time = time.time() - data_load_end_time
            if ((self.step + 1) % log_frequency) == 0:
                self.log_metrics(epoch, accuracy, loss, data_load_time, step_time)
            if ((self.step + 1) % print_frequency) == 0:
                self.print_metrics(epoch, accuracy, loss, data_load_time, step_time)

            self.step += 1
            data_load_start_time = time.time()

        self.summary_writer.add_scalar("epoch", epoch, self.step)
        if ((epoch + 1) % val_frequency) == 0:
            self.validate()
            self.model.train()
记录损失的功能是

    def log_metrics(self, epoch, accuracy, loss, data_load_time, step_time):
    self.summary_writer.add_scalar("epoch", epoch, self.step)
    self.summary_writer.add_scalars(
            "accuracy",
            {"train": accuracy},
            self.step
    )
    self.summary_writer.add_scalars(
            "loss",
            {"train": float(loss.item())},
            self.step
    )
    self.summary_writer.add_scalar(
            "time/data", data_load_time, self.step
    )
    self.summary_writer.add_scalar(
            "time/data", step_time, self.step
    )
我收到一个属性错误““CrossEntropyLoss”对象没有属性“item””。我尝试过几种删除方法,例如从代码的不同部分删除“item()”,以及尝试不同类型的丢失函数,如MSELoss等。 任何解决方案或方向都将受到高度赞赏。多谢各位

编辑-1:

这是错误回溯

Traceback (most recent call last):


 File "/Users/xyz/main.py", line 316, in <module>
main(parser.parse_args())
 File "/Users/xyz/main.py", line 128, in main
    log_frequency=args.log_frequency,
  File "/Users/xyz/main.py", line 198, in train
    self.log_metrics(epoch, accuracy, loss, data_load_time, step_time)
  File "/Users/xyz/main.py", line 232, in log_metrics
    {"train": float(loss.item)},
  File "/Users/xyz/main.py", line 585, in __getattr__
    type(self).__name__, name))
AttributeError: 'CrossEntropyLoss' object has no attribute 'item'
回溯(最近一次呼叫最后一次):
文件“/Users/xyz/main.py”,第316行,在
main(parser.parse_args())
文件“/Users/xyz/main.py”,第128行,在main中
log\u frequency=args.log\u frequency,
文件“/Users/xyz/main.py”,第198行,列车中
self.log\u度量(历元、精度、损耗、数据加载时间、步长时间)
日志度量中的文件“/Users/xyz/main.py”,第232行
{“火车”:浮动(损失项目)},
文件“/Users/xyz/main.py”,第585行,在__
类型(自我)。\uuuuu名称(自我,名称))
AttributeError:“CrossEntropyLoss”对象没有属性“item”

它看起来像调用
self中的
损失。日志度量(历元、精度、损失、数据加载时间、步长时间)
是标准本身(CrossEntropyLoss对象),而不是调用它的结果


您的训练循环需要调用标准来计算损失,我在您提供的代码中没有看到它。

您的代码甚至从未计算过
损失
,因此不清楚这里发生了什么。您需要提供一个完整的可复制示例。另外,你应该提供完整的错误回溯。你能告诉我你所说的“可复制的例子”是什么意思吗?谢谢你的指导。我在复制堆栈上的代码时忽略了这一点。谢谢你让我知道。损失=自我标准在列车功能中。但是错误仍然存在,应该类似于
loss=self.criteria(预测标签,预期标签)
。正如我所说,
loss
必须是调用Criteria函数的结果,而不是函数本身。