Изначально это было размещено на http://www.thebeet21.com

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

Каждый раз, когда я читаю статью об этом или смотрю видео на YouTube о людях, использующих его, я не могу не чувствовать желание самому изучить его и сделать из него что-нибудь крутое. До недавнего времени, когда Google представил Tensorflow, бесплатную библиотеку с открытым исходным кодом для машинного обучения и анализа данных, это было довольно далеко от возможностей обычного человека.

Tensorflow - одно из лучших событий в мире вычислений. Это сделало машинное обучение действительно простым для всех, у кого хватит терпения научиться программировать. Google по сути передал в массы свой блестящий инструмент.

На мой взгляд, есть только одна проблема. Чтобы использовать его, вы должны научиться кодировать на Python. Не поймите меня неправильно. Все, что вы можете делать с любым другим языком, вы можете делать с Python. Но для некоторых людей вроде меня, которые годами программируют на другом языке, изучение Python только для одной цели кажется неэффективным использованием времени и ресурсов. Это может быть комментарий OK Boomer от инженера-программиста, который работает в отрасли более десяти лет. Но если есть что-то, что я узнал о разработке программного обеспечения, то наличие специализации всегда является плюсом, а изучение другого языка программирования - это скорее горизонтальный рост: это хорошо, но не приносит такой большой пользы в карьере.

Итак, я .NET-разработчик, который хочет заниматься машинным обучением. Но Tensorflow предназначен только для Python и некоторых других языков, которые не входят в .NET. Что ж, так было до появления Tensorflow.NET.

Tensorflow.NET - это библиотека привязки Tensorflow, реализованная в стандарте .NET. Проект направлен на предоставление всего API Tensorflow в экосистему .NET. Будучи стандартной библиотекой .NET, ее можно использовать на разных платформах через .NET Core. Что делает этот проект еще более удивительным, так это то, что они нашли способ сохранить версию .NET как можно ближе к реальному коду Python. Это делает использование библиотеки .NET таким же простым, как использование реального API в Python.

Возможно, вы спросите. У нас уже есть библиотека машинного обучения в .NET, которая называется ML.NET, так какой смысл изучать Tensorflow? Это правда, у нас уже есть ML.NET. Единственная проблема заключается в том, что это все еще относительно новая структура машинного обучения. С момента релиза они добились большого прогресса. Но им еще предстоит много работы. Фактически, последняя версия ML.NET (1.4 на момент написания) использует Tensorflow для достижения обучения передачи Deep Neural Network (DNN) с поддержкой GPU через привязки Tensorflow.NET. Так что, на мой взгляд, изучение Tensorflow через Tensorflow.NET по-прежнему стоит того, независимо от того, хотите вы придерживаться ML.NET или нет.

Итак, что нам делать, чтобы использовать Tensorflow.NET? Во-первых, мы должны установить, чем не является Tensorflow.NET.

  • Tensorflow.NET не является оболочкой для версии Python. Следовательно, вам не нужно устанавливать версию Python или любую другую версию, чтобы она работала.
  • Tensorflow.NET не является .NET-версией исходной библиотеки Tensorflow. Это просто связывающая библиотека, то есть для работы требуется другая библиотека.
  • Поскольку Tensorflow.NET зависит от Tensorflow API, определенная версия Tensorflow должна иметь соответствующую версию Tensorflow.NET. Таким образом, использование последней версии Tensorflow.NET (0.20 на момент написания) может работать для Tensorflow 1.15 и 2.2, но не будет работать для любой версии ниже 1.15. Документ readme может направить вас к нужной версии библиотеки привязки в зависимости от версии Tensorflow, которую вы собираетесь использовать.

Теперь, когда мы знаем, чем не является Tensorflow.NET, давайте обсудим, что такое Tensorflow.NET.

  • Tensorflow.NET - это библиотека привязки к распространяемому пакету SciSharp на основе Microsoft.ML.TensorFlow.Redist. Проще говоря, это реализация библиотеки Tensorflow, которая делает возможными привязки .NET.
  • Чтобы использовать Tensorflow.NET, вам нужно добавить ссылку на него в NuGet. Кроме того, вы должны выбрать правильный распространяемый файл для той версии Tensorflow.NET, которая у вас есть. В зависимости от ваших потребностей вы можете выбрать версию CPU или GPU.
  • Если вы хотите использовать Tensorflow.NET с графическим процессором, вам понадобится видеокарта Nvidia с поддержкой CUDA. Версия CUDA, которую вы можете использовать, будет зависеть от вашей видеокарты. Пожалуйста, обратитесь к документации Nvidia CUDA, чтобы узнать больше.

Теперь, когда мы все это знаем, приступим.

В открытой Visual Studio создайте консольный проект.

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

В диспетчере пакетов NuGet нажмите вкладку Обзор и найдите Tensorflow.NET и SciSharp.Tensorflow.Redist. Мы должны установить их оба в проект.

После их установки мы должны добавить using static Tensorflow.Binding;, чтобы объявить, что мы используем Tensorflow.NET.

После этого все в порядке. Чтобы попробовать, я скопировал образец кода в DataCamp. У них есть хороший учебник по Tensorflow для начинающих, который я очень рекомендую.

static void Main(string[] args)
{
    // Initialize two constants
    var x1 = tf.constant(new int[] { 1, 2, 3, 4 });
    var x2 = tf.constant(new int[] { 5, 6, 7, 8 });
    // Multiply
    var result = tf.multiply(x1, x2);
    // Print the result
    print(result);
}

Запустите проект, чтобы увидеть результат.

Чтобы проверить, является ли результат таким же, я запустил код в онлайн-оболочке Python, которая встроена в руководство.

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

Убедитесь, что в вашей системе установлена ​​библиотека разработки Nvidia CUDA. В зависимости от версии Tensorflow GPU вам понадобится определенная версия библиотеки CUDA. Например, для Tensorflow GPU версии 1.14.1 вам понадобится CUDA 10.0. Вы не можете использовать старую или новую версию. Не забудьте установить соответствующую библиотеку cuDNN для вашей версии CUDA.

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

Какое время быть разработчиком ... какое время действительно быть разработчиком.

Спасибо, за то что прочитали эту статью.

Если вы найдете эту статью интересной, нажмите кнопку 👏 и поделитесь ею.

Мои статьи публикуются на Medium и на моем сайте www.thebeet21.com.