代码之家  ›  专栏  ›  技术社区  ›  user3639557

在dynet中按名称调用参数

  •  0
  • user3639557  · 技术社区  · 6 年前

    在dynet中,是否可以通过参数的名称来调用该参数:

    def dosomething(model):
        temp = model.get_parameter("temp") #something like this?
        ...
    
    def create():
        Model = ParameterCollection()
        temp = Model.add_parameters((2,2))
        ...
        dosomething(Model) 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   mcoav    6 年前

    您不能使用Dynet API直接执行此操作。

    每个参数都有一个名称,可以用关键字参数指定。 name . 例子:

    pW = model.add_parameter((12, 12), name="W")
    

    但是( source ):

    当从磁盘加载时,这些名称用于标识参数和集合层次结构,特别是当仅在保存的文件中加载对象的一个子集时。

    在创建参数或子集合时,可以提供可选的信息名称。然后将提供的名称与正在运行的索引一起附加,以避免名称冲突。

    因此,不能基于 ParameterCollection 对象和名称(好吧,你可以,但我不建议)。


    所以当你需要的时候,通常的做法是使用字典:

    import dynet as dy
    
    def dosomething(model, params):
        pW = params["W"]
        pb = params["b"]
        #...
    
    def create():
        model = dy.ParameterCollection()
        params = {}
        params["W"] = model.add_parameters((12, 12))
        params["b"] = model.add_parameters((12, ))
    
        #...
        dosomething(model, params)
    
    create()
    
    推荐文章