pytorch模型的保存失敗しましたが、

目录

简洁:

 评估模式

后缀

区别

保存模型(整个模型)

加载过程:

保存状态字典

加载过程:

总结

把模型训练到一半保存,想下次接着训练,用那种保存方式

保存模型和优化器状态字典

加载模型和优化器状态字典

如果保存整个模型,就不能继续训练吗、

保存整个模型

加载整个模型并继续训练

实例:

保存失败

大変 、

如果你重构了模型,训练好的模型是否还有用取决于重构的程度和方式。:

深度学习解pde损失达到多少可以罢休

当你遇到保存模型时出现的错误时,首先需要查看错误信息以确定问题的具体原因。以下是一些可能的解决方案:

查看错误信息

解决方案

如果更改了模型定义

1. 查看错误信息

2. 确认保存的是状态字典

3. 检查模型中的自定义层或函数

4. 分步骤排查

a. 保存一个简单的模型

b. 逐步添加复杂性

c. 检查不可序列化的元素

5. 临时解决方案

a. 保存参数

b. 重写模型定义

6. 求助社区

【Python】dill:解决python的“AttributeError: Can‘t pickle local object”及无法pickle lambda函数的问题_attributeerror: can't pickle local object-CSDN博客


简洁:

分为:保存整个模型,和保存模型的字典。

保存整个模型,占用空间大,

torch.save(model, 'model_whole.pth')

保存整个字典,灵活性高,但要事先构建模型框架(定义模型)

import torch# 假设你已经有了模型实例 model
model = ...  # 你的模型定义# 确保模型是在评估模式下,如果模型中有例如Dropout或BatchNorm层的话
model.eval()# 保存模型的状态字典
torch.save(model.state_dict(), 'model.pth')

如果是想 保存完模型之后继续训练,最好使用第二种,保存模型的字典。

在PyTorch中,保存模型的常见方法是使用torch.save函数。以下是如何保存模型的状态字典(state dictionary)的一个例子:

 评估模式

不一定非要在评估模式下保存模型,但是通常推荐这样做,特别是当模型包含像Dropout或Batch Normalization这样的层时。以下是为什么通常推荐在评估模式下保存模型的原因:

  1. Dropout: 在训练期间,Dropout层会随机地将输入单元的一部分设置为0,以防止模型过拟合。在评估或测试时,我们希望使用整个网络的容量来预测结果,因此Dropout层应该被“关闭”。如果在训练模式下保存模型,Dropout层仍然处于激活状态,当你加载模型进行预测时,可能会得到不一致的结果。【训练时dropout一些为零,但评估的时候应该都为激活状态】

  2. Batch Normalization: Batch Normalization层在训练时会计算每个小批量数据的均值和方差,并在测试时使用这些统计数据进行标准化。如果在训练模式下保存模型,Batch Normalization层可能会包含特定于最后一个小批量的统计信息,这可能会导致在加载模型进行预测时得到不一致的结果。

如果你不打算在保存模型后立即进行预测,而是计划继续训练,那么在训练模式下保存模型也是可以的。在这种情况下,模型将在加载后继续以相同的模式(训练模式)进行操作。

以下是保存模型时的代码示例,不指定模式:

import torch# 假设 model 是你的模型实例
model ...  # 你的模型定义# 保存模型的状态字典
torch.save(model.state_dict(), 'model.pth')

在上面的代码中,没有显式地将模型设置为评估模式。如果你在保存模型后立即进行预测,你应该确保在加载模型后将其设置为评估模式:也可以

model = ...  # 初始化模型
model.load_state_dict(torch.load('model.pth'))
model.eval()  # 设置为评估模式

总之,是否在评估模式下保存模型取决于你后续的使用场景。如果你打算立即进行预测,建议在评估模式下保存模型。如果你打算继续训练,则可以按照当前模式保存模型。

import torch# 假设你已经有了模型实例 model
model = ...  # 你的模型定义# 确保模型是在评估模式下,如果模型中有例如Dropout或BatchNorm层的话
model.eval()# 保存模型的状态字典
torch.save(model.state_dict(), 'model.pth')

这里,model.pth是保存的文件名,你可以根据需要更改它。保存状态字典而不是整个模型的好处是,这种方法更加灵活,允许你在以后加载模型时使用不同的架构(只要它们兼容状态字典的结构)。

如果你想保存整个模型而不是状态字典,你可以这样做:

torch.save(model, 'model_whole.pth')

但是,这种方法可能会在模型定义发生变化时导致问题,因此通常推荐保存和加载状态字典。当需要加载模型时,你需要先创建模型实例,然后加载状态字典:

 

创建model(),加载load_state_dict

# 假设你的模型类是MyModel
model = MyModel()
model.load_state_dict(torch.load('model.pth'))
model.eval()  # 确保模型处于评估模式

请确保在加载模型之前,你的代码环境中已经有了模型的定义。

后缀

.pth 是一种常用的文件扩展名,用于保存PyTorch模型的状态字典(state dictionary)。这个扩展名并不是强制性的,它只是一个约定俗成的命名习惯,用来表明文件包含的是PyTorch模型参数。

实际上,你可以使用任何你喜欢的文件扩展名来保存模型,比如 .pt.model 或其他任何扩展名。重要的是文件的格式和内容,而不是文件扩展名。只要你在加载模型时使用正确的函数(torch.load)来读取文件,文件扩展名不会影响模型的使用。

以下是一些使用不同扩展名的例子:

# 保存模型,使用 .pt 扩展名
torch.save(model.state_dict(), 'model.pt')# 保存模型,使用 .model 扩展名
torch.save(model.state_dict(), 'model.model')# 加载模型,不管使用什么扩展名
model.load_state_dict(torch.load('model.pt'))   # 如果保存为 .pt
model.load_state_dict(torch.load('model.model')) # 如果保存为 .model

只要确保在加载模型时使用相同的文件名,PyTorch就能够正确地读取和恢复模型的状态字典

区别

保存模型和保存状态字典在PyTorch中是两种不同的方法,它们在保存的内容、文件大小、灵活性以及加载时的步骤上有所不同。

保存模型(整个模型)

当使用torch.save保存整个模型时,以下内容会被保存:

  • 模型的结构(即类的定义)
  • 模型的状态字典(即模型参数)
  • 模型的属性(例如,如果模型有一些非参数属性,它们也会被保存)

优点:

  • 简单:保存和加载都比较直接,不需要单独处理模型结构。

缺点:

  • 不灵活:如果模型定义在未来发生了变化,加载保存的模型可能会遇到问题。
  • 文件大:因为保存了整个模型的结构,所以文件通常比只保存状态字典要大。
加载过程:

# 加载整个模型
loaded_model = torch.load('model_whole.pth')
loaded_model.eval()  # 确保模型处于评估模式

保存状态字典

保存状态字典只保存了模型中的参数(weights和biases)。

优点:

  • 灵活:可以在不同的模型结构中重用参数,只要新模型的结构与保存状态字典的模型兼容。
  • 文件小:因为只保存了参数,所以文件通常比保存整个模型要小。

缺点:

  • 稍微复杂:需要先定义模型结构,然后加载状态字典。
加载过程:

# 假设你的模型类是MyModel
model = MyModel()  # 需要先定义模型结构
model.load_state_dict(torch.load('model.pth'))  # 加载状态字典
model.eval()  # 确保模型处于评估模式

总结

  • 保存整个模型适用于模型结构不经常改变的情况,或者当你想要确保模型和参数一起迁移时。
  • 保存状态字典适用于模型结构可能会改变的情况,或者当你想要节省空间并且可以接受稍复杂的加载过程时。

加载时,两者确实有所不同。保存整个模型时,可以直接加载模型实例。而保存状态字典时,需要先创建一个模型实例,然后加载状态字典到这个实例中。

把模型训练到一半保存,想下次接着训练,用那种保存方式

如果你想在中途保存模型,以便下次可以继续训练,你应该保存模型的状态字典以及优化器的状态字典。这样做的原因是:

  • 模型的状态字典包含了模型参数,这些是你训练得到的。
  • 优化器的状态字典包含了优化器的状态,比如动量、梯度等,这对于确保训练的连续性是必要的。

以下是如何保存和加载模型及优化器状态字典的步骤:

保存模型和优化器状态字典

 模型和优化器都要保存

import torch# 假设 model 是你的模型实例,optimizer 是你的优化器实例
model ...  # 你的模型定义
optimizer ...  # 你的优化器定义# 保存模型的状态字典
torch.save(model.state_dict(), 'model.pth')# 保存优化器的状态字典
torch.save(optimizer.state_dict(), 'optimizer.pth')

加载模型和优化器状态字典

下次训练时,你需要先重新初始化模型和优化器,然后加载之前保存的状态字典:

 模型和优化器都要加载

# 重新初始化模型和优化器
model = ...  # 重新定义你的模型
optimizer = ...  # 重新定义你的优化器# 加载模型的状态字典
model.load_state_dict(torch.load('model.pth'))# 加载优化器的状态字典
optimizer.load_state_dict(torch.load('optimizer.pth'))# 确保在继续训练之前模型是训练模式
model.train()

确保在加载状态字典后,你的模型和优化器配置与保存时相同,例如学习率、优化器的动量等。如果你改变了这些配置,加载状态字典后可能需要手动调整。

通过这种方式,你可以确保训练过程从上次停止的地方继续,而不会丢失任何进度。

如果保存整个模型,就不能继续训练吗、

保存整个模型也是可以继续训练的,但是这种方法不如只保存状态字典那样灵活。当你保存整个模型时,包括模型的结构和参数都会被保存。如果你在后续训练中需要修改模型结构,那么加载整个模型可能会遇到问题。不过,如果你不打算修改模型结构,保存整个模型是可以继续训练的。

以下是如何保存整个模型以及如何继续训练的步骤:

保存整个模型

import torch# 假设 model 是你的模型实例
model ...  # 你的模型定义# 保存整个模型
torch.save(model, 'model.pth')

加载整个模型并继续训练

# 加载整个模型
model = torch.load('model.pth')# 确保模型是训练模式
model.train()# 假设你已经有了一个优化器实例 optimizer
optimizer ...  # 优化器定义# 继续训练模型
for epoch in range(start_epoch, num_epochs):# 训练代码...optimizer.step()

当你加载整个模型时,你需要确保优化器被正确地重新初始化,并且其参数与之前保存时的状态匹配。如果优化器状态没有被保存,你将无法从上次停止的地方继续训练,因为优化器的内部状态(如动量、权重衰减等)将会丢失。

总的来说,保存整个模型是可行的,但是通常推荐保存和加载状态字典,因为这样做更加灵活,尤其是在模型结构可能会发生变化的情况下。保存状态字典也使得代码更加模块化,因为你不需要担心模型定义的变化,只需要关注如何加载和保存参数。

 ----------------------------------------------------------------------

实例:

保存失败

AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_14948/2489849358.py in <module>1 model.eval()#评估模式以保存模型
----> 2 torch.save(model,'qwer.ptl')~\anaconda3\lib\site-packages\torch\serialization.py in save(obj, f, pickle_module, pickle_protocol, _use_new_zipfile_serialization)377         if _use_new_zipfile_serialization:378             with _open_zipfile_writer(opened_file) as opened_zipfile:
--> 379                 _save(obj, opened_zipfile, pickle_module, pickle_protocol)380                 return381         _legacy_save(obj, opened_file, pickle_module, pickle_protocol)~\anaconda3\lib\site-packages\torch\serialization.py in _save(obj, zip_file, pickle_module, pickle_protocol)587     pickler = pickle_module.Pickler(data_buf, protocol=pickle_protocol)588     pickler.persistent_id = persistent_id
--> 589     pickler.dump(obj)590     data_value = data_buf.getvalue()591     zip_file.write_record('data.pkl', data_value, len(data_value))AttributeError: Can't pickle local object 'Symbolic_KANLayer.__init__.<locals>.<listcomp>.<listcomp>.<lambda>'
AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_14948/3292979839.py in <module>1 model.eval()#评估模式以保存模型
----> 2 torch.save(model.state_dict,'qwer.ptl')~\anaconda3\lib\site-packages\torch\serialization.py in save(obj, f, pickle_module, pickle_protocol, _use_new_zipfile_serialization)377         if _use_new_zipfile_serialization:378             with _open_zipfile_writer(opened_file) as opened_zipfile:
--> 379                 _save(obj, opened_zipfile, pickle_module, pickle_protocol)380                 return381         _legacy_save(obj, opened_file, pickle_module, pickle_protocol)~\anaconda3\lib\site-packages\torch\serialization.py in _save(obj, zip_file, pickle_module, pickle_protocol)587     pickler = pickle_module.Pickler(data_buf, protocol=pickle_protocol)588     pickler.persistent_id = persistent_id
--> 589     pickler.dump(obj)590     data_value = data_buf.getvalue()591     zip_file.write_record('data.pkl', data_value, len(data_value))AttributeError: Can't pickle local object 'Symbolic_KANLayer.__init__.<locals>.<listcomp>.<listcomp>.<lambda>'

这个错误是由于在尝试序列化模型的状态字典时遇到了一个无法被pickle模块序列化的对象。pickle是Python的一个标准模块,用于序列化和反序列化Python对象结构,也即保存和加载对象。

错误信息 AttributeError: Can't pickle local object 'Symbolic_KANLayer.__init__.<locals>.<listcomp>.<listcomp>.<lambda>' 提示我们问题出现在尝试序列化一个局部定义的lambda函数时。在PyTorch中,模型的状态字典通常只包含参数和缓冲区,不包含代码或函数定义。然而,如果你的模型定义中包含了一些无法序列化的局部函数或对象,那么在尝试保存状态字典时就会遇到这个问题。

以下是一些可能的解决方案:

  1. 移除或重构模型中的lambda函数:如果可能,尽量避免在模型定义中使用lambda函数,或者将它们重构为常规的函数定义。

  2. 使用register_buffer:如果lambda函数是用来创建模型中的缓冲区(buffers),确保使用register_buffer方法将这些缓冲区注册到模型中,这样它们就可以被序列化了。

  3. 自定义序列化:如果你无法避免使用lambda函数或其他无法序列化的对象,你可以自定义序列化和反序列化过程,只保存和加载可以序列化的部分。

以下是一个示例,说明如何重构模型以避免使用lambda函数:

# 假设原来的模型定义中使用了lambda函数
class Symbolic_KANLayer(nn.Module):def __init__(self):super(Symbolic_KANLayer, self).__init__()# 假设这里有lambda函数self.weights = [lambda x: x * i for i in range(10)]# 重构模型定义,避免使用lambda
class Symbolic_KANLayer(nn.Module):def __init__(self):super(Symbolic_KANLayer, self).__init__()self.weights = [self.weight_function(i) for i in range(10)]def weight_function(self, factor):return lambda x: x * factordef forward(self, x):# 使用self.weights中的函数for weight in self.weights:x = weight(x)return x

在重构模型后,尝试再次保存模型的状态字典。如果问题仍然存在,你可能需要进一步检查模型定义,以确保没有其他无法序列化的对象。

实际上,使用lambda函数通常不会阻止你保存PyTorch模型的状态字典。状态字典主要包含模型的参数(比如权重和偏置)以及一些缓冲区(buffers),而不包含模型定义中的代码或函数。

如果你的模型使用了lambda函数,但它们没有被用作模型参数或缓冲区的一部分,那么在保存状态字典时通常不会遇到问题。状态字典不会尝试序列化lambda函数或其他Python代码,因此这些函数的存在通常不会影响模型保存。

错误信息 AttributeError: Can't pickle local object 'Symbolic_KANLayer.__init__.<locals>.<listcomp>.<listcomp>.<lambda>' 提示你的模型可能有一些特定的结构或属性,它们无法被pickle模块序列化。这可能是由于以下原因之一:

  1. 你的模型或某个模块包含了一个无法序列化的属性,比如一个在__init__方法中定义的lambda函数,并且这个lambda函数被用作模型属性的一部分。
  2. 你的模型包含了一些自定义的类或函数,它们没有被正确地定义为可以在pickle过程中处理的类型。

为了解决这个问题,你可以尝试以下步骤:

  • 确认模型的状态字典中不包含任何无法序列化的对象。你可以通过打印状态字典的键来检查它包含的内容:

print(model.state_dict().keys())
  • 如果你的模型确实包含了一些无法序列化的属性,尝试将这些属性移出模型的状态字典,或者重新设计模型以避免使用这些属性。

  • 如果你确实需要在模型中保存一些无法序列化的状态,可以考虑将它们作为单独的文件保存,并在加载模型时手动恢复这些状态。

记住,当使用torch.save保存模型时,你通常只需要保存模型的状态字典:

torch.save(model.state_dict(), 'model.pth')

如果你的模型没有包含无法序列化的属性,上述代码应该能够正常工作。如果问题仍然存在,那么需要具体检查模型定义中可能导致序列化失败的部分。

下次记得把拉面不大改了再train 

训完了再改,やっぱり、だめだの、

大変 、

如果你重构了模型,训练好的模型是否还有用取决于重构的程度和方式。:

  1. 微小的改变:如果你只是做了微小的改变,比如调整了某些层的超参数或者添加/移除了不影响模型大部分结构的层,那么你可能可以通过以下方式继续使用训练好的模型:

    • 确保新的模型结构能够匹配旧模型的状态字典中的键。
    • 只加载与新模型结构相匹配的参数。
  2. 结构性的改变:如果你做了结构性的改变,比如改变了层的类型或层的连接方式,那么原来的模型参数可能不再适用于新的模型结构。在这种情况下,你可能需要重新训练模型。

以下是一些建议,以帮助你决定如何处理重构后的模型:

  • 检查模型结构:比较新旧模型的层和参数键,看看它们是否兼容。
  • 部分加载参数:如果新模型只是比旧模型多了几层或者有一些小的改动,你可以尝试只加载旧模型的部分参数,并初始化新添加的层。
  • 迁移学习:如果新旧模型有相似之处,你可以考虑使用旧模型的参数来初始化新模型的一部分,然后继续训练。
  • 重新训练:如果模型结构变化太大,最安全的方法是重新训练模型。

以下是一个示例,展示如何在部分兼容的情况下加载模型参数:

python

复制

# 假设你有一个新的模型实例 new_model
new_model = NewModelStructure()# 加载旧模型的状态字典
old_state_dict = torch.load('old_model.pth')# 创建新模型的状态字典,只包含旧模型中存在的键
new_state_dict = {k: v for k, v in old_state_dict.items() if k in new_model.state_dict()}# 加载匹配的参数
new_model.load_state_dict(new_state_dict, strict=False)# 现在你可以继续训练 new_model 或者进行其他操作

在上述代码中,strict=False 参数允许加载部分状态字典,忽略不匹配的键。

总之,重构模型后,训练好的模型是否有用取决于重构的具体情况。在某些情况下,可以部分重用训练好的参数,而在其他情况下,可能需要从头开始重新训练。

深度学习解pde损失达到多少可以罢休

在深度学习用于求解偏微分方程(PDEs)时,决定何时停止训练并没有一个固定的标准,因为这取决于多个因素,包括:

  1. 问题的复杂性:不同的PDE问题可能有不同的难度,这会影响达到可接受解所需的训练程度。
  2. 数据集的质量和大小:数据的质量和数量也会影响模型性能。更高质量和更大规模的数据集通常能提供更好的训练效果。
  3. 模型架构:不同的神经网络架构可能对同一个问题有不同的表现。
  4. 损失函数的选择:不同的损失函数可能导致不同的收敛行为。
  5. 应用要求:对于某些应用,可能需要非常精确的解,而对于其他应用,近似解可能就足够了。

以下是一些指导原则,可以帮助你决定何时停止训练:

  • 损失函数收敛:通常,当损失函数的值在多个epoch内不再显著下降时,可以认为模型已经收敛。但这并不总是意味着模型已经达到最佳性能。
  • 验证集性能:如果你有一个独立的验证集,可以监控模型在验证集上的性能。当验证集上的损失不再显著下降时,可能意味着模型已经足够好。
  • 预定的迭代次数:在开始训练之前,可以设定一个预定的迭代次数。如果损失函数在达到这个迭代次数之前已经收敛,则可以提前停止训练。
  • 人为设定的阈值:可以设定一个损失函数的阈值,当损失函数低于这个阈值时停止训练。这个阈值应该基于对问题的理解以及所需的精度。

例如,如果你在解决一个工程问题,可能需要一个特定的精度水平,比如损失函数值低于1e-5。在这种情况下,你可以将训练停止的条件设置为损失函数达到这个阈值。

总之,没有一个固定的损失值可以作为停止训练的标准。最佳做法是结合上述几个因素,并根据具体问题的需求和上下文来做出决定。通常,需要通过实验和领域知识来找到合适的停止点。

我训练一个模型训练好了,现在想保存,但是报错,怎么办?如果更改了模型定义,我原来的训练好的模型也没了呀

当你遇到保存模型时出现的错误时,首先需要查看错误信息以确定问题的具体原因。以下是一些可能的解决方案:

查看错误信息

错误信息通常会提供关于问题的线索。例如,如果你遇到了类似以下错误:

复制

AttributeError: Can't pickle local object ...

这表明模型中可能包含无法被序列化的对象,比如局部定义的函数或lambda表达式。

解决方案

  1. 仅保存状态字典: 确保你是在保存模型的状态字典而不是整个模型。状态字典只包含模型的参数,通常不会包含模型定义中的代码。

    python

    复制

    torch.save(model.state_dict(), 'model.pth')
    
  2. 检查模型中的自定义层或函数: 如果你在模型中使用了自定义层或函数,确保它们是可以被序列化的。避免使用lambda函数或者确保它们在全局范围内定义。

  3. 分离模型定义和训练代码: 将模型定义放在一个单独的文件中,并在训练脚本中导入它。这样即使更改了模型定义,只要不更改层的名字和参数,你仍然可以使用原来的状态字典。

  4. 保存和加载模型结构: 如果你确实更改了模型定义,你可以保存一个模型的副本,以便以后可以加载相同的结构。

    python

    复制

    torch.save(model, 'entire_model.pth')
    

    然后在加载时:

    python

    复制

    model = torch.load('entire_model.pth')
    
  5. 适配新旧模型结构: 如果你更改了模型定义,但希望重用旧的模型参数,可以尝试创建一个新的模型实例,并将旧的状态字典中的参数加载到新模型中,前提是新旧模型具有兼容的层和参数名称。

    python

    复制

    new_model = NewModelDefinition()  # 新的模型定义
    old_state_dict = torch.load('model.pth')
    new_state_dict = {k: v for k, v in old_state_dict.items() if k in new_model.state_dict()}
    new_model.load_state_dict(new_state_dict, strict=False)
    

如果更改了模型定义

如果你更改了模型定义,原来的训练好的模型不会自动失效。只要你能够按照上述方法之一加载和适配旧的状态字典,你就可以继续使用这些参数。如果无法适配,你可能需要从头开始重新训练模型,或者使用部分旧的参数作为新模型的初始化。

总之,确保遵循良好的实践,比如定期保存状态字典,并在更改模型定义时保持参数名称的一致性,可以帮助你在不丢失训练进度的情况下进行模型迭代。

我现在保存不了呀???

如果你在尝试保存模型时遇到问题,请按照以下步骤进行排查和解决:

1. 查看错误信息

首先,查看报错信息,了解无法保存模型的具体原因。错误信息通常会指出问题的所在。

2. 确认保存的是状态字典

确保你尝试保存的是模型的状态字典,而不是整个模型。状态字典通常是可以序列化的。

python

复制

torch.save(model.state_dict(), 'model.pth')

3. 检查模型中的自定义层或函数

如果模型中包含自定义层或函数,确保它们是可以序列化的。避免使用lambda函数或者确保它们在全局范围内定义。

4. 分步骤排查

尝试以下步骤,逐步排查问题:

a. 保存一个简单的模型

尝试保存一个简单的模型(比如只有几个全连接层的模型),看是否可以成功。如果可以,问题可能出在你原始模型中的某些特定部分。

b. 逐步添加复杂性

从简单模型开始,逐步添加原始模型中的层和操作,直到发现问题所在。

c. 检查不可序列化的元素

以下是一些可能导致无法序列化的元素:

  • lambda函数
  • 自定义层或函数中的不可序列化属性
  • 包含循环引用的对象
  • 其他Python特定的对象,如文件句柄、线程等

5. 临时解决方案

如果无法直接解决问题,你可以尝试以下临时解决方案:

a. 保存参数

手动保存每个层的参数,例如:

 

torch.save(model.conv1.weight.data, 'conv1_weight.pth')
torch.save(model.conv1.bias.data, 'conv1_bias.pth')
# ... 对其他层做同样的操作
b. 重写模型定义

如果可能,尝试重写模型定义,避免使用导致问题的元素。

6. 求助社区

如果上述步骤都无法解决问题,你可以将错误信息发布到PyTorch社区、论坛或Stack Overflow,寻求更多帮助。

请提供具体的错误信息,这样其他人可以更准确地帮助你解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/67837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

风水算命系统架构与功能分析

系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持myb…

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…

微信原生小程序自定义封装组件(以导航navbar为例)

封装 topnav.js const App getApp(); Component({// 组件的属性列表properties: {pageName: String, //中间的titleshowNav: { //判断是否显示左上角的按钮 type: Boolean,value: true},showHome: { //判断是否显示左上角的home按钮type: Boolean,value: true},showLocat…

鸿蒙面试 2025-01-10

写了鉴权工具&#xff0c;你在项目中申请了那些权限&#xff1f;&#xff08;常用权限&#xff09; 位置权限 &#xff1a; ohos.permission.LOCATION_IN_BACKGROUND&#xff1a;允许应用在后台访问位置信息。 ohos.permission.LOCATION&#xff1a;允许应用访问精确的位置信息…

使用大数据分析提升电子商务的转化率

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

【Rust自学】11.4. 用should_panic检查恐慌

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.4.1. 验证错误处理的情况 测试函数出了验证代码的返回值是否正确&#xff0c;还需要验证代码是否如预期的去处理了发生错误的情况。比…

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小&#xff0c;[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图&#xff0c;宽度1 h1…

STM32 I2C硬件配置库函数

单片机学习&#xff01; 目录 前言 一、I2C_DeInit函数 二、I2C_Init函数 三、I2C_StructInit函数 四、I2C_Cmd函数 五、I2C_GenerateSTART函数 六、I2C_GenerateSTOP函数 七、I2C_AcknowledgeConfig函数 八、I2C_SendData函数 九、I2C_ReceiveData函数 十、I2C_Sen…

MT6835天玑6100平台规格参数_MTK联发科安卓核心板方案定制开发

联发科MT6835平台集成了蓝牙、FM、WLAN 和 GPS 模块&#xff0c;是一个高度集成的基带平台。该芯片集成了两个 Arm Cortex-A76 内核&#xff08;运行频率高达 2.2GHz&#xff09;、六个 Arm Cortex-A55 内核&#xff08;运行频率高达 2.0 GHz&#xff09;和强大的多标准视频编解…

【微服务与K8S】

微服务核心概念 配置中心 定义&#xff1a;集中管理微服务配置的组件。作用&#xff1a;微服务数量多&#xff0c;配置复杂&#xff0c;配置中心让配置集中化&#xff0c;便于管理与修改。支持动态更新配置&#xff0c;无需重启服务&#xff0c;提升运维效率与灵活性。如开发、…

记录一个移动端表格布局,就是一行标题,下面一列是对应的数据,一条一条的数据,还有点击数据进入详情的图标,还可以给一列加input输入框,还可以一对多

注&#xff1a;以下字段名都是随手写&#xff0c;并不规范&#xff0c;自己替换自己的&#xff0c;&#xff0c;只参考样式 注&#xff1a;以下重要的是布局&#xff0c;样式&#xff0c;宽高什么的再自己去搞吧 <view class"search"> <u-…

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…

ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录 ELK工作原理展示图 一、ElasticSearch介绍&#xff08;数据搜索和分析&#xff09; 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…

【老白学 Java】项目演练 - Quizzes #2

项目演练 - Quizzes #2 文章来源&#xff1a;《Head First Java》修炼感悟。 上一篇文章老白仔细分析了 Quizzes 的类结构&#xff0c;本文接上一章继续对功能模块逐步完善。 整个程序没有复杂的算法&#xff0c;仅仅用到了一些基础知识&#xff0c;如果大家已经了解了这部分内…

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层&#xff0c;即传输层&#xff0c;为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议&#xff0c;但两者在设计上有明显的不同&…

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年&#xff0c;是 JuiceFS 开源版本推出的第 4 年&#xff0c;企业版的第 8 个年头。回顾过去这一年&#xff0c;JuiceFS 社区版依旧保持着快速成长的势头&#xff0c;GitHub 星标突破 11.1K&#xff0c;各项使用指标增长均超过 100%&#xff0c;其中文件系统总…

4、SDH为基础的多业务传送-MSTP

1、SDH&#xff08;Synchronous Digital Hierarchy&#xff0c;同步数字体系&#xff09; SDH 就像是一条超级高速公路&#xff0c;它的规则很严格&#xff0c;所有的车辆&#xff08;数据信号&#xff09;都要按照它规定的速度和车道&#xff08;标准的传输体制&#xff09;行…

初级前端面试题 - js

前言&#xff1a;众所周知&#xff0c;HTML,CSS,JS是学习前端所必备的。js的基础学好了&#xff0c;框架类的vue,react等都会接受的很快&#xff0c;因此js是前端很总要的一个部分&#xff0c;这篇文章将会结合面试题&#xff0c;对js的知识点进行总结 号外号外&#xff0c;这是…

使用 Maxwell 计算母线的电动势

三相短路事件的动力学 三相短路事件在电气系统中至关重要&#xff0c;因为三相之间的意外连接会导致电流大幅激增。如果管理不当&#xff0c;这些事件可能会造成损坏&#xff0c;因为它们会对电气元件&#xff08;尤其是母线&#xff09;产生极大的力和热效应。 短路时&#x…

Unity自定义编辑器:基于枚举类型动态显示属性

1.参考链接 2.应用 target并设置多选编辑 添加[CanEditMultipleObjects] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;[CustomEditor(typeof(LightsState))] [CanEditMultipleObjects] public class TestInspector :…