ConvE 模型实例

问题代码

# 创建 ConvE 模型实例
args = {
    "entity_dim": 200,
    "relation_dim": 200,
    "time_dim": 200,
    "emb_2D_d1": 10,
    "emb_2D_d2": 20,
    "num_out_channels": 32,
    "kernel_size": 3,
    "hidden_dropout_rate": 0.3,
    "feat_dropout_rate": 0.3
}
num_entities = 1000  # 假设实体数量为1000

model = ConvE(args, num_entities)
print(model)

问题:

AttributeError: ‘dict’ object has no attribute ‘entity_dim’

解决方案:

问题可能是因为传递的参数 args 是一个字典,但模型的初始化方法期望的第一个参数是一个自定义的对象,而不是字典。
为了解决这个问题,可以创建一个包含所有参数的自定义类,并将其传递给模型的初始化方法。这样可以确保模型能够正确地访问各个参数。

代码

class Args:
    def __init__(self, entity_dim, relation_dim, time_dim, emb_2D_d1, emb_2D_d2,
                 num_out_channels, kernel_size, hidden_dropout_rate, feat_dropout_rate):
        self.entity_dim = entity_dim
        self.relation_dim = relation_dim
        self.time_dim = time_dim
        self.emb_2D_d1 = emb_2D_d1
        self.emb_2D_d2 = emb_2D_d2
        self.num_out_channels = num_out_channels
        self.kernel_size = kernel_size
        self.hidden_dropout_rate = hidden_dropout_rate
        self.feat_dropout_rate = feat_dropout_rate

# 创建 Args 实例
args = Args(entity_dim=200, relation_dim=200, time_dim=200, emb_2D_d1=10, emb_2D_d2=20,
            num_out_channels=32, kernel_size=3, hidden_dropout_rate=0.3, feat_dropout_rate=0.3)

# 创建 ConvE 模型实例
model = ConvE(args, num_entities)
print(model)

模型结构

ConvE(
  (HiddenDropout): Dropout(p=0.3, inplace=False)
  (FeatureDropout): Dropout(p=0.3, inplace=False)
  (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
  (bn0): BatchNorm2d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (bn2): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (fc): Linear(in_features=16128, out_features=200, bias=True)
)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值