У меня есть простая нейронная сеть, мне нужно получить веса и уклоны от модели. Я попробовал несколько подходов, обсужденных ранее, но я продолжаю получать ошибку значения за пределами. Не уверен, как это исправить, или что мне не хватает.

Сеть-

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.layers[0].get_weights()[1]

Ошибка - {{Х0}}

Это то, что было упомянуто в нескольких вопросах, но в итоге я получаю ошибку «за пределами» для этого.

У меня есть еще один вопрос, после которого следует индекс model.layers[], соответствует ли он слою? Например, model.layers[1] дает веса, соответствующие второму слою, что-то в этом роде?

0
user8771957 2 Июл 2019 в 17:52

3 ответа

Лучший ответ

Я был там, я смотрел свой старый код, чтобы посмотреть, смогу ли я вспомнить, как я решил эту проблему. Я распечатал длину model.layer[index].get_weights()[X], чтобы выяснить, где керасы сохраняют нужные мне веса. В моем старом коде model.layers[0].get_weights()[1] возвращает смещения, а model.layers[0].get_weights()[0] возвращает действительные веса. В любом случае, учтите, что есть слои, вес которых не сохраняется (так как они не имеют весов), поэтому, если запрос model.layers[0].get_weights()[0] не работает, попробуйте model.layers[1].get_weights()[1], так как Я не уверен насчет сглаживания слоев, но я знаю, что плотные слои должны сохранять свой вес.

0
abeagomez 2 Июл 2019 в 18:43

Первый слой (индекс 0) в вашей модели - это слой Flatten, у которого нет весов, поэтому вы получаете ошибки.

Чтобы получить слой Dense, который является вторым слоем, вы должны использовать индекс 1:

model.layers[1].get_weights()[1]
1
Matias Valdenegro 2 Июл 2019 в 16:33

Просто model.get_weights(), вы получите все веса и уклон вашей модели

0
SsOo 16 Янв 2020 в 01:43