Понимание разницы между аргументами единиц и input_dim для плотного слоя - PullRequest
0 голосов
/ 05 июня 2019

Предполагая, что у меня есть набор данных размером (1000, 64), где 64 - это число столбцов (то есть, объектов). Предположим, в Keras я хочу построить модель NN в виде следующей архитектуры:

  1. Входной слой: Очевидно, что это должен быть один слой с числом нейронов, равным количеству объектов в моем наборе данных. Следовательно, число нейронов здесь = 64.
  2. Скрытый слой: Я хочу, чтобы в этом скрытом слое было 100 нейронов.
  3. Выходной слой: Это один нейрон, потому что я работаю с проблемой двоичной классификации.

Теперь, чтобы построить вышеупомянутую архитектуру в Керасе, я обычно делаю следующее:

model = Sequential()
model.add(Dense(units=64, input_dim=64, activation='tanh'))  # Input layer
model.add(Dense(units=100, activation='tanh'))  # Hidden layer
model.add(Dense(units=1, activation='sigmoid')) # Output layer

Проблема в том, что я не могу различить аргументы units и input_dim для слоя Dense() (для роли в качестве первого слоя (входной слой)). Я понимаю, что input_dim предназначен для указания количества объектов в вашем наборе данных (что в моем случае = 64), но я не понимаю роль units здесь для входного слоя . Должно ли units быть 64? Другими словами, должен ли аргумент units быть таким же input_dim для входного слоя?

Большое спасибо.

1 Ответ

1 голос
/ 05 июня 2019

Пусть сначала смотрит на графическое представление

enter image description here

В терминах последовательных обозначений модели keras вам понадобятся два плотных слоя (помеченных пунктирными рамками на рисунке)

  1. Плотный слой 1: он должен иметь 100 нейронов, и каждый нейрон принимает в качестве входных данных 64 объекта, поэтому определение для этого плотного слоя будет Dense(units=100, input_dim=64)
  2. Плотный слой 2: вам нужен один нейрон, и он принимает выходные данные предыдущего плотного слоя в качестве входных данных. input_dim не требуется для плотного слоя, потому что он связан с предыдущим плотным слоем в последовательной модели, и что бы ни выводил предыдущий плотный слой, он принимает в качестве входных данных (для каждого нейрона) Dense(units=1)

Итак, модель будет:

model = Sequential()
model.add(Dense(units=100, input_dim=64, activation='tanh'))  # First Hidden layer
model.add(Dense(units=1, activation='sigmoid')) # Output layer

Вы можете думать о Dense(units=m, input_dim=n) как о слое с m нейронами, причем каждый нейрон имеет n входов. Этот слой будет выводить m выходов (по одному от каждого нейрона).

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