AttributeError:“collections.OrderedDict”对象没有属性“eval”
Posted
技术标签:
【中文标题】AttributeError:“collections.OrderedDict”对象没有属性“eval”【英文标题】:AttributeError: 'collections.OrderedDict' object has no attribute 'eval' 【发布时间】:2018-10-01 03:48:00 【问题描述】:我有一个看起来像这样的模型文件
OrderedDict([('inp.conv1.conv.weight',
(0 ,0 ,0 ,.,.) =
-1.5073e-01 6.4760e-02 1.9156e-01
1.2175e-01 3.5886e-02 1.3992e-01
-1.5903e-01 8.2055e-02 1.7820e-01
(0 ,0 ,1 ,.,.) =
1.0604e-01 -1.3653e-01 1.4803e-01
6.0276e-02 -1.4674e-02 2.3059e-06
-6.2192e-02 -5.1061e-03 -7.4145e-03
(0 ,0 ,2 ,.,.) =
-5.5632e-02 3.5326e-02 6.5108e-02
1.1411e-01 -4.4160e-02 8.2610e-02
8.9979e-02 -3.5454e-02 4.2549e-02
(1 ,0 ,0 ,.,.) =
4.8523e-02 -4.3961e-02 5.3614e-02
-1.2644e-01 1.2777e-01 8.9547e-02
3.8392e-02 2.7016e-02 -1.4552e-01
(1 ,0 ,1 ,.,.) =
9.5537e-02 2.8748e-02 3.9772e-02
-6.2410e-02 1.1264e-01 7.8663e-02
-2.6374e-02 1.4401e-01 -1.7109e-01
(1 ,0 ,2 ,.,.) =
5.1791e-02 -1.6388e-01 -1.7605e-01
3.5028e-02 7.7164e-02 -1.4499e-01
-2.9189e-02 2.7064e-03 -2.3228e-02
(2 ,0 ,0 ,.,.) =
-7.4446e-03 -9.7202e-02 -1.4704e-01
-1.0019e-02 8.1780e-02 -5.3530e-02
-1.8412e-01 1.5988e-01 -1.3450e-01
(2 ,0 ,1 ,.,.) =
-1.1075e-01 -5.2478e-02 6.0658e-02
1.6739e-01 -2.9360e-02 1.2621e-01
2.0686e-02 1.1468e-01 1.2282e-01
我想对此模型进行推理,但是当我执行 model.eval() 时,我得到了,
AttributeError: 'collections.OrderedDict' object has no attribute 'eval
【问题讨论】:
【参考方案1】:它不是模型文件,而是状态文件。在模型文件中,存储了完整的模型,而在状态文件中只存储了参数。
因此,您的 OrderedDict
只是您模型的值。您将需要创建模型,然后需要将这些值加载到您的模型中。所以,这个过程的形式是
import torch
import torch.nn as nn
class TempModel(nn.Module):
def __init__(self):
self.conv1 = nn.Conv2d(3, 5, (3, 3))
def forward(self, inp):
return self.conv1(inp)
model = TempModel()
model.load_state_dict(torch.load(file_path))
model.eval()
您需要正确定义模型。上面示例中给出的只是一个假人。如果您自己构建模型,您可能需要更新已保存的 dict 文件的键,如 here 所述。最好的做法是按照与保存 state_dict
时完全相同的方式定义模型,然后直接执行 model.load_state_dict
即可。
【讨论】:
有没有办法保存模型,使用时不需要重新定义? 你可以看看这个帖子-***.com/questions/42703500/…【参考方案2】:简单使用:
torch.save(model_conv,'cnn.pt')
the_model = torch.load('cnn.pt')
【讨论】:
作者得到了OrderedDict结构。如果存储了整个模型,而不仅仅是参数,并且想要加载它,这种方法是正确的。以上是关于AttributeError:“collections.OrderedDict”对象没有属性“eval”的主要内容,如果未能解决你的问题,请参考以下文章
python 基于API示例的场景集合:https://docs.blender.org/api/blender_python_api_current/bpy.props.html#collectio
初学者 Python:AttributeError:'list' 对象没有属性