Какой слой я должен использовать при построении нейронной сети с Tensorflow 2.x? - PullRequest
0 голосов
/ 11 февраля 2020

Я сейчас учусь TensorFlow 2.0 и Keras . Я знаю, что функции активации используются для расчета производительности каждого слоя нейронной сети на основе математических функций. Однако при поиске слоев я не могу найти syntheti c и легкочитаемую информацию для начинающих в глубоком обучении.

Есть документация на keras, но я хотел бы узнать синтетически:

  • Какие наиболее распространенные слои используются для создания модели (Dense, Flatten, MaxPooling2D, Dropout, .. .).
  • В каком случае использовать каждый из них? (Классификация, регрессия, другое)
  • Как правильно использовать каждый слой в зависимости от каждого случая?

1 Ответ

1 голос
/ 11 февраля 2020

В зависимости от проблемы, которую вы хотите решить, вы можете использовать различные функции активации и функции потерь.

  1. Проблема регрессии: вы хотите предсказать цену здания. У вас есть N функций. Конечно, цена здания - это действительное число, поэтому вам нужно иметь mean_squared_error в качестве функции потерь и linear активацию для вашего последнего узла. В этом случае вы можете иметь пару Dense() слоев с активацией relu, тогда как ваш последний слой - Dense(1,activation='linear'). Между слоями Dense () можно добавить Dropout(), чтобы уменьшить эффект переобучения (если имеется).
  2. Проблема классификации: вы хотите определить, является ли кто-то диабетом c во время приема. учитывать несколько факторов / особенностей. В этом случае вы можете использовать снова сложенные слои Dense(), но ваш последний слой будет Dense(1,activation='sigmoid'), так как вы хотите определить, является ли пациент диабетом c. Функция потерь в этом случае равна 'binary_crossentropy'. Между слоями Dense () можно добавить Dropout(), чтобы уменьшить эффект переобучения (если имеется).
  3. Проблемы с обработкой изображений: здесь у вас наверняка есть стеки [Conv2D(),MaxPool2D(),Dropout()]. MaxPooling2D - это операция, которая типична для обработки изображений, а также для некоторой обработки на естественном языке (не будем здесь останавливаться на этом). Иногда в сверточных архитектурах нейронных сетей используется слой Flatten(). Его целью является уменьшение размерности карт объектов в одномерный вектор, размерность которого равна общему количеству элементов во всей глубине карты объектов. Например, если бы у вас была матрица [28,28], то при ее выравнивании она уменьшилась бы до (1784), где 784 = 28 * 28.

Хотя вопрос довольно широкий и, возможно, какой-то люди будут голосовать, чтобы закрыть его, я попытался дать вам краткий обзор того, что вы спросили. Я рекомендую, чтобы вы начали изучать основы нейронных сетей, а затем углубились в использование фреймворка, такого как TensorFlow или PyTorch.

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