Как проверить номер параметров модели в цепочке

avatar
EricHong
9 августа 2021 в 06:13
126
1
0

Как проверить номер параметра моей модели цепи? Это что-то похожее на model.count_params() в Keras.

Источник
Bedir Yilmaz
9 августа 2021 в 06:30
0

Привет Эрик, добро пожаловать в SO! Возможно, вам будет полезно включить результаты ваших собственных исследований. Для получения дополнительной информации: coderhelper.com/help/how-to-ask

Ответы (1)

avatar
Abhishek Prajapat
9 августа 2021 в 06:30
0

Если вы хотите увидеть значения в параметрах, вы можете использовать это

# model.params gives you a generator object which you could iterate and see
for i in model.params():
  print(i)

Если вы хотите увидеть названия слоев и фигур, вы можете использовать это

for i in model.links():
  print(i)

Если вы не инициализировали входные данные, вы можете проверить только смещения, основанные на единице измерения. вот так

total = 0
for idx, i in enumerate(model.params()):
  if idx%2 != 0: # Skipping the weights and looking at biases
    total += len(i)

print(total)

Если вы определили свои входные данные, веса не будут None, и вы также можете вычислить их значения с небольшими изменениями, подобными этому

total = 0
for idx, i in enumerate(model.params()):
  if idx%2 != 0:
    total += len(i)
  else:
    total += len(i)*len(i[0]) # len inputs * len units

print(total)

'''
Now for different models, there are different methods so we can use try-except to make it better but be careful as the results might be wrong in some cases. usually, they will be correct. There might be cases when you have nested layers in the model and you have to check recursively.
'''

total = 0
for idx, i in enumerate(model.params()):
  try:
    try:
       total += len(i)
    except:
       total += len(i)*len(i[0])

  except:
       pass


EricHong
9 августа 2021 в 07:51
0

Привет! Спасибо за ответ на мой вопрос. Этот код позволяет мне проверить значение каждого параметра. Но я хочу проверить общее количество параметров, а не значение параметров. Есть ли решение?

EricHong
9 августа 2021 в 09:46
0

Я загружаю предварительно обученную модель, затем сразу же использую четвертый код. Но я получил следующую ошибку: TypeError: len() объекта unsized Я обнаружил, что len(i[0]) вызвало эту ошибку. Есть какое-то решение или я что-то не так делаю?

Abhishek Prajapat
9 августа 2021 в 09:50
0

@EricHong просто проверьте свою модель, используя первый набор кода в моем ответе для вашей модели, после чего вы узнаете, какой объект вы можете использовать len. Если вы хотите получить полный ответ, вы должны опубликовать свою модель.

EricHong
9 августа 2021 в 11:00
0

Здравствуйте, я печатаю i[0] своей модели по первому набору кода и получаю переменную. Я не уверен, почему len([0]) не работает. И я не уверен, что вы имеете в виду, что я должен опубликовать свою модель. Еще раз спасибо за ответ.

Abhishek Prajapat
9 августа 2021 в 11:36
0

@EricHong Я имею в виду опубликовать свой модельный класс. Код вашей модели.

EricHong
9 августа 2021 в 12:01
0

Модель немного великовата. Вы имеете в виду напрямую опубликовать весь код?

Abhishek Prajapat
9 августа 2021 в 12:52
0

Да. или вы можете поделиться ссылкой на Github. Все работает.

EricHong
9 августа 2021 в 13:03
0

Я использую модель на github.com/hitachi-speech/EEND/blob/master/eend/chainer_backend/… строка 409~513

Abhishek Prajapat
9 августа 2021 в 15:22
0

@EricHong Я имею в виду ваш код, в котором вы определяете модель.

EricHong
9 августа 2021 в 16:30
0

Ой, извини. Вот мой код: gist.github.com/erichong0318/bdb2b69adb9034aa4d503796f4f4a4ce

Abhishek Prajapat
9 августа 2021 в 18:27
0

Я уже слышу, как некоторые люди кричат ​​на меня, но все же. Просто используйте try и except. Я отредактировал код.