Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ян Анисимов. Введение в нейронные сети с использованием Python

Ян Анисимов. Введение в нейронные сети с использованием Python

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

Python Community Chelyabinsk

February 03, 2018
Tweet

More Decks by Python Community Chelyabinsk

Other Decks in Programming

Transcript

  1. Введение в нейронные сети с использованием Python Анисимов Ян Олегович

    Инженер-программист ООО "Инсит-телеком" Инженер-исследователь ЮУрГУ(НИУ) - yanchick - yanchick_ - yanchick.org - [email protected] Введение в нейронные сети с использованием Python 1 /25
  2. Исторические вехи развития нейросетей Гильберт(1900 г) Колмогоров(1957 г.) Розенблатт и

    ко(1960-1970 ее) ImageNet(2012 г.) Введение в нейронные сети с использованием Python 2 /25
  3. Постановка проблемы Исходный набор данных: X, Y ; Существующая или

    предполагаемая зависимость: X =⇒ Y ; Необходимо создать такую функцию F(θ, X), которая реализовала существующую зависимость. Предлагаемое решение: Y = f (n)(f (n−1)(...f (1)(X, θ(1)), θ(n−1))θ(n)) Проблема разработчиков подбор: f (i),θ(i), i = 1, n Задача обучения: arg opt θ E(F(x), Y ) Введение в нейронные сети с использованием Python 3 /25
  4. Графическая интерпретация Функция f (a, b) = (a + b)

    ∗ (b + 1) Введение в нейронные сети с использованием Python 4 /25
  5. Игровые модели Ключевые слова: AlphaGO, Reinforcement Learning, GYM AI Введение

    в нейронные сети с использованием Python 13 /25
  6. Tensorflow Плюсы: Поддержка программного гиганта Google Очень большое сообщество Интерфейсы

    низкого уровня и высокого уровня для сетевого обучения Чистая поддержка нескольких GPU Минусы: Изначально медленнее во многих тестах. Плохая поддержка RNN Введение в нейронные сети с использованием Python 16 /25
  7. Keras Плюсы: 1 Выбор backend из Theano или TensorFlow. 2

    Интуитивный интерфейс высокого уровня 3 Простая логика обучения Против: 1 Менее гибкий, более предписывающий, чем другие варианты Введение в нейронные сети с использованием Python 17 /25
  8. PyTorch Плюсы: Организационная поддержка Facebook Чистая поддержка динамических графиков API

    высокого уровня и низкого уровня Против: Гораздо менее зрелый, чем альтернативы. Ограниченные ссылки / ресурсы за пределами официальной документации Введение в нейронные сети с использованием Python 18 /25
  9. Theano Плюсы: 1 Гибкий 2 Работает при правильном использовании Против:

    1 Сложная кривая обучения 2 API нижнего уровня 3 Компиляция сложных символических графов может быть медленной Введение в нейронные сети с использованием Python 19 /25
  10. Lasagne Плюсы: Сравнительно гибкий Более высокий уровень абстракции Документы и

    код содержат много каламбуров Против: Небольшое сообщество Введение в нейронные сети с использованием Python 20 /25
  11. CIFAR-10. Tensorflow Lines 1–16 1 with tf. variable_scope (’conv1 ’)

    as scope: kernel = _variable_with_weight_decay (’weights ’, shape =[5, 5, 3, 64], stddev =5e-2, 5 wd =0.0) conv = tf.nn.conv2d(images , kernel , [1, 1, 1, 1], padding=’SAME ’) biases = _variable_on_cpu (’biases ’, [64] , 10 tf. constant_initializer (0.0)) pre_activation = tf.nn.bias_add(conv , biases) conv1 = tf.nn.relu(pre_activation , name=scope.name) _activation_summary (conv1) 15 pool1 = tf.nn.max_pool(conv1 , Введение в нейронные сети с использованием Python 23 /25
  12. CIFAR-10. Tensorflow Lines 17–32 17 ksize =[1, 3, 3, 1],

    strides =[1, 2, 2, 1], padding=’SAME ’, name=’pool1 ’) 20 norm1 = tf.nn.lrn(pool1 , 4, bias =1.0 , alpha =0.001 / 9.0, beta =0.75 , name=’norm1 ’) with tf. variable_scope (’conv2 ’) as scope: 25 kernel = _variable_with_weight_decay (’weights ’, shape =[5, 5, 64, 64], stddev =5e-2, wd =0.0) conv = tf.nn.conv2d(norm1 , 30 kernel , [1, 1, 1, 1], padding=’SAME ’) biases = _variable_on_cpu (’biases ’, [64] , Введение в нейронные сети с использованием Python 23 /25
  13. CIFAR-10. Tensorflow Lines 33–48 33 tf. constant_initializer (0.1)) pre_activation =

    tf.nn.bias_add(conv , biases) 35 conv2 = tf.nn.relu(pre_activation , name=scope.name) _activation_summary (conv2) norm2 = tf.nn.lrn(conv2 , 4, bias =1.0, 40 alpha =0.001 / 9.0, beta =0.75 , name=’norm2 ’) pool2 = tf.nn.max_pool(norm2 , ksize =[1, 3, 3, 1], strides =[1, 2, 2, 1], 45 padding=’SAME ’, name=’pool2 ’) with tf. variable_scope (’local3 ’) as scope: Введение в нейронные сети с использованием Python 23 /25
  14. CIFAR-10. Tensorflow Lines 49–64 49 reshape = tf.reshape(pool2 , 50

    [FLAGS.batch_size , -1]) dim = reshape.get_shape ()[1]. value weights = _variable_with_weight_decay (’weights ’, shape =[dim , 384] , stddev =0.04 , wd =0.004) 55 biases = _variable_on_cpu (’biases ’, [384] , tf. constant_initializer (0.1)) local3 = tf.nn.relu( tf.matmul(reshape , weights) + biases , name=scope.name) 60 _activation_summary (local3) with tf. variable_scope (’local4 ’) as scope: weights = _variable_with_weight_decay (’weights ’, shape =[384 , 192] , Введение в нейронные сети с использованием Python 23 /25
  15. CIFAR-10. Tensorflow Lines 65–80 65 stddev =0.04 , wd =0.004)

    biases = _variable_on_cpu (’biases ’, [192] , tf. constant_initializer (0.1)) local4 = tf.nn.relu( tf.matmul(local3 , weights) + biases , 70 name=scope.name) _activation_summary (local4) with tf. variable_scope (’softmax_linear ’) as scope: weights = _variable_with_weight_decay (’weights ’, 75 [192 , NUM_CLASSES], stddev =1/192.0 , wd =0.0) biases = _variable_on_cpu (’biases ’, [NUM_CLASSES], tf. constant_initializer (0.0) softmax_linear = tf.add(tf.matmul(local4 , weights) 80 biases , name=scope.name) Введение в нейронные сети с использованием Python 23 /25
  16. CIFAR-10. Tensorflow Lines 81–96 81 _activation_summary ( softmax_linear ) Введение

    в нейронные сети с использованием Python 23 /25
  17. CIFAR-10. Keras 1 model = Sequential () model.add(Conv2D (32, (3,

    3), padding=’same ’, input_shape=x_train.shape [1:])) model.add(Activation(’relu ’)) 5 model.add(Conv2D (32, (3, 3))) model.add(Activation(’relu ’)) model.add(MaxPooling2D(pool_size =(2, 2))) model.add(Conv2D (64, (3, 3), padding=’same ’)) 10 model.add(Activation(’relu ’)) model.add(Conv2D (64, (3, 3))) model.add(Activation(’relu ’)) model.add(MaxPooling2D(pool_size =(2, 2))) 15 model.add(Flatten ()) model.add(Dense (512)) model.add(Activation(’relu ’)) model.add(Dense(num_classes )) model.add(Activation(’softmax ’)) Введение в нейронные сети с использованием Python 24 /25