Как получить единицы слоя кераса - PullRequest
0 голосов
/ 05 августа 2020

Как я могу получить единицы (то есть количество нейронов) слоя в Keras?

Например:

layer = keras.layers.Dense(5)
print(layer.units)

напечатает 5, но

layer = keras.layers.InputLayer(5)
print(layer.units)

вызовет ошибку.

Есть ли универсальный способ получить количество единиц слоя Keras?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Попробуйте использовать model.summary (). Это довольно полезная функция, которая может показывать множество вещей, например формы каждого слоя, используемый алгоритм и т. Д. c ..

Он также показывает входные слои.

Вот пример того, как выглядит результат:

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
user_id (InputLayer)            (None, 1)            0                                            
__________________________________________________________________________________________________
movie_id (InputLayer)           (None, 1)            0                                            
__________________________________________________________________________________________________
user_embedding (Embedding)      (None, 1, 8)         8000        user_id[0][0]                    
__________________________________________________________________________________________________
movie_embedding (Embedding)     (None, 1, 8)         8000        movie_id[0][0]                   
__________________________________________________________________________________________________
concatenate (Concatenate)       (None, 1, 16)        0           user_embedding[0][0]             
                                                                 movie_embedding[0][0]            
__________________________________________________________________________________________________
flatten (Flatten)               (None, 16)           0           concatenate[0][0]                
__________________________________________________________________________________________________
dense (Dense)                   (None, 1)            17          flatten[0][0]                    
==================================================================================================
Total params: 16,017
Trainable params: 16,017
Non-trainable params: 0
__________________________________________________________________________________________________

(Edit) В соответствии с запросом tomerg45 я объясняю, какие формы вывода

В CNN мы добавляем то, что называется ядром . Он используется для извлечения различных важных частей изображения и изменения его размера, чтобы уменьшить время и вычислительную мощность. В модели есть несколько слоев, которые делают это, например conv2D, maxpool2D et c.

Формы вывода - это окончательные формы, которые вы получаете после применения слоев. Они всегда должны быть преобразованы в одномерные. Это можно сделать с помощью flatten в Keras.

Надеюсь, это помогло!

0 голосов
/ 05 августа 2020

Ваше понимание здесь неверно. Давайте начнем с того, что посмотрим, что означает units плотного слоя. Он определяет размерность вывода или, другими словами, количество нейронов внутри слоя Dense (поскольку один нейрон выводит одно значение).

Однако InputLayer - это слой, который принимает входные данные. Это не слой с весами, он просто передает входные данные следующим слоям. Таким образом, у него нет нейронов, и поэтому у него нет units.

В этом случае вы ищете способ найти units, если он есть, вы можете использовать код, как показано ниже:

layer = keras.layers.InputLayer(5)
i = layer.nunits if isinstance(layer, keras.layers.Dense) else 0
layer = keras.layers.Dense(5)
j = layer.units if isinstance(layer, keras.layers.Dense) else 0

print (i, j)

Вывод:

0 5

Или для любого слоя

layer = keras.layers.InputLayer(5)
i = layer.nunits if hasattr(layer, 'units') else 0
layer = keras.layers.Dense(5)
j = layer.units if hasattr(layer, 'units') else 0

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