<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Рома Рыбальченко: заметки с тегом pycon</title>
<link>https://keen.nerevar.com/tags/pycon/</link>
<description>Аналитик-разработчик в Алисе</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.2 (v4116)</generator>

<itunes:subtitle>Аналитик-разработчик в Алисе</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>PyCon Russia 2016</title>
<guid isPermaLink="false">21</guid>
<link>https://keen.nerevar.com/all/pycon-russia-2016/</link>
<pubDate>Tue, 05 Jul 2016 22:09:04 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/pycon-russia-2016/</comments>
<description>
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/pycon2016_2.jpg" height="300"&gt;&lt;/p&gt;
&lt;p&gt;В начале июля состоялась двухдневная конференция &lt;a href="http://pycon.ru/2016/"&gt;Pycon Russia 2016&lt;/a&gt; в подмосковье. До этого 3 года подряд конференция проходила в Екб.&lt;br /&gt;
Мне очень понравилась как организация конфы, место проведения, так и сами доклады. Как начинающего питониста, меня порадовало разнообразие тем докладов: ядро CPython, тестирование, инфраструктура, machine learning, highload.&lt;/p&gt;
&lt;p&gt;UPD: а вот и доклады &lt;a href="https://www.youtube.com/watch?v=sEciSlAClL8&amp;index=1&amp;list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q"&gt;https://www.youtube.com/watch?v=sEciSlAClL8&amp;index=1&amp;list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/pycon2016_1.jpg" height="500"&gt;&lt;/p&gt;
&lt;p&gt;Краткий конспект самых интересных докладов:&lt;/p&gt;
&lt;h3&gt;Thinking about Concurrency&lt;/h3&gt;
&lt;p&gt;Two first things to learn about multithreading are fear and respect.&lt;br /&gt;
Доклад от разработчика языка python &lt;a href="https://twitter.com/raymondh"&gt;Raymond Hettinger&lt;/a&gt;’а про многопоточность. В нём сравниваются потоки и процессы (threads versus processes).&lt;br /&gt;
У потоков есть общий state, что является и плюсом и минусом одновременно — возникает проблема разграничения доступа потоков к общим данным. Для этого могут использоваться блокировки (locks) и флаги. Но они порождают deadlock’и и race conditions.&lt;br /&gt;
У процессов нет общих данных, они запускаются независимо.&lt;/p&gt;
&lt;pre&gt;
from multiprocessing import Pool
n = 10
pool = Pool(processes=n)
results = pool.map(complex_operation, [x for x in range(n)])
&lt;/pre&gt;
&lt;h3&gt;Theano&lt;/h3&gt;
&lt;p&gt;Екатерина Тузова из Jetbrains рассказывала про применение фреймворка нейронных сетей Theano как переводчик с языка математики в программирование. Постановка задачи такая, что к программистам приходят математики с моделью, которую просят запрограммировать. Тут на помощь приходит Theano, с помощью которого можно вычислять математические выражения, содержащие многомерные массивы. Презентация — &lt;a href="https://speakerdeck.com/ktisha/theano-lets-build-a-net"&gt;https://speakerdeck.com/ktisha/theano-lets-build-a-net&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Tensorflow and deep learning&lt;/h3&gt;
&lt;p&gt;Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google. Про это отдельный пост — &lt;a href="https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/"&gt;https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Docker:&lt;/h3&gt;
&lt;p&gt;От евангелиста докера был обзорный доклад технологии с примерами образа, настройками и конфигами. Как собрать образ с нуля по шагам, как разворачивать, куда его выкладывать. Как известно, любая команда в докере создаёт новый слой, который отдельно кешируется, скачивается, применяется, поэтому имеет смысл объединить похожие по смыслу действия в один слой. Так получаются всего несколько слоём: 1) установка python, окружения 2) установка проектных зависимостей 3) непосредственно запуск проекта.&lt;br /&gt;
Презентация — &lt;a href="https://speakerdeck.com/satyrius/deliver-python-apps-with-docker,"&gt;https://speakerdeck.com/satyrius/deliver-python-apps-with-docker,&lt;/a&gt; демо — &lt;a href="https://github.com/satyrius/paid"&gt;https://github.com/satyrius/paid&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Neo4j graph db&lt;/h3&gt;
&lt;p&gt;Программист-олимпиадник, который очень любит графы, рассказывал про промышленное использование баз данных для хранения графов. Например на тематике фильмов и актёров он получал все фильмы, в которых снимался определённый актёр (рёбра графа) или в социальной сети с разными типами дружбы — по пользователю выборку друзей, друзей друзей, друзей друзей друзей и т.д до 6 уровней рукопожатий. Так вот для простых запросов, где нужно выбрать друзей друзей, MySQL показывает хорошие результаты. Но с увеличением уровня сложности, количества join’ов, время выполнения запросов в мускуле растёт экспоненциально. И тут на помощь приходят graph databases, предназначенные для хранения графов и работы с ними. В таких db найти друзей друзей друзей — это всего лишь найти рёбра к соседним вершинам и выполняется за линейное время. Докладчик сравнил несколько баз данных и выбрал Neo4j, к ней надстройку Cypher Query Language с SQL-подобным синтаксисом и py2neo коннектором для питона.&lt;br /&gt;
Презентация — &lt;a href="https://asoldatenko.com/pyconru2016.pdf"&gt;https://asoldatenko.com/pyconru2016.pdf&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Знай и люби свой CPython&lt;/h3&gt;
&lt;p&gt;Доклад от разработчика из компании хакеров Positive Technologies про то, как устроен интерпретатор Питона и что можно сделать в его кишках. Как в C и ASM’е можно было работать с памятью напрямую, так и в докладе показаны примеры как менять значения переменных в памяти напрямую. В python, как известно, строки неизменяемы, а если писать напрямую в память — то на основе этого можно сделать класс MutableString. Значения любых переменных, свойства встроенных типов данных, действия операндов — всё можно менять. Для изучения как оно работает, поиграться — это интересно и познавательно. Только в production не рекомендуется использовать.&lt;br /&gt;
Презентация — &lt;a href="https://clck.ru/9zuvF"&gt;https://clck.ru/9zuvF&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;User-centered open source projects&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/222828002_128301_7824722293351189912.jpg" height="450"&gt;&lt;br /&gt;
Доклад на английском от Jackie Kazil из Capital One про разработку и окружение open-source проекта.&lt;br /&gt;
Разных библиотек на гитхабе много, а хороших — нет. Jackie привела чеклист вещей, которые должны быть в любом хорошем проекте:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Landing page&lt;/li&gt;
&lt;li&gt;«Getting Started»&lt;/li&gt;
&lt;li&gt;Install instructions (в идеале чтобы была одна строчка npm install или pip install)&lt;/li&gt;
&lt;li&gt;Contribution guide&lt;/li&gt;
&lt;li&gt;Responses &lt; 24hrs&lt;/li&gt;
&lt;li&gt;Clear git workflow&lt;/li&gt;
&lt;li&gt;Labeled branches&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Regular commits&lt;/li&gt;
&lt;li&gt;Project status, ownership&lt;/li&gt;
&lt;li&gt;Tests, test coverage and build result&lt;/li&gt;
&lt;li&gt;«Other users»&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Презентация — &lt;a href="http://www.slideshare.net/jackiekazil/usercentered-open-source"&gt;http://www.slideshare.net/jackiekazil/usercentered-open-source&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Tensorflow and deep learning from Pycon 2016</title>
<guid isPermaLink="false">22</guid>
<link>https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/</link>
<pubDate>Tue, 05 Jul 2016 11:02:51 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/</comments>
<description>
&lt;p&gt;Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google с конференции PyCon Russia 2016.&lt;/p&gt;
&lt;p&gt;В качестве предметной области был датасет &lt;a href="http://yann.lecun.com/exdb/mnist/"&gt;mnist&lt;/a&gt; с 50к чёрнобелых изображений цифр от 0 до 9 нарисованных от руки размером 28x28px. На вход нейросетке подаётся пачка картинок из flatten pixel mask размера 28x28=784 значения по каждой картинке, на выходе получаем вероятность класса от 0 до 9, которая сравнивается с реальным значением, функция ошибки — cross entropy.&lt;/p&gt;
&lt;p&gt;Для задач классификации в качестве функции активации хорошо подходит softmax — возвращает число от 0 до 1, которое можно интерпретировать как вероятность класса.&lt;/p&gt;
&lt;pre&gt;Y = softmax(X * W + b)&lt;/pre&gt;
&lt;p&gt;где X — массив картинок, каждая кодируется массивом из 784 значений 1 или 0 по пикселям, W — веса каждого пиксела и b — константа (bias)&lt;br /&gt;
Задача нейронной сети на каждом шаге, на каждой пачке данных, подбирать оптимальные веса для каждого пикселя путём минимизации функции ошибки&lt;/p&gt;
&lt;pre&gt;cross-entropy = -sum( Y_ans_i * log(Yi) )&lt;/pre&gt;
&lt;p&gt;где Yi — предсказанное значение, Y_ans_i — реальное значение.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/MNIST_2016-07-04_23-05-12.png" height="600"&gt;&lt;br /&gt;
При работе с нейросетями — формируешь структуру сети, подаёшь на вход много данных и снимаешь результат. А внутри происходит магия — нейросеть сама каким-то образом выделяет закономерности. Ещё добавить к этому сложную математическую модель оптимизации, получается работа с чёрным ящиком. Поэтому разработчикам очень важно наглядно видеть результат работы. Martin написал замечательную визуализацию процесса обучения сети, где показываются графики точности, ошибки, и самих изображений цифр, на которых тестируется модель.&lt;/p&gt;
&lt;p&gt;Базовый вариант одноуровневой нейросети с 10 нейронами выдаёт 92.6% точности. Это очень мало, если учесть, что максимальная точность предсказывания для этой задачи 99.7%. Поэтому нейронку можно и нужно улучшать и оптимизировать. Первое, что можно сделать — это создать глубокую нейросеть — добавить ещё слои. При добавлении слоёв с активацией &lt;a href="http://cs231n.github.io/neural-networks-1/"&gt;ReLU&lt;/a&gt; из 200, 100, 60, 30 нейронов к базовому уровню softmax из 10 нейронов, точность возрастает до 97.2%&lt;/p&gt;
&lt;p&gt;Следующий шаг — это регулирование learning rate decay — порога изменения весов W для нахождения минимума функции ошибки. Чем меньше значение порога — тем точнее будут подбираться веса и тем больше итераций и данных нужно, чтобы выровнялась точность предсказаний. With decaying learning rate from 0.003 to 0.0001 decay_speed 2000, 10K iterations, final test accuracy equals 0.9824.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/scaled/Tensorflow_and_deep_learning_-_without_a_PhD_-_Google_Slides_2016-07-04_23-20-05.scaled.png" height="450"&gt;&lt;br /&gt;
Наконец, можно использовать свёрточную (convolutional) нейронную сеть для классификации картинок. В обычной нейросети каждый нейрон связан со всеми нейронами предыдущего слоя, и каждая связь имеет свой вес. В свёрточной нейросети в операции свёртки используется небольшая матрица, «окно», которое двигается по всему слою и формирует сигнал активации для нейрона на следующем уровне с соответствующей позицией. Эта матрица (окно, ядро свёртки) построена таким образом, что графически кодирует какой-либо один признак, например, наличие наклонной линии под определенным углом. Тогда следующий слой, получившийся в результате операции свёртки матрицы весов, показывает наличие данной наклонной линии в обрабатываемом слое и её координаты, формируя карту признаков (feature map)&lt;br /&gt;
Так, добавив 3 свёрточных слоя (6x6str1 5x5str2 4x4str2) к полносвязному слою relu из 200 нейронов и softmax 10, &lt;a href="https://github.com/nerevar/tensorflow-mnist-tutorial/blob/master/mnist_3.0_convolutional.py#L147"&gt;получим точность&lt;/a&gt; 99.2%&lt;/p&gt;
&lt;p&gt;Презентация — &lt;a href="http://goo.gl/pHeXe7,"&gt;http://goo.gl/pHeXe7,&lt;/a&gt; код демки — &lt;a href="https://github.com/martin-gorner/tensorflow-mnist-tutorial"&gt;https://github.com/martin-gorner/tensorflow-mnist-tutorial&lt;/a&gt;&lt;br /&gt;
Интервью на хабре с Мартином &lt;a href="https://habrahabr.ru/company/it_people/blog/303832/"&gt;https://habrahabr.ru/company/it_people/blog/303832/&lt;/a&gt; В нём он рассказывает про &lt;a href="http://tflearn.org/"&gt;TFlearn&lt;/a&gt; — высокоуровневая надстройка над TensorFlow с синтаксическим сахаром для создания моделей, которую планируется внедрить в ядро TF, а пока что можно пользоваться отдельным контрибом.&lt;/p&gt;
</description>
</item>


</channel>
</rss>