Сегодня я хотел попрактиковаться в матричном исчислении, а также проявить творческий подход к созданию некоторых слоев. И я подумал, что было бы неплохо реализовать разные слои, которые можно было бы использовать позже. Ниже приведен список слоев, на которых я хотел попрактиковаться.

а. Слой вычитания среднего по строкам
b. Слой стандартного отклонения Row-Wise
c. Слой ранжированной нормализации
d. Слой нормализации глобального контраста
e. Слой компонентов принципа реконструкции

Обратите внимание, что эта публикация предназначена для моего обучения.

а. Слой среднего вычитания по строкам

Давайте начнем с простого, просто вычтем среднее значение строки. И, как видно выше, производная очень проста.

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

Давайте сделаем простую проверку работоспособности: до слоя среднее значение каждой строки данных было 0,4229564897125843, после слоя оно было очень близко к нулю. Кроме того, мы видим, что среднее значение скользящей средней обновлено до 0,042, это ожидаемо, поскольку я использую бета-значение 0,9. Наконец, градиент находится в ожидаемом диапазоне, поскольку 1- (1/4096) = 0,999755859.

б. Слой стандартного отклонения Row-Wise

Этот слой на самом деле мало что делает, а просто вычисляет значение стандартного отклонения для каждой строки и возвращает его. (Я просто хотел попрактиковаться.)

Выше представлена ​​реализация тензорного потока, я снова установил переменную фазы обучения, чтобы различать этапы обучения и тестирования.

После прохождения данных через слой мы видим, что он правильно вернул значение стандартного отклонения для каждой строки данных.

c. Слой ранжированной нормализации

Нормализация может выполняться по любому диапазону значений, а не только по нулям и единицам. Используя эту концепцию, мы также можем распространяться по слоям в обратном направлении. Сначала давайте сделаем математику вручную.

Теперь, когда это сделано, давайте реализуем его с помощью tensorflow.

Отлично выглядит, теперь мы можем выполнить простую проверку работоспособности, чтобы убедиться, что слой работает правильно или нет. (Также для этого слоя у меня есть скользящее минимальное значение, а также скользящее максимальное значение.)

Я установил максимальный диапазон равным 10, поэтому мы нормализуем данные нашего изображения в диапазоне от 0 до 10. И мы не можем визуально увидеть разницу, однако среднее значение для всех данных увеличилось примерно на 4.

d. Слой нормализации глобального контраста

GCN можно использовать в качестве шага предварительной обработки, однако, поскольку большинство вычислений представляют собой простую матричную операцию, мы также можем пройти через нее. (Но обратите внимание, что я собираюсь использовать более мягкую версию GCN, вместо того, чтобы иметь функцию max, я просто собираюсь добавить значение epsilon, чтобы избежать деления на ноль.). Если вы хотите узнать больше, нажмите здесь.

Теперь у нас есть математика, позволяющая использовать реализацию numpy, чтобы увидеть, как эта функция изменяет контраст каждого изображения.

На втором изображении мы видим, что после нормализации оно стало ярче, но наиболее заметно уменьшилось стандартное отклонение для текущего пакета изображений.

Опять же, я создал переменную скользящего среднего на всякий случай, если мы хотим различать этапы обучения и тестирования.

И мы видим, что наш уровень GCN дает те же результаты, что и версия numpy.

д. Слой компонентов принципа реконструкции

Идея этого слоя чрезвычайно проста: с помощью PCA мы можем уменьшить размерность, выполнив матричное умножение между исходными данными и матрицей проекции. Но мы также можем восстановить исходные данные, используя только верхний элемент k основных компонентов. А поскольку все операции представляют собой матричное исчисление, мы можем продолжить через него.

После реконструкции мы теперь можем видеть, что все изображения смешаны друг с другом, а также среднее и стандартное значение для пакета изображений 0,37 и 0,19.

Наконец, давайте проведем простую проверку работоспособности, чтобы увидеть, дает ли нам высокоуровневый api (pca разложения sklearn) аналогичные результаты. После третьей цифры значения меняются, возможно, это связано с тем, что я использую разложение по собственным значениям, в то время как sklearn использует разложение по сингулярным значениям.

Интерактивный код

Для Google Colab вам потребуется учетная запись Google для просмотра кодов. Кроме того, вы не можете запускать сценарии только для чтения в Google Colab, поэтому сделайте копию на своем игровом поле. Наконец, я никогда не буду спрашивать разрешения на доступ к вашим файлам на Google Диске, просто к сведению. Удачного кодирования!

Чтобы получить доступ к коду для этого сообщения, пожалуйста, щелкните здесь.

Заключительные слова

Я должен был дважды проверить правильность всех градиентов, используя градиенты tf, это была ошибка с моей стороны.

Если будут обнаружены какие-либо ошибки, пожалуйста, напишите мне на [email protected], если вы хотите увидеть список всех моих писем, пожалуйста, просмотрите мой сайт здесь.

Ссылка

  1. тензор потока ?, h. (2018). как определить условие в тензорном потоке ?. Переполнение стека. Получено 22 октября 2018 г. с сайта https://stackoverflow.com/questions/41789209/how-to-define-condition-statement-in-tensorflow.
  2. погрешность, т.к. (2018). tenorflow: создание переменных в fn tf.map_fn возвращает ошибку значения. Переполнение стека. Получено 22 октября 2018 г. с сайта https://stackoverflow.com/questions/45789822/tensorflow-creating-variables-in-fn-of-tf-map-fn-returns-value-error.
  3. numpy / numpy. (2018). GitHub. Получено 22 октября 2018 г. с сайта https://github.com/numpy/numpy/blob/v1.15.1/numpy/core/_methods.py.
  4. Среднеквадратичное отклонение. (2018). Davidmlane.com. Получено 22 октября 2018 г. с сайта http://davidmlane.com/hyperstat/A16252.html.
  5. (2018). Dotnetperls.com. Получено 22 октября 2018 г. с сайта https://www.dotnetperls.com/arg-max-tensorflow.
  6. Шерфген, Д. (2018). Калькулятор производных • С шагами !. Derivative-calculator.net. Получено 22 октября 2018 г. с сайта https://www.derivative-calculator.net/.
  7. TensorFlow, А. (2018). Отрегулируйте одно значение в Tensor - TensorFlow. Переполнение стека. Получено 22 октября 2018 г. с сайта https://stackoverflow.com/questions/34685947/adjust-single-value-within-tensor-tensorflow.
  8. Тензорфлоу Б. (2018). Бинарная маска в Tensorflow. Переполнение стека. Получено 22 октября 2018 г. с сайта https://stackoverflow.com/questions/40443951/binary-mask-in-tensorflow.
  9. tf.self_adjoint_eig | TensorFlow. (2018). TensorFlow. Получено 23 октября 2018 г. с сайта https://www.tensorflow.org/api_docs/python/tf/self_adjoint_eig.
  10. PCA, О. (2018). Получите собственные значения и векторы из sklearn PCA. Переполнение стека. Получено 23 октября 2018 г. с сайта https://stackoverflow.com/questions/31909945/obtain-eigen-values-and-vectors-from-sklearn-pca.
  11. Http: // scikit-learn / scikit-learn. (2018). GitHub. Получено 23 октября 2018 г. с сайта https://github.com/scikit-learn/scikit-learn/blob/bac89c2/sklearn/decomposition/pca.py#L106.
  12. tf.self_adjoint_eig | TensorFlow. (2018). TensorFlow. Получено 23 октября 2018 г. с сайта https://www.tensorflow.org/api_docs/python/tf/self_adjoint_eig.
  13. (2018). Arxiv.org. Получено 23 октября 2018 г. с сайта https://arxiv.org/pdf/1709.06079.pdf.
  14. (2018). People.maths.ox.ac.uk. Получено 23 октября 2018 г. с сайта https://people.maths.ox.ac.uk/gilesm/files/NA-08-01.pdf.
  15. матрица ?, Х. (2018). Как стандартизировать матрицу ?. Переполнение стека. Получено 23 октября 2018 г. с сайта https://stackoverflow.com/questions/4544292/how-do-i-standardize-a-matrix/40951248.
  16. Аналитические методы PreMBA. (2018). Ci.columbia.edu. Получено 23 октября 2018 г. с сайта http://ci.columbia.edu/ci/premba_test/c0331/s6/s6_4.html.
  17. 1 ?, Х. (2018). Как нормализовать данные между -1 и 1 ?. Перекрестная проверка. Получено 23 октября 2018 г. с сайта https://stats.stackexchange.com/questions/178626/how-to-normalize-data-between-1-and-1.
  18. Формулы стандартного отклонения. (2018). Mathsisfun.com. Получено 23 октября 2018 г. с сайта https://www.mathsisfun.com/data/standard-deviation-formulas.html.
  19. Осуществление анализа главных компонентов (PCA). (2014). Доктор Себастьян Рашка. Получено 23 октября 2018 г. с сайта https://sebastianraschka.com/Articles/2014_pca_step_by_step.html.
  20. (2018). Cedar.buffalo.edu. Получено 23 октября 2018 г. с сайта https://cedar.buffalo.edu/~srihari/CSE676/12.2%20Computer%20Vision.pdf.
  21. препроцессинг), W. (2018). В чем разница между стандартизацией и глобальной нормализацией контраста? (Предварительная обработка изображений). Переполнение стека. Получено 23 октября 2018 г. с сайта https://stackoverflow.com/questions/27955695/whats-the-difference-between-standardization-and-global-contrast-normalization.
  22. препроцессинг), W. (2018). В чем разница между стандартизацией и глобальной нормализацией контраста? (Предварительная обработка изображений). Переполнение стека. Получено 23 октября 2018 г. с сайта https://stackoverflow.com/questions/27955695/whats-the-difference-between-standardization-and-global-contrast-normalization.
  23. python ?, Х. (2018). Как реализовать глобальную нормализацию контраста в Python ?. Обмен стеком Data Science. Получено 23 октября 2018 г. с сайта https://datascience.stackexchange.com/questions/15110/how-to-implement-global-contrast-normalization-in-python.