Количество параметров для Keras SimpleRNN - PullRequest
0 голосов
/ 02 мая 2018

У меня есть простой RNN вроде:

model.add(SimpleRNN(10, input_shape=(3, 1)))
model.add(Dense(1, activation="linear"))

Сводка модели гласит:

simple_rnn_1 (SimpleRNN)   (None, 10)   120       

Мне любопытно узнать номер параметра 120 для simple_rnn_1. Не могли бы вы кто-нибудь ответить на мой вопрос?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Это может быть легче понять визуально с простой сетью, подобной этой:

enter image description here

Количество весов составляет 16 (4 * 4) + 12 (3 * 4) = 28, а количество смещений равно 4.

, где 4 - количество единиц, а 3 - количество входных измерений, поэтому формула такая же, как в первом ответе: num_units ^ 2 + num_units * input_dim + num_units или просто num_units * (num_units + input_dim + 1), что дает 10 * (10 + 1 + 1) = 120 для параметров, указанных в вопросе.

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

Когда вы смотрите на заголовок таблицы, вы видите заголовок Param:

Layer (type)              Output Shape   Param 
===============================================
simple_rnn_1 (SimpleRNN)   (None, 10)    120   

Это число представляет количество обучаемых параметров (весов и смещений) в соответствующем слое, в данном случае ваш SimpleRNN.

Edit:

Формула для расчета весов выглядит следующим образом:

recurrent_weights + input_weights + смещения

* соответственно: (num_features + num_units) * num_units + num_units

Пояснение:

num_units = равно количеству единиц в RNN

num_features = равно количественным характеристикам вашего ввода

Теперь у вас есть две вещи, которые происходят в вашем RNN.

Сначала у вас есть рекуррентный цикл, где состояние периодически подается в модель для генерации следующего шага. Веса для повторяющегося шага:

recurrent_weights = num_units * num_units

Во-вторых, у вас есть новый ввод вашей последовательности на каждом шаге.

input_weights = num_features * num_units

(Обычно и последнее состояние RNN, и новый вход объединяются, а затем умножаются на одну матрицу весов, тем не менее входы и последнее состояние RNN используют разные веса)

Итак, теперь у нас есть весовые коэффициенты, не хватает смещений - для каждого смещения на одну единицу:

смещения = num_units * 1

Итак, наконец, у нас есть формула:

recurrent_weights + input_weights + смещения

или

num_units * num_units + num_features * num_units + смещения

=

(num_features + num_units) * num_units + смещения

В ваших случаях это означает, что обучаемыми параметрами являются:

10 * 10 + 1 * 10 + 10 = 120

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...