2016-09-08 2 views
1

для ввода в нервную сеть с обратной связью, которую я реализовал в Keras, я просто хотел проверить правильность моего понимания.Feed Forward - нейронные сети Keras

[[ 25.26000023 26.37000084 24.67000008 23.30999947] 
[ 26.37000084 24.67000008 23.30999947 21.36000061] 
[ 24.67000008 23.30999947 21.36000061 19.77000046]...] 

Таким образом, в приведенных выше данных это временное окно из 4 входов в массиве. Мой входного слой

model.add(Dense(4, input_dim=4, activation='sigmoid')) 

model.fit(trainX, trainY, nb_epoch=10000,verbose=2,batch_size=4) 

и batch_size является 4, в теории, когда я звоню подгонку функции функции идти по всем этим входам в каждом nb_epoch? и требуется ли batch_size 4 для того, чтобы это окно времени работало?

Благодаря Джон

ответ

1

и batch_size 4, теоретически, когда я вызываю функцию fit, функция будет переходить через все эти входы в каждом nb_epoch?

Да, каждая эпоха итерации над все подготовки образцов

и делает batch_size должны быть 4, чтобы за это время окна, чтобы работать?

Нет, это абсолютно несвязанные вещи. Пакет - это просто подмножество ваших данных обучения, которое используется для вычисления приближения истинного градиента функции стоимости. Большая партия - ближе вы доходите до истинного градиента (и оригинала Gradient Descent), но тренировка замедляется. Ближе к 1 вы получаете - он становится все более и более стохастическим, шумным приближением (и ближе к Стохастический градиентный спуск). Тот факт, что вы сопоставляете размер партии и размерность данных, является просто странным совпадением и не имеет никакого значения.

Позвольте мне поставить это в более Generall обстановке, что вы делаете в градиентного спуска с аддитивной функции потерь (которые нейронные сети обычно используют) происходит против градиента, который

grad_theta 1/N SUM_i=1^N loss(x_i, pred(x_i), y_i|theta) = 
= 1/N SUM_i=1^N grad_theta loss(x_i, pred(x_i), y_i|theta) 

где loss некоторая функция потерь над вашим pred (прогноз) по сравнению с y_i.

И в scenatio основе пакетной (грубая идея) является то, что вам не нужно идти на все примеры, но вместо некоторого строгого подмножества, как batch = {(x_1, y_1), (x_5, y_5), (x_89, y_89) ... } и использовать приближение градиента формы

1/|batch| SUM_(x_i, y_i) in batch: grad_theta loss(x_i, pred(x_i), y_i|theta) 

As вы можете видеть, что это не связано ни в каком смысле с пространством, где x_i жить, поэтому нет связи с размерностью ваших данных.

1

Позвольте мне объяснить это на примере:

Если у вас есть 32 обучающих примеров, и вы называете model.fit с batch_size 4, нейронная сеть будет представлена ​​с 4 примерами, в то время , но одна эпоха будет по-прежнему определяться как один полный проход по всем 32 примерам. Таким образом, в этом случае сеть будет проходить по четыре примера за раз, и теоретически, по крайней мере, вызовет передний проход (и обратный проход) 32/4 = 8 раз.

В крайнем случае, когда ваш batch_size равен 1, это простой старый стохастический градиентный спуск. Когда ваш batch_size больше 1, это называется сокращением градиента партии.

Смежные вопросы