вызов параметров по имени в dynet - PullRequest
0 голосов
/ 21 мая 2018

Есть ли способ вызвать параметр по его имени в 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 Ответ

0 голосов
/ 21 мая 2018

Вы не можете сделать это напрямую, используя 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()
...