Как Keras использует Glorot Uniform и Relu? - PullRequest
0 голосов
/ 27 января 2019

Я хочу спросить, как Keras обрабатывает ввод, используя унифицированный инициализатор Glorot и relu? Я запутался, как Keras обрабатывает ввод

Например, у меня есть такой код

model = Sequential()
model.add(ZeroPadding2D((1, 1), input_shape=(224, 224, 3)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(Convolution2D(4096, (7, 7), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(4096, (1, 1), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(2622, (1, 1)))
model.add(Flatten())
model.add(Activation('softmax'))

Мне известна функция активации RELU, используемая в ConvNet как этап вычислений. RELU установит значение любых отрицательных элементов равным 0, в противном случае будет установлено значение 1, если оно положительное. Но как они обрабатывают ввод, как описано выше.

Input -> Glorot -> RELU или Input -> RELU -> Glorot? Кто-нибудь может мне объяснить?

1 Ответ

0 голосов
/ 27 января 2019

Что такое униформа Glorot и как она работает?

Согласно документации Keras,

Универсальный инициализатор Glorot, также называемый универсальным инициализатором Xavier.Он рисует образцы из равномерного распределения в пределах [-limit, limit], где limit - sqrt (6 / (fan_in + fan_out)), где fan_in - количество входных единиц в тензоре веса, а fan_out - количество выходных единиц в весе.тензор.

Это просто инициализатор, который инициализирует веса каждого слоя в Керасе.Он выбирает другую стратегию.Он рассчитывает предел [-limit, limit], где limit = sqrt (6 / (входные единицы + выходные единицы)).Затем веса выбираются случайным образом из [-limit, limit].

Как все это работает в последовательности в Керасе?

Выполнены следующие шаги.

  1. Инициализировать веса, используя унифицированную форму Глота.
  2. Вектор ввода умножается на матрицу весов.
  3. Добавьте смещение к указанному выше точечному произведению.
  4. Выполните активацию ReLU к указанной сумме.

Следовательно,

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