#python #tensorflow #machine-learning #deep-learning #neural-network
#python #тензорный поток #машинное обучение #глубокое обучение #нейронная сеть
Вопрос:
Если имеется 10 объектов и 1 выходной класс (активация сигмоида) с целью регрессии:
Если я использую только 5 нейронов в моем первом плотном скрытом слое: будет ли первая ошибка вычисляться исключительно на основе половины набора обучающих функций? Разве не обязательно сопоставлять # функций с нейронами в скрытом слое # 1, чтобы модель могла видеть все функции сразу? В противном случае он не получает полной картины? Первая итерация распространения fwd будет использовать 5 из 10 функций и получать значение ошибки (и обучаться во время backprop, предполагая, что спуск по пакетному градиенту). Тогда 2-я итерация распространения fwd увидит оставшиеся 5 из 10 функций с обновленными весами и, надеюсь, получит меньшую ошибку. НО он видит только половину функций одновременно!
И наоборот, если у меня есть сверточный 2D-слой из 64 нейронов. И моя форма обучения: (100, 28,28,1) (изображения кошек и собак в оттенках серого), будет ли каждый из 64 нейронов видеть другой вектор 28×28? Нет права, потому что он может отправлять только один пример через прямое распространение одновременно? Значит, только одно изображение (кошка или собака) должно быть распределено по 64 нейронам? Зачем вам это нужно, поскольку каждый нейрон в этом слое имеет одинаковую функцию фильтрации, шага, заполнения и активации? Когда вы определяете слой Conv2D…параметры каждого нейрона одинаковы. Итак, входит ли в каждый нейрон только часть обучающего примера? Почему, например, 64 нейрона? Просто возьмите один нейрон, используйте на нем фильтр и передайте его на второй скрытый слой с другим фильтром с другими параметрами!
Пожалуйста, объясните недостатки в моей логике. Большое спасибо.
РЕДАКТИРОВАТЬ: я только что понял, что для Conv2D вы сглаживаете обучающие наборы данных, чтобы они стали 1D-вектором, и поэтому изображение 28×28 означало бы наличие входного conv2d-слоя из 724 нейронов. Но я все еще в замешательстве из-за плотной нейронной сети (пункт № 1 выше).
Ответ №1:
Каков ваш «первый» слой? Обычно у вас есть входной слой в качестве первого слоя, который не содержит никаких весов. Форма входного слоя должна соответствовать форме ваших данных объектов. Итак, в основном, когда вы обучаете модель с 10 функциями, но имеете только входной слой shape (None,5)
(где none обозначает batch_size ), tensorflow вызовет исключение, потому что ему нужны данные для всех входных данных в правильной форме.
Итак, то, что вы сказали, просто не произойдет. Если у вас есть только 5 функций, следующие 5 функций не будут помещены в сеть на следующей итерации, но вместо этого в модель будет отправлен следующий образец. (Допустим, исключение не выдается), поэтому в следующем примере также будут использоваться только первые 5 функций.
Что вы можете сделать вместо этого, используйте a input_layer
в качестве первого слоя с правильной формой ваших объектов. Тогда в качестве второго слоя вы можете использовать любую понравившуюся вам форму, 1 10 100 плотных нейронов, это зависит от вас (и, конечно, хорошо работает). Форма выходных данных снова должна соответствовать (на этот раз) форме данных вашей метки.
Я надеюсь, что это делает его более понятным