Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Исторические вехи развития нейросетей Гильберт(1900 г) Колмогоров(1957 г.) Розенблатт и ко(1960-1970 ее) ImageNet(2012 г.) Введение в нейронные сети с использованием Python 2 /25

Slide 3

Slide 3 text

Постановка проблемы Исходный набор данных: 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

Slide 4

Slide 4 text

Графическая интерпретация Функция f (a, b) = (a + b) ∗ (b + 1) Введение в нейронные сети с использованием Python 4 /25

Slide 5

Slide 5 text

”Общепринятые слои”. Полносвязанные слои Введение в нейронные сети с использованием Python 5 /25

Slide 6

Slide 6 text

”Общепринятые слои”. Свёрточные слои Введение в нейронные сети с использованием Python 6 /25

Slide 7

Slide 7 text

”Общепринятые слои”. Динамические слои Введение в нейронные сети с использованием Python 7 /25

Slide 8

Slide 8 text

Зоопарк сетей Введение в нейронные сети с использованием Python 8 /25

Slide 9

Slide 9 text

Прогнозирование временных рядов Ключевые слова: time-series Введение в нейронные сети с использованием Python 9 /25

Slide 10

Slide 10 text

Распознавание образов Ключевые слова: ImageNet, Image Classification, Classification Введение в нейронные сети с использованием Python 10 /25

Slide 11

Slide 11 text

Генерация образов Ключевые слова: Artistic style, GAN Введение в нейронные сети с использованием Python 11 /25

Slide 12

Slide 12 text

Преобразование текста Ключевые слова: LSTM, Chat-Bot, seq-seq Введение в нейронные сети с использованием Python 12 /25

Slide 13

Slide 13 text

Игровые модели Ключевые слова: AlphaGO, Reinforcement Learning, GYM AI Введение в нейронные сети с использованием Python 13 /25

Slide 14

Slide 14 text

Seq-seq задачи Ключевые слова: pix2pix, seq-seq Введение в нейронные сети с использованием Python 14 /25

Slide 15

Slide 15 text

Frameworks Введение в нейронные сети с использованием Python 15 /25

Slide 16

Slide 16 text

Tensorflow Плюсы: Поддержка программного гиганта Google Очень большое сообщество Интерфейсы низкого уровня и высокого уровня для сетевого обучения Чистая поддержка нескольких GPU Минусы: Изначально медленнее во многих тестах. Плохая поддержка RNN Введение в нейронные сети с использованием Python 16 /25

Slide 17

Slide 17 text

Keras Плюсы: 1 Выбор backend из Theano или TensorFlow. 2 Интуитивный интерфейс высокого уровня 3 Простая логика обучения Против: 1 Менее гибкий, более предписывающий, чем другие варианты Введение в нейронные сети с использованием Python 17 /25

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Lasagne Плюсы: Сравнительно гибкий Более высокий уровень абстракции Документы и код содержат много каламбуров Против: Небольшое сообщество Введение в нейронные сети с использованием Python 20 /25

Slide 21

Slide 21 text

CIFAR-10. Постановка задачи Введение в нейронные сети с использованием Python 21 /25

Slide 22

Slide 22 text

CIFAR-10. Архитекутра сети Введение в нейронные сети с использованием Python 22 /25

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

CIFAR-10. Tensorflow Lines 81–96 81 _activation_summary ( softmax_linear ) Введение в нейронные сети с использованием Python 23 /25

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Спасибо за внимание. Вопросы?? Введение в нейронные сети с использованием Python 25 /25